跟踪 —— 局部地图跟踪
Local Map Tracking
1. 目标与定位
- 角色:第二阶段跟踪,在初步跟踪(参考关键帧、恒速模型、重定位)之后进行。
- 目的:利用更丰富的局部地图信息,对第一阶段获得的当前帧位姿进行精细化优化,得到更准确的位姿。
- 核心:增加匹配约束,仅优化当前帧位姿。
2. 与“局部建图线程 (Local Mapping)”的区别
- 局部地图 (Local Map) - 用于本阶段(局部地图跟踪)
- 数据:由局部关键帧及其观测到的局部地图点构成。
- 功能:为当前帧提供投影匹配候选,仅优化当前帧位姿。不改变关键帧位姿,也不改变地图点三维坐标。
- 本质:“用图”来精调当前帧。
- 局部建图线程 (Local Mapping) - 独立线程
- 数据:处理新生成的关键帧。
- 功能:
- 生成新的地图点。
- 进行局部BA (Bundle Adjustment),同时优化局部区域内的关键帧位姿和地图点坐标。
- 剔除冗余关键帧和不可靠地图点。
- 本质:“建图”与“维护图”。
3. 局部地图跟踪的核心步骤
第 1 步:构建局部地图(更新局部关键帧和局部地图点)
目的是为当前帧搜集一个相关的、小范围的地图子集。
- 1.1 更新局部关键帧 (Local KeyFrames)
- 一级共视关键帧:直接与当前帧有共同观测地图点的关键帧。
- 二级共视关键帧:一级共视关键帧的共视关键帧(如共视程度最高的前 N 个)。
- 一级共视关键帧的父/子关键帧:在共视图/生成树结构中的父节点和子节点。
- 目的:形成当前帧的“上下文环境”,确保足够的观测信息。
- 1.2 更新局部地图点 (Local MapPoints)
- 来源:由上述“局部关键帧”集合所观测到的所有地图点。
- 特点:通常覆盖范围远大于当前帧直接视野,为相机小范围运动和旋转提供了潜在匹配。
第 2 步:投影匹配,获取更多匹配点对
利用局部地图点与当前帧特征点建立更多约束。
- 2.1 筛选可用的局部地图点
- 排除已匹配点:在第一阶段跟踪中已成功匹配的地图点不再参与。
- 视野范围检查 (In Frustum Check):
- 深度为正:地图点在当前相机坐标系下,Z 轴坐标 > 0。
- 投影在图像内:地图点投影到当前帧像素平面上,坐标 (u, v) 在图像边界内。
- 有效距离:地图点与相机中心的距离在其定义的有效观测距离范围内。
- 观测角度:当前相机指向地图点的向量与该点平均观测方向的夹角小于阈值(如 )。
- 2.2 进行投影匹配
- 将筛选出的合格局部地图点投影到当前帧图像。
- 在投影点附近区域搜索当前帧的 ORB 特征点,进行特征描述子匹配。
第 3 步:位姿优化 (Pose Optimization)
利用新增的匹配关系进一步优化当前帧位姿。
- 方法:仅优化位姿的 BA (Pose-Only Bundle Adjustment)。
- 固定项:局部地图点的位置、局部关键帧的位姿均保持不变。
- 优化项:仅当前普通帧的位姿 (旋转 和平移 )。
- 目标:最小化地图点在当前帧上的重投影误差。
第 4 步:更新统计信息
- 更新当前帧中各匹配地图点的内点/外点状态。
- 统计成功跟踪(优化后为内点)的地图点总数。
第 5 步:判断跟踪状态
- 根据内点数量决定跟踪是否成功。
- 若近期发生过重定位,成功跟踪的内点数阈值会更严格。
- 内点数不足则认为跟踪失败,否则成功,当前帧位姿得到更新和确认。
4. 总结思路
- “召集助手”:确定与当前帧相关的局部关键帧集合。
- “扩大搜索范围”:基于局部关键帧,构建包含丰富三维点的局部地图。
- “精挑细选”:从局部地图点中筛选出在当前帧视野内且观测条件良好的候选点。
- “建立更多连接”:将候选点投影到当前帧,进行特征匹配,增加约束。
- “精调姿态”:利用所有匹配,仅优化当前帧的位姿,使其更精确地对齐局部地图。