(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
文末正下方中心提供了本人联系方式,点击本人照片即可显示WX→官方认证{\color{blue}{文末正下方中心}提供了本人 \color{red} 联系方式,\color{blue}点击本人照片即可显示WX→官方认证}文末正下方中心提供了本人联系方式,点击本人照片即可显示WX→官方认证
请注意本人使用环境为 Ubuntu18.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 gitgit clone https://github.com/stevenlovegrove/Pangolin.gitcd Pangolingit checkout v0.5# 依奈安装sudo apt-get updatesudo apt install libgl1-mesa-devsudo apt install libglew-devsudo apt install cmakesudo apt install libpython2.7-devsudo apt install pkg-configsudo apt install libegl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocolssudo apt install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev libavdevice-devsudo apt install libdc1394-22-dev libraw1394-devsudo apt install libjpeg-dev libpng-dev libtiff5-dev libopenexr-dev# 特殊依奈(原本是后续需要安装的)sudo apt-get install libeigen3-dev # 编译安装mkdir build cd buildcmake ..sudo make -j18 # runs 18 jobs in parallelsudo 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.gitgit clone https://github.com/opencv/opencv_contrib.git# 切换为 3.4.6 版本cd opencv_contribgit checkout 3.4.6cd ../opencvgit checkout 3.4.6#依奈安装sudo apt-get install build-essentialsudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-devsudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev# 代码编译mkdir buildcd buildsudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..sudo make -j18 # runs 18 jobs in parallelsudo make install
运行完成之后本人打印如下:
sudo 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-pippip3 install rosdepcrosdepc initrosdepc 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_SLAM2cd ORB_SLAM2chmod +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 课程课件
(01)ORB-SLAM2源码无死角解析-(01) 环境搭建,demo运行,ROS一键安装_清除各种疑难杂症相关推荐
- (02)Cartographer源码无死角解析-(01) 环境搭建,demo运行,ROS一键安装_清除各种疑难杂症
讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解(02)Cartographer源码无死角解析链接如下: (02)Cartographer源码无死角解析-(00)目录_最 ...
- (01)ORB-SLAM2源码无死角解析-(31) ORB特征匹配→词袋BoW:BRIEF描述子转BoW向量
讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析链接如下(本文内容来自计算机视觉life ORB-SLAM2 课程课件): (0 ...
- (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析链接如下(本文内容来自计算机视觉life ORB-SLAM2 课程课件): (0 ...
- (01)ORB-SLAM2源码无死角解析-(55) 闭环线程→计算Sim3:总体流程讲解ComputeSim3()
讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析链接如下(本文内容来自计算机视觉life ORB-SLAM2 课程课件): (0 ...
- (01)ORB-SLAM2源码无死角解析-(63) BA优化(g2o)→局部建图线程:Optimizer::LocalBundleAdjustment→位姿与地图点优化
讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析链接如下(本文内容来自计算机视觉life ORB-SLAM2 课程课件): (0 ...
- (01)ORB-SLAM2源码无死角解析-(24) 单目SFM地图初始化→CreateInitialMapMonocular()-细节分析:尺度不确定性
讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析链接如下(本文内容来自计算机视觉life ORB-SLAM2 课程课件): (0 ...
- (01)ORB-SLAM2源码无死角解析-(06) 图像金字塔_ORB特征点
讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析链接如下(本文内容来自计算机视觉life ORB-SLAM2 课程课件): (0 ...
- (01)ORB-SLAM2源码无死角解析-(37) EPnP 算法原理详解→理论基础一:控制点选取、透视投影约束
讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析链接如下: (01)ORB-SLAM2源码无死角解析-(00)目录_最新无死角讲 ...
- (01)ORB-SLAM2源码无死角解析-(58) 闭环线程→计算Sim3: 源码Sim3Solver::iterate()讲解
讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析链接如下(本文内容来自计算机视觉life ORB-SLAM2 课程课件): (0 ...
最新文章
- 【Linux入门到精通系列讲解】内存管理malloc和free函数
- 编码练习——Java-1-基础
- python文本内容怎么转换成字典_怎么把照片上的文字转换成文本?照片转换文字神器来了...
- Replication的犄角旮旯(一)--变更订阅端表名的应用场景
- 都2020年了,你还认为BI=报表?
- 突然出现 -bash: pod: command not found 的解决方法
- MySQL服务器的启动与停止
- 用canvas画时钟
- Android手机投屏后没有声音,安卓手机镜像投屏没有声音解决办法
- asp中 打开网页时出现“操作必须使用一个可更新的查询”原因及解决办法
- premiere软件的使用(快速入门,迅速了解常用功能、常用快捷键、常用插件)——wsdchong
- html实现tab 左右滑动
- STM32战舰USB转串口驱动
- 经典网页设计:25个精美的全屏背景网站设计作品
- 奇异值分解(SVD)
- Android添加自定义公共so库
- 249PHP等于多少钱,一百万新台币等于多少人民币
- 私有网段IP地址的划分
- STM32 F446RET6多通道ADC采集
- 3D设计软件中怎么创建风扇叶模型?浩辰3D基础教程