TrackReferenceKeyFrame

一、核心目标

当相机捕获到新的普通帧(位姿未知)时,利用一个已知的、位姿相对准确的参考关键帧 (Reference KeyFrame) 来估计当前普通帧的精确位姿。

二、应用场景

参考关键帧跟踪主要在以下两种情况下被调用:

  1. 系统刚初始化后:
    • 场景描述: SLAM 系统通过初始几帧(如第1、2帧)完成地图初始化,并将它们设为关键帧。当后续帧(如第3帧)进入时,系统尚无稳定的运动模型(例如,恒速模型中的速度为空)。
    • 为何使用: 此时,最可靠的方式是直接将新帧与已初始化的关键帧进行匹配,以获得新帧的初始位姿。参考关键帧的位姿是后续建图和跟踪的基础,相对可靠。
  2. 恒速模型跟踪失败后:
    • 场景描述: 系统尝试使用恒速模型预测当前帧位姿失败(可能由于相机运动剧烈、场景纹理缺乏等)。
    • 为何使用:
      • 恒速模型局限性: 仅依赖前一帧信息,信息量有限,速度估计可能不准,易导致错误匹配。
      • 参考关键帧优势: 通常经过局部建图线程优化,位姿更精确;可能关联了更多地图点,3D信息更丰富。因此,作为一种更稳健的备选方案。

三、具体流程与原理

参考关键帧跟踪主要包含以下步骤:

  1. 当前帧特征编码 (BoW转换):
    • 操作: 将当前普通帧提取的ORB特征(特别是描述子)转化为词袋 (Bag-of-Words, BoW) 向量。
    • 原理: BoW模型通过预训练的视觉词典,将特征描述子映射为“视觉单词”,形成一个表示图像内容的向量。目的是为后续高效特征匹配做准备,缩小匹配搜索范围。
  2. 基于BoW的快速特征匹配:
    • 操作: 利用当前帧和参考关键帧的BoW向量,进行SearchByBoW特征匹配。
    • 原理: 只对在BoW空间中属于相同或相近“视觉单词”的特征点进行匹配,极大提高匹配效率和成功率。成功匹配后,当前帧的2D特征点就与参考关键帧的3D地图点建立了对应关系。
  3. 初始位姿赋予与3D-2D优化:
    • 操作:
      1. 初始位姿估计: 通常使用上一帧 (mLastFrame) 的位姿作为当前帧位姿的初始猜测值,以加速优化过程的收敛。
      2. 位姿优化 (Optimizer::PoseOptimization): 基于步骤2建立的“当前帧2D点 - 参考关键帧3D点”的匹配关系,通过最小化重投影误差 (Reprojection Error) 来优化当前帧的位姿。
    • 原理:
      • 重投影误差: 将参考关键帧的3D地图点根据当前帧的估计位姿投影到当前帧图像平面,计算投影点与实际匹配的2D特征点之间的像素距离。
      • 优化目标: 调整当前帧的位姿,使得所有匹配点的总重投影误差最小。
      • 重点: 在此优化步骤中,仅优化当前帧的位姿,不改变参考关键帧的3D地图点坐标,因为后者被认为是相对准确的。
  4. 外点剔除:
    • 操作: 在位姿优化后,识别并剔除那些可能是错误匹配的特征点(外点, Outliers)。
    • 原理: 位姿优化过程本身有助于识别外点(例如,重投影误差过大的点)。剔除外点是为了保证最终位姿估计的鲁棒性和准确性,只保留高质量的内点 (Inliers) 匹配。
  5. 跟踪成功判断:
    • 操作: 检查经过外点剔除后,剩余的有效内点匹配数量。
    • 原理: 如果内点数量超过预设阈值(例如,ORB-SLAM2中初始匹配少于15个或优化后内点少于10个则认为失败),则认为参考关键帧跟踪成功,当前帧位姿得到可靠估计;否则,跟踪失败。

四、总结

参考关键帧跟踪是ORB-SLAM2跟踪线程中的一个核心且鲁棒的位姿估计算法。它通过利用位姿已知的参考关键帧,结合高效的BoW特征匹配和精确的3D-2D位姿优化技术,为当前帧提供可靠的位姿估计,尤其在系统初始化阶段或快速运动模型失效时发挥着关键作用。