本文是ORB-SLAM3深度系列的第二篇内容,我们将聚焦ORB-SLAM3的整体算法代码流程梳理及论文重点翻译和解读。
目录
01 ORB-SLAM3系统优势
ORB-SLAM3是第一个对短期、中期、长期数据关联的视觉、视觉惯性系统。和其他具有代表性的视觉和视觉惯性系统相比,ORB-SLAM3系统都优势明显。
具体表现在四个方面:
1)它是一个单目和双目视觉惯导SLAM系统,完全依赖于最大后验估计(MAP)。在小型和大型、室内和室外环境中实时稳定运行,比其他方法准确2-10倍。
2)召回场景识别采用先检查候选关键帧的几何一致性,然后检查与三个共视关键帧的局部一致性策略。以略高的计算成本为代价,增加了召回率并增加了数据关联,提高了地图准确性。
3)使用Atlas表示一组断开的地图集,并将所有的地图平滑地应用于位置识别、相机重新定位、回环检测和地图无缝拼合。
4)抽象的相机表示,使SLAM代码与所用的相机模型无关,并允许通过提供它们的投影、非投影和雅可比函数来添加新模型。
02 ORB-SLAM3系统概述
ORB-SLAM3系统基于ORB-SLAM2和ORB-SLAM-VI建立,主要组成如下:

Atlas
由一些不连续的地图组成的集合表示,分为活跃地图和非活跃地图。其中,跟踪线程在活跃地图定位传入帧,并通过局部建图线程随着新的关键帧不断优化和增长。Atlas构建了一个基于关键帧的唯一DBoW2数据库,用于重定位、回环检测以及地图合并。
跟踪线程
处理传感器信息并实时计算当前帧相对于活跃地图的位姿,使匹配地图特征的重投影误差最小化。在视觉惯性模式下,通过在优化过程中引入惯性残差来估计本体速度和IMU偏置。
跟踪丢失后,跟踪线程会尝试在Atlas地图中重定位当前帧。如果重定位成功,将恢复跟踪并在需要时切换为活跃地图。否则一段时间后,活跃地图被存储为非活跃地图,新的活跃地图需从头进行初始化。
局部建图线程
在靠近当前帧的关键帧局部窗口中,添加关键帧及特征点到活跃地图中,并移除冗余关键帧与地图点,使用视觉或者视觉惯导BA来优化地图。而在惯性情况下,建图线程中的IMU参数通过最大后验估计技术来初始化和优化。
回环和地图合并线程
用关键帧速率检测活跃地图和整个Atlas之间的公共区域。公共区域如果属于活跃地图,就执行回环纠正;如果属于不同地图,两个地图就被无缝合并成一张地图,这个地图就成了活跃地图。回环纠正后,在不影响实时性能的情况下,独立线程会启动一个完全的BA来进一步优化地图。
03 视觉-惯导SLAM
ORB SLAM3建立在ORB-SLAM-VI的基础上,并提供一种快速准确的IMU初始化技术和开源SLAM库,支持使用针孔和鱼眼相机进行单目惯性和立体惯性SLAM。
基本原理
纯视觉SLAM只估计当前相机位姿,而视觉-惯导SLAM还会估计其他变量,包括世界坐标系下的本体位姿、速度
,陀螺仪和加速度计偏置
以及
,状态变量表示为:
对于视觉-惯性SLAM,在连续两帧i和i+1之间进行IMU预积分。获得的预积分旋转、速度以及位置测量分别用,
,
表示,整个测量向量的协方差矩阵表示为
。给出这些预积分项以及状态
和
,我们采用惯导残差
的定义: