【ORB_SLAM系列4】—— 一文搞定如何在Ubuntu20.04中安装运行ORB_SLAM3(包含ROS版本和非ROS版本)

2024-06-14 22:52

本文主要是介绍【ORB_SLAM系列4】—— 一文搞定如何在Ubuntu20.04中安装运行ORB_SLAM3(包含ROS版本和非ROS版本),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、ORB_SLAM源码下载
    • 1.源码下载
  • 二、安装支持C++特性依赖
  • 三、安装Pangolin
    • 1. 安装Pangolin的依赖
    • 2. 下载编译
  • 四、安装Opencv
  • 五、安装Eigen3
  • 六、DBoW2 and g2o
  • 七、安装boost库
  • 八、非ROS部分的源码编译和安装
    • 1. 编译之前先修改代码
    • 2. 编译源码
  • 九、ROS部分的源码编译和安装
    • 1. 创建ROS工作空间(已创建可忽略)
    • 2. 编译前先对源码进行修改
    • 3. 编译运行源码
  • `创作不易,有什么错误的地方,希望大佬们指出,以免误人子第!!!!!`
  • 总结


前言

ORB-SLAM3是一款基于特征点的实时单目SLAM系统,是SLAM领域的研究热点之一。它的核心算法是结合了ORB特征点提取和描述子匹配、单目RGB相机的深度估计、运动估计和地图优化等步骤,能够在实时性和精度之间取得平衡,适用于各种环境下的定位和建图任务。在各种应用领域都有广泛的应用,如室内导航、自动驾驶、机器人导航、增强现实等。通过在移动机器人和自主系统中实现实时的SLAM功能,ORB-SLAM3为机器人领域的研究和应用提供了强大的支持,帮助机器人实现自主导航和定位。

ORB-SLAM3的算法原理主要包括以下几个步骤:首先,通过ORB特征点提取和描述子匹配来进行特征点的追踪和匹配;然后利用单目RGB相机的深度信息进行稀疏或稠密的深度估计;接着通过运动估计来估计相机的运动和姿态变换;最后通过地图优化来不断修正和优化地图的几何结构,从而实现实时的定位和建图。

总的来说,ORB-SLAM3作为一款领先的实时SLAM系统,不仅在技术上具有重要意义,还在社会和经济发展中发挥着积极的作用,推动了机器人技术的发展和应用,为社会带来了更多的便利和效益。

一、ORB_SLAM源码下载

打个预告:在ubuntu20.04中安装和运行ORB3相对在18.04中来讲,要简单很多,很多库都是系统自带,不需要也没必要重新下载按装下载其他的库版本,很麻烦,也会很容易搞乱了电脑环境,一定要秉承能改代码就改,不行再换库的原则,切记!!!!!,不然一不小心就喜提重装系统一次!废话不多说,开始教程。

本次教程是介绍如何在ubuntu20.04中运行ORB_SLAM3
配置的环境如下:

Ubuntu20.04、 ROS:Noetic
Opencv4.2.0、 Pangolin0.6
Boost库1.77.0版本、 Eigen3.7

先创建个工作空间,把所有要装的源代码放进工作空间目录下的src文件下,后面配ROS环境下的SLAM时要用到。这次运行的版本是master/1.0,虽然是二刷,由于ubuntu版本和以前安装的不同的原因,还是有很多坑!!!

1.源码下载

要下载master/1.0版本的源码:

下载网址:https://github.com/UZ-SLAMLab/ORB_SLAM3

版本如下所示:
在这里插入图片描述

去github下载的代码,建议可以复制github代码连接的URL,从码云(gitee)上导入下载,下载快些。

二、安装支持C++特性依赖

终端输入:

sudo apt-get install gcc
sudo apt-get install g++
sudo apt-get install build-essential
sudo apt-get install cmake
sudo apt-get install git

三、安装Pangolin

1. 安装Pangolin的依赖

sudo apt install libgl1-mesa-dev
sudo apt install libglew-dev
sudo apt install libpython2.7-dev
sudo apt install pkg-config
sudo apt install libegl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocols

2. 下载编译

注意:下载0.6版本安装即可,一定不要安装最新版的Pangolin!!!!
不然运行./buil_ros.sh时出现如下错误:

在这里插入图片描述
解决:
卸载重装,不然要改很多源代码
在Pangolin/build目录下打开终端:sudo apt uninstall ,然后删除Panglion文件夹即可。

(1)下载源码

下载地址:https://github.com/stevenlovegrove/Pangolin

(2)编译安装
进入Pangolin目录下,创建build:

mkdir build    
cd build

编译源码:

cmake .. 
make

安装到本机:

sudo make install

(3)检查是否安装成功

cd examples/HelloPangolin
./HelloPangolin 

有如下的正方体图案出现即表示安装成功。

在这里插入图片描述

四、安装Opencv

在ubuntu20.04中自带了opencv4.2.0的版本,故无需重装,修改代码中有光opencv版本信息即可,如下所示:
1. 修改工作空间目录下src/ORB_SLAM3下的CMakeLists.txt文件
修改为如下图如下:

在这里插入图片描述

具体代码如下

find_package(OpenCV 4.0 REQUIRED)if(NOT OpenCV_FOUND)message(FATAL_ERROR "OpenCV > 3.0 not found.")endif()

2. 在ORB_SLAM3/Thirdparty/DBoW2/CMakeLists.txt中修改为:

在这里插入图片描述

具体代码如下

find_package(OpenCV 4.0 QUIET)
if(NOT OpenCV_FOUND)find_package(OpenCV 3.0 QUIET)if(NOT OpenCV_FOUND)message(FATAL_ERROR "OpenCV > 2.1.3.0 not found.")endif()
endif()

3. 在ROS/ORB_SLAM3/CMakeLists.txt中修改:

在这里插入图片描述

具体代码如下

find_package(OpenCV 4.0 QUIET)
if(NOT OpenCV_FOUND)find_package(OpenCV 2.4.3 QUIET)if(NOT OpenCV_FOUND)message(FATAL_ERROR "OpenCV > 2.4.3 not found.")endif()
endif()

注意:如果你的opencv版本是3.x.x的,则修改成3.0即可,本机的是4.2.0故修改成4.0,一定不要只改成4,这样也会报错,原因暂时未知。

五、安装Eigen3

在ubuntu20.04中自带了Eigen3的版本,这步可以跳过,使用自带的即可。

六、DBoW2 and g2o

DBoW2主要用于回环检测,g2o(General Graph Optimization)主要用于图优化。ORB-SLAM3的master/1.0的源码包自带DBoW2 and g2o,编译时会自动安装。不用管。

七、安装boost库

ubuntu20.04中自带boost库可以使用,可以跳过此步,使用自带的即可。

八、非ROS部分的源码编译和安装

1. 编译之前先修改代码

(1) 修改在CMakeList.txt文件
在src/ORB_SLAM和ROS/ORB_SLAM目录下,建议在-wall 后面加上-w 用于屏蔽Warning便于发现错误上午真正位置。如下图所示:

在这里插入图片描述

(2) 修改build.sh/build_ros.sh文件
建议将build.sh/build_ros.sh文件中的make -j/make -j4改成make -j2/make 避免运行./build.sh时出现系统卡死的情况

(3) 修改build_ros.sh文件
如果使用的是master/1.0版本的源码,要build_ros.sh文件中的其中的路径,Example改成Example_old,应为新版本的源码中ROS文件夹放到了Example_old目录下了。

(4) 修改ORB_SLAM3/CMakeLists.txt文件
添加c++的使用许可:

 add_compile_options(-std=c++14)

添加的位置如下图所示:

在这里插入图片描述

(5) 修改mono_euroc.cc文件
ORB_SLAM3-master/1.0版本是默认不打开窗口的,运行ORB_SLAM3时,只有终端的窗口,没有调出其他可视化的。在/ORB_SLAM3_ws/src/ORB_SLAM3/Examples/Monocular目录和下修改mono_euroc.cc文件,将false改成true,如下所示:

在这里插入图片描述
具体代码如下

ORB_SLAM3::System SLAM(argv[1],argv[2],ORB_SLAM3::System::MONOCULAR, true);

2. 编译源码

终端输入:

 chmod +x build.sh./build.sh

至此,编译非ROS环境下的源码应该是没什么问题了!编译成功的终端截图如下:

在这里插入图片描述

九、ROS部分的源码编译和安装

1. 创建ROS工作空间(已创建可忽略)

1)创建工作空间,终端输入:

roscore
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace

2)编译工作空间

cd ~/catkin_ws/
catkin_make

3)使得工作空间的环境变量生效

source devel/setup.bash

4)使得环境变量在所有的终端中都有效(将路径添加进.bashrc文件中):

按个人的喜好,此步骤不是必选项,执行这段代码之后,意味着电脑开机就自动生效该工作空间的ROS环境

echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc

5)保存.bashrc文件,查看添加的环境变量是否生效:

source ~/.bashrc

6)查看添加的环境变量是否生效,创建一个新终端,输入

echo $ROS_PACKAGE_PATH

回车之后会显示如下语句,如果打印的路径中包含当前工作空间的路径,则环境变量设置成功。

2. 编译前先对源码进行修改

**(1) 修改Viewer.cc文件 **
在Example_old/ROS/ORB_SLAM3/src/AR目录下,在Viewer.cc文件中添加如下:

{PROJECT_SOURCE_DIR}/../../../Thirdparty/Sophus

添加的位置如下:
在这里插入图片描述

不添加可能会出现报错:提示找不到sophus库,如下图所示:
在这里插入图片描述

(2) 修改ViewerAR.cc文件
在ROS/ORB_SLAM3/src/AR目录下,修改ViewerAR.cc文件
1)添加Converter.h头文件

#include "../../../include/Converter.h"

修改的位置如下图所示:
在这里插入图片描述
2)大概405行,修改为

vPoints.push_back(ORB_SLAM3::Converter::toCvMat(pMP->GetWorldPos()));

修改的位置如下图所示:
在这里插入图片描述
3)大概在530行,修改为

cv::Mat Xw = ORB_SLAM3::Converter::toCvMat(pMP->GetWorldPos());

修改的位置如下图所示:
在这里插入图片描述

(3) 修改ros_mono_ar.cc文件
在ROS/ORB_SLAM3/src/AR目录下,修改ros_mono_ar.cc文件
1)添加Converter.h头文件

#include "../../../include/Converter.h"

修改的位置如下图所示:
在这里插入图片描述

2) 大概在151行,修改为:

cv::Mat Tcw=ORB_SLAM3::Converter::toCvMat(mpSLAM->TrackMonocular(cv_ptr->image,cv_ptr->header.stamp.toSec()).matrix());

修改的位置如下图所示:
在这里插入图片描述

3. 编译运行源码

(1) 将ROS包的路径添加到环境中
打开bashrc文件并编辑

终端输入:sudo gedit ~/.bashrc

在.bashrc的最后一行加入ORBSLAM的ROS代码寻找的路径

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/chen/catkin_ws/src/ORB_SLAM3/Examples_old/ROS

注意:其中的路径换成自己的路径,如果ROS包在Example文件夹中,则改成Example

再打开一个终端运行

source ~/.bashrc
echo ${ROS_PACKAGE_PATH}

如果能正确显示刚刚加入的地址则正常。

(2) 编译代码
配置完成后,在src/ORB_SLAM3目录下打开终端:

chmod +x build_ros.sh
./build_ros.sh

可能的报错:
在这里插入图片描述
原因:
ORB_SLAM的路径没设置成功,导致定位不到ROS包的路径

解决:
(1) 首先在~/.bashrc文件上上设置路径
添加的代码如下:

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/chen/catkin_ws/src/ORB_SLAM3/Examples_old/ROS

其中的路径改成自己的路径即可
生效环境:

source ~/.bashrc

注意:重新执行./build_ros.sh编译,依然报定位不到ROS包的错误,再进行下一步:

(2) 在ROS的安装路径下更改路径

cd /opt/ros/noetic/
sudo gedit setup.bash 

添加如下的代码

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/chen/catkin_ws/src/ORB_SLAM3/Examples_old/ROS

其中的路径改成自己的路径即可
生效环境

source setup.bash

没出意外的话,到此,编译ROS环境下的SLAM3源码就已经成功!!!

创作不易,有什么错误的地方,希望大佬们指出,以免误人子第!!!!!

总结

以上就是运行ORB_SLAM的全部详细教程,主要是介绍了关于在ubuntu20.04中运行ORB_SLAM3的所有依赖的库的安装过程,和所遇到的一些报错的解决方法。有什么问题,可以评论区里面交流讨论。如需要已修改过的代码文件,可直接运行的代码,在评论区留言即可。

这篇关于【ORB_SLAM系列4】—— 一文搞定如何在Ubuntu20.04中安装运行ORB_SLAM3(包含ROS版本和非ROS版本)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1061724

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

Centos7安装Mongodb4

1、下载源码包 curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.1.tgz 2、解压 放到 /usr/local/ 目录下 tar -zxvf mongodb-linux-x86_64-rhel70-4.2.1.tgzmv mongodb-linux-x86_64-rhel70-4.2.1/

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

Centos7安装JDK1.8保姆版

工欲善其事,必先利其器。这句话同样适用于学习Java编程。在开始Java的学习旅程之前,我们必须首先配置好适合的开发环境。 通过事先准备好这些工具和配置,我们可以避免在学习过程中遇到因环境问题导致的代码异常或错误。一个稳定、高效的开发环境能够让我们更加专注于代码的学习和编写,提升学习效率,减少不必要的困扰和挫折感。因此,在学习Java之初,投入一些时间和精力来配置好开发环境是非常值得的。这将为我

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl