讲解关于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一键安装_清除各种疑难杂症相关推荐

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

    讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解(02)Cartographer源码无死角解析链接如下: (02)Cartographer源码无死角解析-(00)目录_最 ...

  2. (01)ORB-SLAM2源码无死角解析-(31) ORB特征匹配→词袋BoW:BRIEF描述子转BoW向量

    讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析链接如下(本文内容来自计算机视觉life ORB-SLAM2 课程课件): (0 ...

  3. (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t

    讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析链接如下(本文内容来自计算机视觉life ORB-SLAM2 课程课件): (0 ...

  4. (01)ORB-SLAM2源码无死角解析-(55) 闭环线程→计算Sim3:总体流程讲解ComputeSim3()

    讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析链接如下(本文内容来自计算机视觉life ORB-SLAM2 课程课件): (0 ...

  5. (01)ORB-SLAM2源码无死角解析-(63) BA优化(g2o)→局部建图线程:Optimizer::LocalBundleAdjustment→位姿与地图点优化

    讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析链接如下(本文内容来自计算机视觉life ORB-SLAM2 课程课件): (0 ...

  6. (01)ORB-SLAM2源码无死角解析-(24) 单目SFM地图初始化→CreateInitialMapMonocular()-细节分析:尺度不确定性

    讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析链接如下(本文内容来自计算机视觉life ORB-SLAM2 课程课件): (0 ...

  7. (01)ORB-SLAM2源码无死角解析-(06) 图像金字塔_ORB特征点

    讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析链接如下(本文内容来自计算机视觉life ORB-SLAM2 课程课件): (0 ...

  8. (01)ORB-SLAM2源码无死角解析-(37) EPnP 算法原理详解→理论基础一:控制点选取、透视投影约束

    讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析链接如下: (01)ORB-SLAM2源码无死角解析-(00)目录_最新无死角讲 ...

  9. (01)ORB-SLAM2源码无死角解析-(58) 闭环线程→计算Sim3: 源码Sim3Solver::iterate()讲解

    讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析链接如下(本文内容来自计算机视觉life ORB-SLAM2 课程课件): (0 ...

最新文章

  1. 【Linux入门到精通系列讲解】内存管理malloc和free函数
  2. 编码练习——Java-1-基础
  3. python文本内容怎么转换成字典_怎么把照片上的文字转换成文本?照片转换文字神器来了...
  4. Replication的犄角旮旯(一)--变更订阅端表名的应用场景
  5. 都2020年了,你还认为BI=报表?
  6. 突然出现 -bash: pod: command not found 的解决方法
  7. MySQL服务器的启动与停止
  8. 用canvas画时钟
  9. Android手机投屏后没有声音,安卓手机镜像投屏没有声音解决办法
  10. asp中 打开网页时出现“操作必须使用一个可更新的查询”原因及解决办法
  11. premiere软件的使用(快速入门,迅速了解常用功能、常用快捷键、常用插件)——wsdchong
  12. html实现tab 左右滑动
  13. STM32战舰USB转串口驱动
  14. 经典网页设计:25个精美的全屏背景网站设计作品
  15. 奇异值分解(SVD)
  16. Android添加自定义公共so库
  17. 249PHP等于多少钱,一百万新台币等于多少人民币
  18. 私有网段IP地址的划分
  19. STM32 F446RET6多通道ADC采集
  20. 3D设计软件中怎么创建风扇叶模型?浩辰3D基础教程

热门文章

  1. 四、文件管理(一)文件系统基础
  2. Python 数据分析 数据挖掘 学习路径图
  3. Actix Web SQLx 搭建 Web 后端服务
  4. VBA的CountIf错误:要求对象
  5. 【最新】2022年注册测绘师考试测绘案例分析真题及参考答案
  6. Android性能优化典范 - 第2季
  7. RGB-D Camera深度相机主流方案对比
  8. [数位dp][优先队列] Bzoj 3131 淘金
  9. 绩效面谈的 20 个问题
  10. 三大逻辑推理。逻辑推理的基本规则