ORBSLAM2代码学习(1): TrackWithMotionModel() 和TrackReferenceKeyFrame()

区别

TrackWithMotionModel() 和 TrackReferenceKeyFrame()都是通过输入的帧(cur frame)计算cur frame 的R,T。不同之处是二者ORB特征点匹配的方法不同。

TrackReferenceKeyFrame()

步骤1:将当前帧(cur frames)的描述子转化为BoW向量。

步骤2:利用BOW方法对ORB特征点进行匹配,这两步的方法点击这里

步骤3: 将上一帧的位姿态作为当前帧位姿的初始值,之后将其带入优化模型中。

这时keyframe(KF)的内容有:mappoints(地图点) , keypoints(特征点),TCW(位姿)
cur frame 的内容: mappoints(地图点)取自KF 和KF 的mappoints相同
keypoints(特征点) 通过与KF中ORB特征点匹配获得(利用BOW方法加速)
TCW(位姿)初始值 设置与上一个 frame 相同

步骤4: 这时设KF为世界坐标,cur frame 可以通过优化3D-2D的重投影误差来获得cur frame的位姿TCW
也就是Optimizer::PoseOptimization(&mCurrentFrame)函数

步骤5:剔除优化后的outlier匹配点(MapPoints)

TrackWithMotionModel()

这个函数前提假设是相机是匀速运动的

步骤1:首先根据上一帧的位姿和上一帧相机运动的速度来估计cur frame 的当前位姿TCW(相机运动速度暂时不知道怎么求的)

mCurrentFrame.SetPose(mVelocity*mLastFrame.mTcw);//将当前帧的初始位姿设为上一帧位姿乘上一帧位姿的变化速度,得到当前的R,T

步骤2:将上一帧带有的mappoints ,根据步骤1 估计的R,T投影到cur frame上。

步骤3: 设定一个阈值,在cur frame 投影点附近进行搜索,以找到与上一帧中匹配的 ORB特征点。

步骤4:步骤3已经将两帧的ORB特征点进行了匹配,接着通过优化3D-2D的重投影误差来获得cur frame的位姿TCW。

步骤5: 优化位姿后剔除outlier的mvpMapPoints。

欢迎批评指正

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值