Ubuntu16.04下ORB_SLAM3的编译及运行【完整教程】

(PS:由于项目需求,要复现ORB-SLAM3开源算法。在这里记录下本人的实现过程。)

目录

  • 0 ORB_SLAM3简介
  • 1 环境说明
  • 2 各种库的下载安装
    • 2.1 源码下载
    • 2.2 Pangolin安装
    • 2.3 opencv安装
    • 2.4 Eigen 3安装
    • 2.5 DBoW2 and g2o
    • 2.6 Python
    • 2.7 其他环境配置( 若执行3.1报ERROR,请回看这里)
  • 3 ORB_SLAM3的编译和安装【重点】
    • 3.1 源码编译
    • 3.2 数据集测试

0 ORB_SLAM3简介

来源:【开源方案共享】ORB-SLAM3开源啦!
ORB_SLAM3在2020年7月中旬开源了!这是一个能够使用单目,立体,RGB-D相机,兼容针孔以及鱼眼相机模型进行视觉、视觉+惯导和多地图的SLAM方案。该方案主要有如下三个创新点:

  1. 实现了基于视觉特征与惯导的紧耦合SLAM系统,该系统完全依赖Maximum-a-Posteriori(MAP)估计,即便在初始化阶段也是如此。这种方案无论在小型或者大型室内室外环境中都能够稳定的运行,并且比以前的方法精确了2-5倍。(朋友们?你听到这个结果兴奋吗?可以养活一大批SLAM工作者和企业)
  2. 多地图系统的融合。依赖于一种新的位置识别和改进的回环检测,能够保证ORB-SLAM3能够长时间的在特征点不良的环境下有效的运行,并且当它跟丢的时候,就会重新启动一个新的地图,当相机故地重游的时候,系统能够无缝的合并多个地图。
  3. 与一般的视觉里程计只能利用最后相邻几帧图像数据相比,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

效果如下:
Ubuntu16.04下ORB_SLAM3的编译及运行【完整教程】_第1张图片
到68%左右编译会卡住20分钟不动,界面如下:
Ubuntu16.04下ORB_SLAM3的编译及运行【完整教程】_第2张图片
这时候另开终端,用指令查看内存:

free -m

会发现编译开始大量使用内存:
在这里插入图片描述
最多时候申请使用了14G的内存。
在这里插入图片描述
如果内存不够,编译也会报错。这时候需要申请Swap,步骤见上面的2.7(4)。

所有库都安装后,等待20-40分钟,便可编译完成。效果如下:
Ubuntu16.04下ORB_SLAM3的编译及运行【完整教程】_第3张图片

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了,效果如下:
Ubuntu16.04下ORB_SLAM3的编译及运行【完整教程】_第4张图片

原创不易。有用请随手点赞+关注,谢谢!
(本人小硕士生一枚,主要研究方向包括:计算机视觉、三维重建、机器人等)

你可能感兴趣的:(C++,linux,可视化,slam)