(01)ORB-SLAM2源码无死角解析-(01) 环境搭建,demo运行,ROS一键安装_清除各种疑难杂症

讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析-接如下(本文内容来自计算机视觉life ORB-SLAM2 课程课件):
(01)ORB-SLAM2源码无死角解析-(00)目录_最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/123092196
 
文末正下方中心提供了本人 联系方式, 点击本人照片即可显示 W X → 官方认证 {\color{blue}{文末正下方中心}提供了本人 \color{red} 联系方式,\color{blue}点击本人照片即可显示WX→官方认证} 文末正下方中心提供了本人联系方式,点击本人照片即可显示WX官方认证
 

请注意本人使用环境为 U b u n t u 18.04 \color{red}{Ubuntu18.04} Ubuntu18.04,另外本人现在的时间点为 20220223 \color{red}{20220223} 20220223 无法保证你现在的时间点,相应的依赖库或者工程作者是否有更新,不过本人编译的相关文件都有保留,可以直接获取(无法获取则可评论,或者联系我本人):
链接:https://pan.baidu.com/s/15H8ZrN4IUcMjxHSnfWB6TQ
提取码:1234     --来自百度网盘超级会员V5的分享
 

一、环境准备与介绍

(1)本人运行的系统为 Ubuntu18.04,使用docker(不明白则理解为裸机)进行创建,该环境纯净,初始无任何安装包
(2)开源代码ORB-SLAM2链: https://github.com/raulmur/ORB_SLAM2

换源,修改/etc/apt/sources.list文件,文末添加如下内容,添加完成之后执行 apt-get update

deb https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
	#首先我们创建一个目录为01.ORB-SLAM2源码解析,执行指令如下:
	sudo mkdir /my_work/01.ORB-SLAM2源码解析
	# 进入该目录
	cd /my_work/01.ORB-SLAM2源码解析
	# 创建一个用来存错依奈包的目录:
	sudo mkdir 01.Prerequisites
	
	以上目录名称都可以进行自定义的

按照下面的 流程操作完成 \color{red}{流程操作完成} 流程操作完成之后,目录结构应该如下图所示:
在这里插入图片描述

二、依奈安装与编译

首先我们要阅读 ORB_SLAM2 对应的 README.md 文件,可以发现其依奈: Pangolin,OpenCV,Eigen3,DBoW2,g2o,ROS 这几个工程,是否还有其他的依奈暂时未知,我们先按照 README.md 文件的介绍依次进行安装如下。
 

(1)Pangolin

	# 进入依奈目录
	cd /my_work/01.ORB-SLAM2源码解析/01.Prerequisites
	
	# 获得源码,注意这里需要的是,我们需要的是0.5版本的
	apt-get install git
	git clone https://github.com/stevenlovegrove/Pangolin.git
	cd Pangolin
	git checkout v0.5
	
	# 依奈安装
	sudo apt-get update
	sudo apt install libgl1-mesa-dev
	sudo apt install libglew-dev
	sudo apt install cmake
	sudo apt install libpython2.7-dev
	sudo apt install pkg-config
	sudo apt install libegl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocols
	sudo apt install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev libavdevice-dev
	sudo apt install libdc1394-22-dev libraw1394-dev
	sudo apt install libjpeg-dev libpng-dev libtiff5-dev libopenexr-dev

	# 特殊依奈(原本是后续需要安装的)
	sudo apt-get install libeigen3-dev	

	# 编译安装
	mkdir build 
	cd build
	cmake ..
	sudo make -j18 # runs 18 jobs in parallel
	sudo make install

执行 cmake … 执行之后本人打印如下,则表示成功:在这里插入图片描述
执行 make 之后打印如下,则表示成功:
在这里插入图片描述
执行 sudo make install 执行之后本人打印如下,则表示成功:
在这里插入图片描述
 

(2)Opencv

	# 进入依奈目录
	cd /my_work/01.ORB-SLAM2源码解析/01.Prerequisites

	# 获取Opencv源码
	git clone https://github.com/opencv/opencv.git
	git clone https://github.com/opencv/opencv_contrib.git
	# 切换为 3.4.6 版本
	cd opencv_contrib
	git checkout 3.4.6
	cd ../opencv
	git checkout 3.4.6
	
	#依奈安装
	sudo apt-get install build-essential
	sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
	sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev
	
	# 代码编译
	mkdir build
	cd build
	sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
	sudo make -j18 # runs 18 jobs in parallel
	sudo make install

运行完成之后本人打印如下:

sudo make -j18

make -j18

sudo make install

在这里插入图片描述
 

(3)Eigen3

	# 其实在前面已经安装过了
	sudo apt-get install libeigen3-dev	

(4)DBoW2 and g2o

    已经包含在ORBSLAM2中的第三⽅库⽂件夹中,不需要⾃⼰编译安装

(5)ROS (optional)

可以参考:
    (01) http://wiki.ros.org/melodic/Installation/Ubuntu
    (02)一行代码搭建机器人开发环境(ROS/ROS2/ROSDEP)

	# 如果之前安装过ros先卸载
	sudo apt-get purge ros-*
	
	# 执行指令
	wget http://fishros.com/install -O fishros && . fishros

出现如下界面,
在这里插入图片描述
根据提示我们再次运行: wget http://fishros.com/install -O fishros && . fishros,出现如下界面,则输入 1 即可。
在这里插入图片描述
出现如下界面则输入 1 即可:
在这里插入图片描述
出现如下界面则输入 1 即可:
在这里插入图片描述
出现如下界面则输入 1 即可:
在这里插入图片描述
后续还需要输入6选择6. Asia,以及70选择70. Shanghai。安装完成之后本人打印如下:
在这里插入图片描述

	apt-get install python3-pip
	pip3 install rosdepc
	rosdepc init
	rosdepc update

执行之后本人打印如下:
在这里插入图片描述
后面我们进行一个测试实验,

	#完成上述工作之后,我们再验证ROS是否安装成功,我们首先要开启三个终端,每个终端运行对应的指令如下:
	第一个终端: roscore
	第二个终端: rosrun turtlesim turtlesim_node # 会出现一个小海龟,
	第三个终端: rosrun turtlesim turtle_teleop_key # 接下来就在可以通过方向键控制海龟的移动。

注意,其上所有终端需要重新开启 \color{red}{注意,其上所有终端需要重新开启} 注意,其上所有终端需要重新开启
本人显示图像图下:
在这里插入图片描述
 
 

三、ORB_SLAM2 安装与编译

通过前面的介绍我们已经我们已经安装好了相关的依奈环境,那么我们接下来的任务就是安装 ORB_SLAM2 了。执行如下指令:

	cd /my_work/01.ORB-SLAM2源码解析
	git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
	cd ORB_SLAM2
	chmod +x build.sh
	./build.sh

本人报错如下:
在这里插入图片描述
在这里插入图片描述

ORB_SLAM2/src/LoopClosing.cc:84:9: error: ‘usleep’ was not declared in this scope
usleep(5000);
CMakeFiles/ORB_SLAM2.dir/build.make:494: recipe for target ‘CMakeFiles/ORB_SLAM2.dir/src/Viewer.cc.o’ failed
make[2]: *** [CMakeFiles/ORB_SLAM2.dir/src/Viewer.cc.o] Error 1

使用如下方案解决:

	// 主要的问题为: error: ‘usleep’ was not declared in this scope
	//解决⽅式为在sudo vim include/System.h中添加⼀句
	#include "unistd.h"

然后重新执行: ./build.sh , 本人打印如下:
在这里插入图片描述
运⾏结束后将会⽣成libORB_SLAM2.so 在lib⽂件夹中 以及测试程序 mono_tum,mono_kitti, rgbd_tum, stereo_kitti, mono_euroc和 stereo_euroc 在Example⽂件夹中。

 
 

四、demo 演示

(1)单⽬⽰例

    我们首先以单目模式下的TUM数据集为例子,演示作者提供的例子是如何运行的。首先我们从 http://vision.in.tum.de/data/datasets/rgbd-dataset/download 链接中下载任意一个数据包,比如本人下载如下:
在这里插入图片描述
并且解压,解压之后的路径存放为 路径存放 : \color{red}{路径存放:} 路径存放:/my_work/01.ORB-SLAM2源码解析/Datasets/rgbd_dataset_freiburg1_xyz,准备好这些工作之后,我们执行如下指令:

	cd /my_work/01.ORB-SLAM2源码解析/ORB_SLAM2
	
	#执行指令./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUMX.yaml PATH_TO_SEQUENCE_FOLDER
	# 注意,此处的TUMX.yaml⽂件要对应于你下载的数据集类型, PATH_TO_SEQUENCE_FOLDER要对应于你的数据集⽂件夹路径,所以本人修改为:
	./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml /my_work/01.ORB-SLAM2源码解析/Datasets/rgbd_dataset_freiburg1_xyz

本人运行之后显示效果如下:
在这里插入图片描述

在这里插入图片描述
 

(2)深度⽰例

这里我们使用 单⽬⽰例 的数据集,也就是前面我们下载且解压之后的/my_work/01.ORB-SLAM2源码解析/Datasets/rgbd_dataset_freiburg1_xyz数据集,但是针对于深度摄像头的示例,我们是不能直接使用的我们需要做一些处理。主要流程,主要参考README.md文件的6. RGB-D Example,本人截图如下:
在这里插入图片描述

	一、数据准备与处理:
		(1)这里数据我们使用/my_work/01.ORB-SLAM2源码解析/Datasets/rgbd_dataset_freiburg1_xyz,所以不需要重复下载
		(2)根据介绍提示下载  associate.py 为文件,链接为: http://vision.in.tum.de/data/datasets/rgbd-dataset/download
		(3)下载完成之后存放在/my_work/01.ORB-SLAM2源码解析/Datasets/目录下
		(4)执行如下指令生成 associations.txt 文件
			cd /my_work/01.ORB-SLAM2源码解析/Datasets/
			python associate.py rgbd_dataset_freiburg1_xyz/rgb.txt rgbd_dataset_freiburg1_xyz/depth.txt >  rgbd_dataset_freiburg1_xyz/associations.txt		

如果操作正确,我们可以看到 /my_work/01.ORB-SLAM2源码解析/Datasets/rgbd_dataset_freiburg1_xyz/associations.txt 文件的内容如下:
在这里插入图片描述
完成了数据处理之后,我们就要执行命令,运行深度示例了:

	二、深度示例运行代码
		cd /my_work/01.ORB-SLAM2源码解析/ORB_SLAM2
		# 官方的介绍为运行 ./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUMX.yaml PATH_TO_SEQUENCE_FOLDER ASSOCIATIONS_FILE
		# 但是我们需要进行适当的修改,如TUMX改成TUM1,替换PATH_TO_SEQUENCE_FOLDER,以及 ASSOCIATIONS_FILE
		./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml /my_work/01.ORB-SLAM2源码解析/Datasets/rgbd_dataset_freiburg1_xyz  /my_work/01.ORB-SLAM2源码解析/Datasets/rgbd_dataset_freiburg1_xyz/associations.txt

运行的结果与单目示例比较类似,为了博客不过于臃肿,我们这里就不再进行结果的贴图。

(3)双⽬⽰例

    下面我们我们讲解双目摄像头的示例如何运行。这里我们以ROS为例,顺便带大家把ROS也编译配置成功。

	cd /my_work/01.ORB-SLAM2源码解析/ORB_SLAM2
	#⾸先需要将Examples/ROS/ORB_SLAM2路径导⼊到ROS_PACKAGE_PATH环境变量中,
	#具体做法为打开终端,输⼊sudo vim ~./bashrc,并在⽂件最后⼀⾏添加
	# export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAMª/Examples/ROS
	# 此处的PATH为你的ORBSLAM2⽂件夹所在的绝对路径,所以本人添加的代码为:
	export ROS_PACKAGE_PATH=/my_work/01.ORB-SLAM2源码解析/ORB_SLAM2/Examples/ROS:${
    
    ROS_PACKAGE_PATH}
	chmod +x build_ros.sh
	./build_ros.sh

运行之后报错如下:
/usr/bin/ld: CMakeFiles/Stereo.dir/src/ros_stereo.cc.o: undefined reference to symbol ‘_ZN5boost6system15system_categoryEv’
/usr/lib/x86_64-linux-gnu/libboost_system.so: 无法添加符号: DSO missing from command line
collect2: error: ld returned 1 exit status
CMakeFiles/Stereo.dir/build.make:187: recipe for target ‘…/Stereo’ failed
make[2]: *** […/Stereo] Error 1
CMakeFiles/Makefile2:104: recipe for target ‘CMakeFiles/Stereo.dir/all’ failed
make[1]: *** [CMakeFiles/Stereo.dir/all] Error 2
make[1]: *** 正在等待未完成的任务…
/usr/bin/ld: CMakeFiles/RGBD.dir/src/ros_rgbd.cc.o: undefined reference to symbol ‘_ZN5boost6system15system_categoryEv’
/usr/lib/x86_64-linux-gnu/libboost_system.so: 无法添加符号: DSO missing from command line

在这里插入图片描述

解决方案:修改vim Examples/ROS/ORB_SLAM2/CMakeLists.txt⽂件,将第51⾏的代码修改如下,然后删除build文件夹(执行 rm -r Examples/ROS/ORB_SLAM2/build/ )重新构建即可。

set(LIBS
${
    
    OpenCV_LIBS}
${
    
    EIGEN3_LIBS}
${
    
    Pangolin_LIBRARIES}
${
    
    PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so
${
    
    PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
${
    
    PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
-lboost_system)

本人完成之后打印如下:
在这里插入图片描述
首先我们从 https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets 中下载一个数据,本人下载如下

在这里插入图片描述
下载之后 路径存放 : \color{red}{路径存放:} 路径存放:/my_work/01.ORB-SLAM2源码解析/Datasets/rgbd_dataset_freiburg1_xyz

	# 然后我们需要开启三个终端,每个终端先执行:
	export ROS_PACKAGE_PATH=/my_work/01.ORB-SLAM2源码解析/ORB_SLAM2/Examples/ROS:${
    
    ROS_PACKAGE_PATH}
	# 然后每个终端先执行 cd /my_work/01.ORB-SLAM2源码解析/ORB_SLAM2,然后再执行下面对应的指令
	第一个终端: roscore
	第二个终端: rosrun ORB_SLAM2 Stereo Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml true
	# 需要更改为你数据集的路径
	第三个终端: rosbag play --pause /my_work/01.ORB-SLAM2源码解析/Datasets/MH_01_easy.bag /cam0/image_raw:=/camera/left/image_raw /cam1/image_raw:=/camera/right/image_raw

如果出现如下错误:
Depth Threshold (Close/Far Points): 3.85272
double free or corruption (out)
已放弃 (核心已转储)
在这里插入图片描述
出行以上错误

	第二个终端执行: rosrun ORB_SLAM2 Stereo Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml false

需要注意的是,我们需要等待ORB词典读取完成后,再切换到播放bag的shell并按下空格开始播放,若提前播放,会丢失部分数据。最终显示结果如下:
在这里插入图片描述
在这里插入图片描述

五、结语

通过整篇博客的介绍,我们已经把 ORB-SLAM2 的环境搭建了起来,同时跑通了例子,接下来我们就是去阅读论文以及分析代码了,相关的博客链接可以再该篇博客的开头找到。
 
 
本文内容来自计算机视觉life ORB-SLAM2 课程课件
 
 
 

猜你喜欢

转载自blog.csdn.net/weixin_43013761/article/details/123093639