(PS:由于项目需求,要复现ORB-SLAM3开源算法。在这里记录下本人的实现过程。)
来源:【开源方案共享】ORB-SLAM3开源啦!
ORB_SLAM3在2020年7月中旬开源了!这是一个能够使用单目,立体,RGB-D相机,兼容针孔以及鱼眼相机模型进行视觉、视觉+惯导和多地图的SLAM方案。该方案主要有如下三个创新点:
为了方便,本人使用VMware Workstation软件进行虚拟机安装。
本人linux系统版本为:ubuntu 16.04 LTS。对于刚安装的系统,下面所有步骤都要执行,一步步耐心执行就行。
见论文作者的Github: https://github.com/UZ-SLAMLab/ORB_SLAM3.
Pangolin主要用于可视化和用户界面。安装详见官方教程:https://github.com/stevenlovegrove/Pangolin,一步步执行便可完成。(笔者未安装标记有Optional Dependencies的可选包)
opencv主要用于ORB特征点提取。源码要求OpenCV 3.2及以上。
笔者在安装opencv安装时,遇到了ippicv库的大坑,耽误了好长时间。笔者上篇博客介绍了解决方案: ubuntu16.04下opencv3.4.1的安装及测试(含ippicv离线配置过程).
Eigen 3主要用于矩阵计算。Eigen库的最低版本:3.1.0,安装见官网: http://eigen.tuxfamily.org.
注意:
指令安装默认是安装到了/usr/include/eigen3,ORB-SLAM3检测不到,导致编译会报错。因此要利用源码安装,将安装路径改到/usr/local/include/eigen3/,具体参考链接第二种方案:Ubuntu18.04 两种方式安装eigen3。
DBoW2主要用于回环检测,g2o(General Graph Optimization)主要用于图优化。
ORB-SLAM3的源码包自带DBoW2 and g2o,编译时会自动安装。不用管。
一般ubuntu系统自带,为了保险,可执行下面的指令。
sudo apt install libpython2.7-dev
笔者遇到了下面几种错误,先写下来:
(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会自动删除)。
进入源码目录,分别执行下面三条指令。
cd ORB_SLAM3
chmod +x build.sh
./build.sh
效果如下:
到68%左右编译会卡住20分钟不动,界面如下:
这时候另开终端,用指令查看内存:
free -m
会发现编译开始大量使用内存:
最多时候申请使用了14G的内存。
如果内存不够,编译也会报错。这时候需要申请Swap,步骤见上面的2.7(4)。
所有库都安装后,等待20-40分钟,便可编译完成。效果如下:
按照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了,效果如下:
原创不易。有用请随手点赞+关注,谢谢!
(本人小硕士生一枚,主要研究方向包括:计算机视觉、三维重建、机器人等)