简介:
通过当前帧(mCurrentFrame)与当前帧的局部地图匹配,优化当前帧的位姿
注意:计算的位姿是当前帧相对于世界坐标系的Tcw。
流程:
1,更新局部地图。函数UpdateLocalMap()
1,全局地图(Tracking::mpMap)的mvpReferenceMapPoints保存上一可以追踪局部地图的帧的局部地图地图点,用于可视化
2,更新当前帧局部地图中的局部关键帧(mvpLocalKeyFrames)。
局部关键帧包括:共视关键帧、共视关键帧的最多80个 {共视关键帧、子帧、父帧}。
函数UpdateLocalKeyFrames()
3,更新局部地图点(mvpLocalMapPoints),局部关键帧匹配的所有地图点构成局部地图点
函数UpdateLocalPoints();
2,匹配局部地图点与当前帧特征。函数SearchLocalPoints()。
1,根据投影的几何关系筛选出局部地图点中可以匹配的地图点。函数mCurrentFrame.isInFrustum(pMP,0.5)。
2,根据地图点在当前帧的投影点的位置,为每个地图点确定一组候选特征点。
在每一组候选特征点中确定与相应地图点的最佳匹配特征点。
函数ORBmatcher::SearchByProjection()
3,g2o优化位姿(3d-2d)。
函数Optimizer::PoseOptimization(&mCurrentFrame)。
4,在当前帧的mvpMapPoints中滤除优化外点。
5,更新相应地图点的mnFound信息。
6,根据优化内点数判断追踪是否成功。