ORB-SLAM3 的主要框架如图所示,算法主要包括跟踪、建图以及回环检测与融合3大线程。
ORB-SLAM3 除了支持单目、双目和 RGB-D 相机外,还可用于鱼眼相机,且增加了视觉 + IMU(惯性测量单元)的系统(VIO)。
跟踪线程
- 输入
- 相机图片:作为视觉信息的输入源。
- IMU(惯性测量单元):提供惯性测量数据。(如加速度和角速度的测量数据)
- 特征提取:从相机图片中提取特征,这是后续处理的基础。
- 位姿估计:结合特征和 IMU 数据进行位姿估计,估计相机的当前位置和姿态。
- 跟踪:利用位姿估计结果在局部地图中进行跟踪。
- 生成关键帧:根据跟踪结果决定是否生成关键帧,关键帧是地图构建的重要组成部分。
在这里仔细讲一下关键帧,在视觉 SLAM 系统(如 ORB - SLAM3)中,关键帧的生成通常与跟踪质量相关。当相机的位姿跟踪出现一定程度的不确定性或者误差增大时,系统可能会选择当前帧作为关键帧。或者当相机移动到一个新的场景区域,场景内容发生显著变化时,系统会生成关键帧。例如,从室内走到室外,或者从一个房间进入另一个房间,这种场景的切换会导致图像中的特征点分布发生较大改变,此时生成关键帧有助于准确地构建不同场景下的地图。
关键帧的作用:
1.地图构建
关键帧是地图构建的重要基础。在地图构建过程中,系统通过对关键帧中的特征点进行三角测量等方法来计算三维地图点的位置。例如,在双目或多目视觉系统中,利用不同关键帧之间的视差,可以恢复出地图点的三维坐标,并将这些地图点添加到地图中,逐步构建出完整的环境地图。
2.定位与跟踪
关键帧用于辅助相机的定位和跟踪。在跟踪线程中,当前帧会与已有的关键帧进行特征匹配,通过匹配结果来估计相机的位姿。由于关键帧包含了丰富的场景信息和稳定的特征点,利用关键帧进行匹配可以提高位姿估计的准确性和稳定性。例如,在实时定位过程中,通过找到当前帧与关键帧之间的匹配特征点,可以快速确定相机的位置和姿态。
3.回环检测
在回环检测与地图融合过程中,关键帧起到关键作用。当相机回到之前经过的位置(即出现回环)时,系统通过比较当前关键帧与之前的关键帧来检测回环。例如,通过计算关键帧之间的相似性度量(如基于特征描述符的距离),可以判断是否出现回环,进而对地图进行优化和融合,消除累积误差。
4.优化与维护地图
关键帧用于地图的优化和维护。系统会对关键帧及其相关的地图点进行局部或全局的优化操作,如光束法平差(BA)。通过优化关键帧的位姿和地图点的位置,可以提高地图的精度和一致性。同时,在地图维护过程中,根据关键帧的质量和重要性,对关键帧和地图点进行筛选和更新,保证地图的准确性和紧凑性。
局部建图
- 地图集
- 活跃地图:管理当前活跃的地图数据。
- 地图点:记录地图中的关键点。
- 关键帧:关键帧在局部地图中起到重要作用。
- 插入关键帧:将新生成的关键帧插入到地图集中。
- 生成新地图点:在局部地图中生成新的地图点,丰富地图数据。
- 局部 BA(光束法平差)优化:对局部地图进行光束法平差优化,提高地图的精度。
- IMU 初始化:对 IMU 进行初始化操作,确保 IMU 数据的准确性。
- IMU 测量:进行 IMU 测量,为后续处理提供数据。
回环检测与地图融合
- 回环检测:检测是否存在回环,即相机是否回到了之前经过的位置。
- 计算 sim3:计算相似变换(sim3),用于地图融合。
- 检测候选帧:检测可能的回环候选帧。
- 剔除关键帧:根据检测结果剔除不必要的关键帧。
更新地图
- 全局 BA(光束法平差):对整个地图进行光束法平差优化,进一步提高地图精度。
- 最小化生成树:通过最小化生成树来优化地图结构。
- 局部 BA:再次进行局部光束法平差优化。
- 地图融合:将不同部分的地图进行融合,形成完整的地图。
整个 ORB - SLAM3 流程通过跟踪线程不断获取相机和 IMU 数据,进行特征提取和位姿估计,在局部建图模块中构建和优化地图,通过回环检测与地图融合模块检测和处理回环,最后在更新地图模块中对整个地图进行优化和融合,形成一个完整的、高精度的地图。这种流程设计使得 ORB - SLAM3 能够在复杂环境中实现高精度的定位和建图。