一、ORB-SLAM3简介
ORB-SLAM3 (Oriented FAST and Rotated BRIEF SLAM 3) 是一种视觉SLAM(Simultaneous Localization and Mapping,同时定位与地图构建)系统,用于机器人和计算机视觉领域。它是ORB-SLAM系列的第三个版本,ORB-SLAM3基于单目、双目和RGB-D摄像头,能够在不同的环境中进行实时的相机定位和稠密地图构建。
ORB-SLAM3的主要特点包括:
- 多传感器支持:支持单目、双目和RGB-D相机,这使得系统在不同的应用场景中具有更大的灵活性。
- 多线程架构:采用多线程架构,以提高系统的实时性和计算效率。
- 关键帧管理:通过关键帧管理系统来维护地图和优化轨迹,确保系统的鲁棒性和准确性。
- 回环检测与闭环优化:包括回环检测(Loop Closure)和全局闭环优化(Global Bundle Adjustment),以减少累计误差并提高定位精度。
- 稠密地图构建:能够构建稠密点云地图,提供更详细的环境表示。
ORB-SLAM3被广泛应用于机器人导航、增强现实(AR)、无人驾驶汽车等领域,因其精度高、鲁棒性强、实时性能好而受到学术界和工业界的高度关注。
二、ORB-SLAM3源码分析
ORB-SLAM3源码包含多个模块,内容比较多,此处为了方便了解其原理,选择源码中给出的案例库中的Stereo案例进行介绍。ORB-SLAM3官方GitHub地址:https://github.com/UZ-SLAMLab/ORB_SLAM3/tree/master
该案例演示了如何使用立体摄像头设置进行实时同步定位和映射。它展示了系统准确跟踪摄像头位置和构建环境 3D 地图的能力。
1.文件分析
源文件主要包含以下:
(1) YAML文件
(2)源代码文件 (.cc)
(3)时间戳文件 (.txt)
其中各种文件的作用如下:
(1)配置文件(YAML)
这些文件配置了不同数据集的参数,包括相机内参、外参和其他必要的SLAM参数:
EuRoC.yaml
KITTI00-02.yaml
KITTI03.yaml
KITTI04-12.yaml
RealSense_D435i.yaml
RealSense_T265.yaml
TUM-VI.yaml
(2)源代码文件
这些是不同数据集的主程序,展示了如何运行Stereo SLAM算法:
stereo_euroc.cc
stereo_kitti.cc
stereo_realsense_D435i.cc
stereo_realsense_t265.cc
stereo_tum_vi.cc
(3)时间戳文件
这些文件包含了不同数据集的时间戳信息,用于同步图像帧:
EuRoC_TimeStamps/ 目录下的时间戳文件
TUM_TimeStamps/目录
2.实现原理
案例实现主要分为以下几个步骤:
(1)初始化
(2)数据读取
(3)特征提取
(4)特征匹配(在左右图像之间匹配ORB特征,计算视差图以获得深度信息)
(5)位姿估计
(6)地图构建
(7)回环检测与闭环优化(检测并处理回环,以减少累计误差并优化地图)
各个主程序文件的作用:
EuRoC 数据集:使用stereo_euroc.cc文件EuRoC.yaml配置文件和相应的时间戳文件进行SLAM操作。
KITTI 数据集:使用stereo_kitti.cc文件,加载KITTI00-02.yaml、KITTI03.yaml或KITTI04-12.yaml配置。
RealSense 数据集:stereo_realsense_D435i.cc或stereo_realsense_t265.cc文件RealSense_D435i.yaml或RealSense_T265.yaml配置。
TUM-VI 数据集:stereo_tum_vi.cc文件TUM-VI.yaml配置文件和相应的时间戳文件进行SLAM操作。
运行不同的主程序文件,加载相应的配置和时间戳文件后,程序会执行如下操作:
(1)读取并同步左右图像。
(2)提取和匹配特征点。
(3)估计相机位姿并构建三维地图。
(4)进行回环检测和闭环优化(如有回环)。