前面我们提到,ORB-SLAM3作为常用的机器人建图与定位技术,是当前最优秀的基于特征点的视觉SLAM系统之一。
它支持单目、双目、单目惯导、双目惯导、RGB-D等多种相机模式,兼具精度和鲁棒性,是机器人SLAM算法工程师的一项「必备技能」。
为了更好地帮助大家学习和理解ORB-SLAM3,小智计划进行一系列理论与实践相结合的深度技术分享。而这些,都是我们在实践过程中总结出来的宝贵经验。
具体内容包括:
1. ORB-SLAM3论文导读与整体算法流程梳理
2. ORB-SLAM3中的跟踪线程
2.1特征点提取、匹配,以及地图初始化
2.2 IMU预积分原理及代码梳理
2.3跟踪模式详解:参考关键帧跟踪、恒速模型跟踪、重定位跟踪、局部地图跟踪
3. ORB-SLAM3中的局部建图线程
3.1 IMU的初始化
3.2 局部建图线程代码梳理
4. ORB-SLAM3中的闭环检测及多地图融合线程
4.1闭环检测代码梳理
4.2多地图概念及地图融合代码梳理
本期则是这系列课程的「开胃前菜」——ORB-SLAM3的编译运行。
我们结合实践经验,对ORB-SLAM3安装和编译的常见问题进行总结分享,同时细化不同传感器的运行方式。可以说,这是一份非常适合「新手小白」的ORB-SLAM3编译运行指南。
第一步,下载代码:
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3
或者
git clone https://github.com/electech6/ORB_SLAM3_detailed_comments
第二步,按照代码中的README.md,进行环境安装和编译即可,具体就不赘述了。
不过我掐指一算,大家在编译过程中,可能会遇到几个小问题:
1)提示找不到GLEW;
解决方法:sudo apt install libglew-dev;
2)当执行./euroc_examples.sh时,出现找不到libpango_image.so这个库的情况;
解决方法:首先,在系统中查找文件sudo find / -name libpango_image.so;结果为:/usr/local/lib/libpango_image.so
然后,将.so文件路径的目录添加到/etc/ld.so.conf:
sudo gedit/etc/ld.so.conf,同时在文件的末尾添加一行:/usr/local/lib/libpango_image.so,执行sudo /sbin/ldconfig生效。
最后,在编译build_ros.sh之前,需要执行gedit ~/.bashrc,在文件末尾添加如下:
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM3/Examples/ROS
不同传感器下,ORB-SLAM3的运行方式存在着差异。在这里,我们分为非ROS和ROS两种环境来进行讨论。
1)EuROC数据集
用微型飞行器采集的视觉惯性数据集,包含双目相机和IMU同步测量数据及位姿的真值。
这里需下载MH_01_easy.zip;下载地址:https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets
将其解压后并命名为MH01;之后根据自己的地址${dir}来运行。
纯单目
./Monocular/mono_euroc ../Vocabulary/ORBvoc.txt ./Monocular/EuRoC.yaml ${dir}/MH01 ./Monocular/EuRoC_TimeStamps/MH01.txt dataset-MH01_mono
纯双目
./Examples/Stereo/stereo_euroc ./Vocabulary/ORBvoc.txt ./Examples/Stereo/EuRoC.yaml ${dir}/MH01 ./Examples/Stereo/EuRoC_TimeStamps/MH01.txt dataset-MH01_stereo
单目惯导
./Examples/Monocular-Inertial/mono_inertial_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular-Inertial/EuRoC.yaml ${dir}/MH01 ./Examples/Monocular-Inertial/EuRoC_TimeStamps/MH01.txt dataset-MH01_monoi
双目惯导
./Examples/Stereo-Inertial/stereo_inertial_euroc ./Vocabulary/ORBvoc.txt ./Examples/Stereo-Inertial/EuRoC.yaml ${dir}/MH01 ./Examples/Stereo-Inertial/EuRoC_TimeStamps/MH01.txt dataset-MH01_stereoi
2)TUM VI 数据集
其采用的相机和IMU传感器,在硬件上进行了时间同步。
所提供的图像具有高动态范围,事先进行了光度标定,用20Hz的帧率采集,分辨率为1024像素*1024像素;三轴IMU采样频率为200Hz,可测量加速度和角速度。
需要下载数据集dataset-room1_512_16,下载地址:https://cvg.cit.tum.de/data/datasets/rgbd-dataset/download
纯单目
./Monocular/mono_tum_vi ../Vocabulary/ORBvoc.txt Monocular/TUM_512.yaml ${dir}/dataset-room1_512_16/mav0/cam0/data Monocular/TUM_TimeStamps/dataset-room1_512.txt dataset-room1_512_mono
纯双目
./Stereo/stereo_tum_vi ../Vocabulary/ORBvoc.txt Stereo/TUM_512.yaml ${dir}/dataset-room1_512_16/mav0/cam0/data /home/sangfor/2023/bro_ws/dataset-room1_512_16/mav0/cam1/data Stereo/TUM_TimeStamps/dataset-room1_512.txt dataset-room1_512_stereo
单目惯导
./Monocular-Inertial/mono_inertial_tum_vi ../Vocabulary/ORBvoc.txt Monocular-Inertial/TUM_512.yaml ${dir}/dataset-room1_512_16/mav0/cam0/data Monocular-Inertial/TUM_TimeStamps/dataset-room1_512.txt Monocular-Inertial/TUM_IMU/dataset-room1_512.txt dataset-room1_512_monoi
双目惯导
./Stereo-Inertial/stereo_inertial_tum_vi ../Vocabulary/ORBvoc.txt Stereo-Inertial/TUM_512.yaml ${dir}/dataset-room1_512_16/mav0/cam0/data ${dir}/dataset-room1_512_16/mav0/cam1/data Stereo-Inertial/TUM_TimeStamps/dataset-room1_512.txt Stereo-Inertial/TUM_IMU/dataset-room1_512.txt dataset-room1_512_stereoi
RGB-D
这里下载数据集:rgbd_dataset_freiburg1_desk,下载地址:https://cvg.cit.tum.de/data/datasets/rgbd-dataset/download
然后下载associate.py,下载地址:https://cvg.cit.tum.de/data/datasets/rgbd-dataset/tools
目的是从rgb.txt 文件和 depth.txt 文件中读取时间戳,并通过查找最佳匹配来连接它们。
之后开始运行:
./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml ${dir}/rgbd_dataset_freiburg1_desk /home/sangfor/2023/bro_ws/rgbd_dataset_freiburg1_desk/associations.txt
纯单目
rosrun ORB_SLAM3 Mono Vocabulary/ORBvoc.txt Examples/Monocular/EuRoC.yaml
rosbag play MH_01_easy.bag /cam0/image_raw:=/camera/image_raw
纯双目
rosrun ORB_SLAM3 Stereo Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml false
rosbag play MH_01_easy.bag /cam0/image_raw:=/camera/left/image_raw /cam1/image_raw:=/camera/right/image_raw
单目惯导
rosrun ORB_SLAM3 Mono_Inertial Vocabulary/ORBvoc.txt Examples/Monocular-Inertial/EuRoC.yaml
rosbag play MH_01_easy.bag
双目惯导
rosrun ORB_SLAM3 Stereo_Inertial Vocabulary/ORBvoc.txt Examples/Stereo-Inertial/EuRoC.yaml false
rosbag play MH_01_easy.bag /cam0/image_raw:=/camera/left/image_raw /cam1/image_raw:=/camera/right/image_raw /imu0:=/imu
RGB-D
下载数据集:rgbd_dataset_freiburg1_xyz.bag,fr1/xyz选择more info找到bag文件后,然后下载。下载地址:
https://cvg.cit.tum.de/data/datasets/rgbd-dataset/download#freiburg1_xyz
之后运行:
rosrun ORB_SLAM3 RGBD Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml
rosbag play rgbd_dataset_freiburg1_xyz.bag
至于KITTI数据集,我们留给感兴趣的同学自行下载探索。下载地址:https://www.cvlibs.net/datasets/kitti/eval_object.php