1、整体框架
首先,将这一系统的整体架构进行分解。它由四个核心模块构成,每个模块承担不同层面的任务,相互协作才能完成从传感器数据到稳定地图的全流程处理。
1.1 Tracking 模块
该模块负责处理传感器信息,实时计算当前帧在激活地图中的位姿。同时,它还需要判断当前帧是否具备成为关键帧的条件。在视觉-惯性模式下,优化过程中会引入惯性残差,从而估计刚体速度与IMU偏置。一旦追踪丢失,tracking线程会尝试在Atlas地图中重定位当前帧。若重定位成功,则恢复追踪,并在必要时切换激活地图;若经过一段时间仍失败,当前激活地图将被存储为未激活地图,随后重新初始化一个新的激活地图。

1.2 Local mapping 模块
该模块负责向当前激活地图中添加关键帧和地图点,同时剔除冗余帧。它会操作当前帧附近的那些关键帧,利用视觉BA或视觉-惯性BA技术来优化整个地图。在惯性模式下,mapping线程还会采用最大后验估计(MAP)技术来初始化并优化IMU参数。
1.3 Loop and map merging 模块
每当加入一个新的关键帧,此线程就会在激活地图和整个Atlas地图中检测公共区域。如果公共区域属于激活地图,则执行回环校正;如果属于其他地图,则将其融合为一个地图,并把这个融合后的地图设为新的激活地图。回环校正完成后,一个独立线程会进行全局BA,进一步优化地图,同时不影响实时性能。
1.4 Atlas 模块
Atlas是一个由一系列离散地图组成的多子图系统。它维护一个激活地图,供tracking线程定位当前帧,而local mapping线程则持续用新的关键帧信息优化并更新这个地图。Atlas中的其他地图被称为未激活地图。该系统基于词袋模型建立关键帧信息数据库,用于重定位、闭环检测和地图融合。
2、IMU 和 Camera 数据融合获取位姿数据的过程
先说明一个基本矛盾:IMU虽然能测量角速度和加速度,但存在明显的漂移,积分两次得到的位姿数据非常不可靠。然而,在短时间内的快速运动中,IMU反而能提供较好的估计——这恰恰是相机的软肋。运动过快时,相机容易出现运动模糊,或者两帧之间重叠区域过少导致无法特征匹配,因此纯视觉SLAM特别害怕快速运动。有了IMU,即便在相机数据无效的那段时间,我们也能保持一个较好的位姿估计,这是纯视觉SLAM无法做到的。
反过来,相机数据基本没有漂移,可以有效估计并修正IMU读数中的漂移,使慢速运动之后的位姿估计依然可靠。另外,当图像发生变化时,本质上我们无法区分是相机自身运动还是外界条件变化,所以纯视觉SLAM很难处理动态障碍物。而IMU能感知自身的运动信息,从某种程度上减轻了动态物体的干扰。整个融合流程大致如下:
- 利用相机和IMU分别采集图像和惯性数据,IMU的采集频率高于相机;
- 提取每一帧图像的特征点,然后提取描述子(ORB-SLAM采用的方式),匹配特征点;也可以改用光流追踪的方法;
- 对IMU得到的多组数据进行预积分,计算出两帧图像之间的IMU位置和速度;
- IMU初始化(这里以ORB-SLAM3采用的方法为例),目的是获取IMU参数的较好初始值:速度、重力以及Bias。具体分三步:
Vision-Only:采用ORB-SLAM经典框架的纯视觉初始化流程,以关键帧速率4Hz持续运行2秒,得到按比例缩放的地图(包含10个关键帧和上百个地图点),然后通过Visual-Only BA进行优化。
Inertial-Only:目标是获得IMU参数的最优估计。利用前述单目视觉SLAM初始化后稳定运行的数据,以及这些关键帧之间的IMU测量,包括尺度因子、重力方向、IMU传感器偏置参数、关键帧的无尺度速度。把这些IMU测量放在一起构成状态向量,构建优化问题求解。一旦惯性优化完成,帧的姿态、速度以及3D地图点就会以估计的尺度进行缩放,同时旋转使z轴与估计的重力方向对齐。
Visual-Inertial:当视觉和IMU都有了较好的初始估计后,进行联合优化,进一步精化这些参数。
- 结合惯性残差和视觉残差,视觉-惯性SLAM可以看作基于关键帧的最小化问题。后期根据下式进行计算优化。

在tracking过程中,只优化最后两帧的位姿,同时保持地图点固定。而在mapping过程中,要解决全图优化问题——如果图规模较大就会比较棘手。ORB-SLAM3采用了滑动窗口思想,把关键帧及其地图点的滑动窗口作为优化变量。
3、ORB-SLAM3 基于特征点的 tracking 模块的优缺点,以及改善方向
首先看视觉前端:ORB-SLAM3采用特征点提取加描述子匹配的方式。因为有描述子,地图维护非常方便,包括重定位、闭环、全局优化。尤其适用于室内环境,当视觉上共视关系较多时,这种方法能显著提升定位精度和局部稳定性。
但缺点也很明显:每帧图像都要提取特征点并计算描述子,相当耗时。在tracking过程中,如果运动过快(图像模糊),很容易tracking loss。此外,纯视觉ORB-SLAM3严重依赖特征点的提取与匹配效果,在纹理缺失的环境下,无法获得足够稳定的匹配点对,此时光束平差法缺乏足够的输入信息,无法有效修正位姿偏差。
针对这点,业内也有其他主流方案,例如特征点提取配合光流跟踪。这种方式在tracking上更鲁棒,但不容易构建全局地图,在闭环和重定位阶段还需要额外提取特征点和描述子。值得一提的是,visual-inertial版本的ORB-SLAM3通过引入IMU来约束和修正特征缺失带来的偏差,同时获得尺度信息,在一定程度上缓解了对特征点的过度依赖。
再说说Atlas系统。在tracking过程中如果跟丢了,可以利用当前帧查询Atlas DBoW数据库。这个查询可以利用所有先验信息,在所有地图中寻找相似的关键帧。一旦找到候选关键帧,就可以基于地图和匹配的地图点进行重定位,这极大提升了性能和鲁棒性。
值得关注的是,ORB-SLAM3此次更新的一大变化就是引入了Atlas地图,相当于开辟了一条新的方向。当前只是第一个版本,这方面的改进空间还很大,值得深入研究。另外,IMU和camera有很多互补优势,如何让两者更好地结合、发挥更好的效果,也是一个很有价值的研究方向。IMU初始化本身也有不少局限,采用更优的方法进行IMU初始化,同样是可以改进的点。
