Ubuntu16.04下ORB_SLAM3的编译及运行【完整教程】
(PS:由于项目需求,要复现ORB-SLAM3开源算法。在这里记录下本人的实现过程。)
目录
0 ORB_SLAM3简介
来源:【开源方案共享】ORB-SLAM3开源啦!
ORB_SLAM3在2020年7月中旬开源了!这是一个能够使用单目,立体,RGB-D相机,兼容针孔以及鱼眼相机模型进行视觉、视觉+惯导和多地图的SLAM方案。该方案主要有如下三个创新点:
- 实现了基于视觉特征与惯导的紧耦合SLAM系统,该系统完全依赖Maximum-a-Posteriori(MAP)估计,即便在初始化阶段也是如此。这种方案无论在小型或者大型室内室外环境中都能够稳定的运行,并且比以前的方法精确了2-5倍。(朋友们?你听到这个结果兴奋吗?可以养活一大批SLAM工作者和企业)
- 多地图系统的融合。依赖于一种新的位置识别和改进的回环检测,能够保证ORB-SLAM3能够长时间的在特征点不良的环境下有效的运行,并且当它跟丢的时候,就会重新启动一个新的地图,当相机故地重游的时候,系统能够无缝的合并多个地图。
- 与一般的视觉里程计只能利用最后相邻几帧图像数据相比,ORB-SLAM3是第一个能够在算法阶段重用所有历史信息的系统,其中包含了共视帧之间的捆集调整(BA),即使共视帧在时间上相差甚远,甚至来自不同的地图,实验表明,在所有的传感器配置中,ORB-SLAM3与文献中可用的最好的系统一样健壮,并且更精确。值得注意的是,我们的立体惯性SLAM在EuRoC无人机上的平均精度为3.6厘米,在TUM-VI数据集(AR/VR场景的一个典型场景)中,快速手持式移动时的平均精度为9毫米。
1 环境说明
为了方便,本人使用VMware Workstation软件进行虚拟机安装。
本人linux系统版本为:ubuntu 16.04 LTS。对于刚安装的系统,下面所有步骤都要执行,一步步耐心执行就行。
2 各种库的下载安装
2.1 源码下载
见论文作者的Github: https://github.com/UZ-SLAMLab/ORB_SLAM3.
2.2 Pangolin安装
Pangolin主要用于可视化和用户界面。安装详见官方教程:https://github.com/stevenlovegrove/Pangolin,一步步执行便可完成。(笔者未安装标记有Optional Dependencies的可选包)
2.3 opencv安装
opencv主要用于ORB特征点提取。源码要求OpenCV 3.2及以上。
笔者在安装opencv安装时,遇到了ippicv库的大坑,耽误了好长时间。笔者上篇博客介绍了解决方案: ubuntu16.04下opencv3.4.1的安装及测试(含ippicv离线配置过程).
2.4 Eigen 3安装
Eigen 3主要用于矩阵计算。Eigen库的最低版本:3.1.0,安装见官网: http://eigen.tuxfamily.org.
注意:
指令安装默认是安装到了/usr/include/eigen3,ORB-SLAM3检测不到,导致编译会报错。因此要利用源码安装,将安装路径改到/usr/local/include/eigen3/,具体参考链接第二种方案:Ubuntu18.04 两种方式安装eigen3。
2.5 DBoW2 and g2o
DBoW2主要用于回环检测,g2o(General Graph Optimization)主要用于图优化。
ORB-SLAM3的源码包自带DBoW2 and g2o,编译时会自动安装。不用管。
2.6 Python
一般ubuntu系统自带,为了保险,可执行下面的指令。
sudo apt install libpython2.7-dev
2.7 其他环境配置( 若执行3.1报ERROR,请回看这里)
笔者遇到了下面几种错误,先写下来:
(1)虽然安装了Eigen,但编译时仍检测不到Eigen,解决方案见上面的2.4小节;
(2)编译报boost错误。则需安装boost库,本人参考的链接如下:Ubuntu16.04安装boost库;
(3)报openssl的错误:System.cc:26:25: fatal error: openssl/md5.h: No such file or directory。则需安装openssl-devel。执行如下指令:
sudo apt-get install libssl-dev
(4)编译提示:virtual memory exhausted: Cannot allocate memory,表示虚拟内存不足。则需增加Swap虚拟内存。本人参考链接:ubuntu设置swap(交换内存),将虚拟内存设置成了10G。(系统重启后Swap会自动删除)。
3 ORB_SLAM3的编译和安装【重点】
3.1 源码编译
进入源码目录,分别执行下面三条指令。
cd ORB_SLAM3
chmod +x build.sh
./build.sh
效果如下:
到68%左右编译会卡住20分钟不动,界面如下:
这时候另开终端,用指令查看内存:
free -m
会发现编译开始大量使用内存:
最多时候申请使用了14G的内存。
如果内存不够,编译也会报错。这时候需要申请Swap,见上面的2.7(4)。
所有库都安装后,等待20-40分钟,就可编译完成。效果如下:
3.2 数据集测试
按照ORB_SLAM3作者的Github说明,从https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets#downloads 下载一个ASL格式的序列(本人下载的Machine Hall 01数据集,简称MH01),之后双击打开ORB-SLAM3源码中的脚本“euroc_examples.sh“,找到包含MH01的指令:
./Examples/Monocular/mono_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular/EuRoC.yaml "$pathDatasetEuroc"/MH01 ./Examples/Monocular/EuRoC_TimeStamps/MH01.txt dataset-MH01_mono
将"$pathDatasetEuroc"/MH01改成自己数据集的路径,本人为:./Datasets/MH01 ,并去掉指令中的dataset-MH01_mono,最终改成的指令如下:
./Examples/Stereo/stereo_euroc ./Vocabulary/ORBvoc.txt ./Examples/Stereo/EuRoC.yaml ./Datasets/MH01 ./Examples/Stereo/EuRoC_TimeStamps/MH01.txt
在终端执行上述指令,便开始运行ORB-SLAM3了,效果如下:
原创不易。有用请随手点赞+关注,谢谢!
(本人小硕士生一枚,主要研究方向包括:计算机视觉、三维重建、机器人等)
推荐阅读
-
CentOS下编译安装nginx及配置缩略图插件的方法教程
-
win10下sublime texts3添加配置运行php代码编译的图文教程
-
Windows系统下安装VirtualBox及安装Ubuntu16.04的详细教程
-
Ubuntu16.04下ORB_SLAM3的编译及运行【完整教程】
-
CentOS下编译安装nginx及配置缩略图插件的方法教程
-
php以fastCGI的方式运行在iis下,遇到的文件系统权限问题及解决方法,_PHP教程
-
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)_PHP教程
-
win10下sublime texts3添加配置运行php代码编译的图文教程
-
php以fastCGI的方式运行在iis下,遇到的文件系统权限问题及解决方法,_PHP教程
-
Windows系统下安装VirtualBox及安装Ubuntu16.04的详细教程