ORB_SLAM2捋思路(2)

pNewMP->AddObservation(pKFini,i),函数做的是判断这个关键帧是否已经在我的一个map中,通过函数if(mObservations.count(pKF))判断,其中主要是看这个mObservations里面是否已经存在pKF,据我查看了其他 的函数可以推断此时mObservations中应该是不包含pKF的。如果存在就直接返回,不存在就加上该关键帧,并且给予索引(就是这个点在该关键帧中的索引,仅仅在该关键帧的索引),这个函数就是就该关键帧的所有mapPoint都绑定在一个关键帧中,因为它的函数的i不会改变。并且将obs双目和rgbd加2,单目加1.
pKFini->AddMapPoint(pNewMP,i);函数将mapPoint添加到该关键帧的一个专管地图点的向量中。
pNewMP->ComputeDistinctiveDescriptors();函数是计算描述子的,mObservations再提一下,map()里面存的关键帧和mappooint在该帧上的索引,里面也许有多个关键帧,就是看到这个点的多个帧以及分别对应的mappoint索引。这个函数其实就是在看到该点的多个关键帧中找到对应的描述子区分度最高的一个,它取的是中间值,就是离两边都远。
pNewMP->UpdateNormalAndDepth()
该函数主要是求该地图点的平均观测方向和观测深度范围。(里面有几个函数算距离的函数没看懂。)
最后mCurrentFrame.mvpMapPoints[i]=pNewMP;把这个新的地图点加入到当前帧的地图点向量中。
然后将出事关键帧插入到局部地图中。将当前帧传递给上一帧,将当前帧的id赋值给上一关键帧的id,初始关键帧给上一关键帧。
mvpLocalKeyFrames.push_back(pKFini);将初始关键帧放入局部关键帧中,将地图中的所有点都给局部地图(因为这是第一帧吧),将初始关键帧传递给参考关键帧,
mCurrentFrame.mpReferenceKF = pKFini;同时将初始关键帧传递给当前帧的参考关键帧,mpMap->SetReferenceMapPoints(mvpLocalMapPoints);将局部地图点设置为地图的参考地图点。mpMap->mvpKeyFrameOrigins.push_back(pKFini);将初始关键帧放入地图的原始关键帧。 mpMapDrawer->SetCurrentCameraPose(mCurrentFrame.mTcw);将当前帧的坐标设置为当前相机的位姿。
初始化成功,将状态赋值为OK。此时双目和rgbd的初始化就结束了。返回到track() 函数中,然后会跳过一大段的else{},接着存储帧的姿态信息,以便随后检索完整的摄像机轨迹。

 cv::Mat Tcr = mCurrentFrame.mTcw*mCurrentFrame.mpReferenceKF->GetPoseInverse();
        mlRelativeFramePoses.push_back(Tcr);// l  == last
        mlpReferences.push_back(mpReferenceKF);
        mlFrameTimes.push_back(mCurrentFrame.mTimeStamp);
        mlbLost.push_back(mState==LOST);
执行完这些函数后,就退出了track()函数,回到GrabImageRGBD(),返回一个位姿矩阵。返回到system.TrackRGBD()继续执行里面的函数,
`mTrackingState = mpTracker->mState;
mTrackedMapPoints = mpTracker->mCurrentFrame.mvpMapPoints;
mTrackedKeyPointsUn = mpTracker->mCurrentFrame.mvKeysUn;`

 第一个函数返回跟踪的状态,第二个函数将当前帧的mappoint传给mTrackedMapPoints。将当前帧的特征点赋值给mTrackedKeyPointsUn.

最后返回Tcw,并退出trackRGBD()函数,回到主函数。基本完成了第一帧的处理。然后开始第二帧的读入。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

城墙郭外斜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值