简介:
通过上一帧(Tracking::mLastFrame)观测的地图点和当前帧特征的匹配,计算当前帧的位姿
注意:计算的位姿是当前帧相对于世界坐标系的Tcw。
流程:
1,通过UpdateLastFrame()函数重新设置mLastFrame的Tcw为T(mLastFrame->参考关键帧)*T(参考关键帧->世界坐标系)。
问题:T(mLastFrame->参考关键帧)原本就是通过mLastFrame的Tcw和
T(参考关键帧->世界坐标系)计算的,那么这一步有什么意义呢?
本人将此步骤去掉后,在Euroc_MH_05_difficult数据集上ape、rpe均有提高。
2,将当前帧的位姿初始化为 [上一帧的位姿速度]与[上一帧位姿]的乘积mVelocity*mLastFrame.mTcw。
其中 [上一帧的位姿速度]mVelocity是T(上一帧->上上帧),本质上是
连续两帧的位姿增量,因此当前帧的位姿初始化为[上一帧]"加上"位
姿增量。
3,匹配上一帧观测的地图点和当前帧的特征。
通过将上一帧观测到的特征点投影到当前帧,寻找投影点附近的特征点,然后进行描述子匹配。函数ORBmatcher::SearchByProjection()
步骤4567与追踪参考关键帧相同
4,g2o优化位姿(3d-2d)。
函数Optimizer::PoseOptimization(&mCurrentFrame);
5,在当前帧匹配的地图点(mCurrentFrame.mvpMapPoints)中去除其中在优化中被视为外点的地图点。
6,被视为优化外点的当前帧匹配的地图点的mbTrackInView设置为false,该地图点的mnLastFrameSeen设置为当前帧id
7,根据优化中的内点数量判断追踪是否成功