Local Map Tracking

1. 目标与定位

  • 角色:第二阶段跟踪,在初步跟踪(参考关键帧、恒速模型、重定位)之后进行。
  • 目的:利用更丰富的局部地图信息,对第一阶段获得的当前帧位姿进行精细化优化,得到更准确的位姿。
  • 核心:增加匹配约束,仅优化当前帧位姿。

2. 与“局部建图线程 (Local Mapping)”的区别

  • 局部地图 (Local Map) - 用于本阶段(局部地图跟踪)
    • 数据:由局部关键帧及其观测到的局部地图点构成。
    • 功能:为当前帧提供投影匹配候选,仅优化当前帧位姿。不改变关键帧位姿,也不改变地图点三维坐标。
    • 本质:“用图”来精调当前帧。
  • 局部建图线程 (Local Mapping) - 独立线程
    • 数据:处理新生成的关键帧。
    • 功能
      1. 生成新的地图点。
      2. 进行局部BA (Bundle Adjustment),同时优化局部区域内的关键帧位姿和地图点坐标。
      3. 剔除冗余关键帧和不可靠地图点。
    • 本质:“建图”与“维护图”。

3. 局部地图跟踪的核心步骤

第 1 步:构建局部地图(更新局部关键帧和局部地图点)

目的是为当前帧搜集一个相关的、小范围的地图子集。

  • 1.1 更新局部关键帧 (Local KeyFrames)
    • 一级共视关键帧:直接与当前帧有共同观测地图点的关键帧。
    • 二级共视关键帧:一级共视关键帧的共视关键帧(如共视程度最高的前 N 个)。
    • 一级共视关键帧的父/子关键帧:在共视图/生成树结构中的父节点和子节点。
    • 目的:形成当前帧的“上下文环境”,确保足够的观测信息。
  • 1.2 更新局部地图点 (Local MapPoints)
    • 来源:由上述“局部关键帧”集合所观测到的所有地图点。
    • 特点:通常覆盖范围远大于当前帧直接视野,为相机小范围运动和旋转提供了潜在匹配。

第 2 步:投影匹配,获取更多匹配点对

利用局部地图点与当前帧特征点建立更多约束。

  • 2.1 筛选可用的局部地图点
    • 排除已匹配点:在第一阶段跟踪中已成功匹配的地图点不再参与。
    • 视野范围检查 (In Frustum Check)
      1. 深度为正:地图点在当前相机坐标系下,Z 轴坐标 > 0。
      2. 投影在图像内:地图点投影到当前帧像素平面上,坐标 (u, v) 在图像边界内。
      3. 有效距离:地图点与相机中心的距离在其定义的有效观测距离范围内。
      4. 观测角度:当前相机指向地图点的向量与该点平均观测方向的夹角小于阈值(如 60{60}^{ \circ })。
  • 2.2 进行投影匹配
    • 将筛选出的合格局部地图点投影到当前帧图像。
    • 在投影点附近区域搜索当前帧的 ORB 特征点,进行特征描述子匹配。

第 3 步:位姿优化 (Pose Optimization)

利用新增的匹配关系进一步优化当前帧位姿。

  • 方法:仅优化位姿的 BA (Pose-Only Bundle Adjustment)。
  • 固定项:局部地图点的位置、局部关键帧的位姿均保持不变。
  • 优化项:仅当前普通帧的位姿 (旋转 RR 和平移 tt)。
  • 目标:最小化地图点在当前帧上的重投影误差。

第 4 步:更新统计信息

  • 更新当前帧中各匹配地图点的内点/外点状态。
  • 统计成功跟踪(优化后为内点)的地图点总数。

第 5 步:判断跟踪状态

  • 根据内点数量决定跟踪是否成功。
  • 若近期发生过重定位,成功跟踪的内点数阈值会更严格。
  • 内点数不足则认为跟踪失败,否则成功,当前帧位姿得到更新和确认。

4. 总结思路

  1. “召集助手”:确定与当前帧相关的局部关键帧集合。
  2. “扩大搜索范围”:基于局部关键帧,构建包含丰富三维点的局部地图。
  3. “精挑细选”:从局部地图点中筛选出在当前帧视野内且观测条件良好的候选点。
  4. “建立更多连接”:将候选点投影到当前帧,进行特征匹配,增加约束。
  5. “精调姿态”:利用所有匹配,仅优化当前帧的位姿,使其更精确地对齐局部地图。