赞
踩
目录
可以参考: ORB-SLAM3源码阅读笔记1
Tracking.cc部分与ORB-SLAM3的区别:
TrackWithMotionModel时,默认初值使用IMU预积分的值。
TrackReferenceKeyFrame与orb2一样。
如果上述两个办法失效,仍然没有定位成功,若有IMU,并且当前帧距离上次重定位成功不到1s,则表示丢失LOST;如果超过1s,且当前地图中关键帧数目较多(大于10),则设置为recently-lost。如果recently-lost则用IMU预积分的值。如果连续5秒都没有找回来,再设置为LOST。在纯视觉情况下,如果是recently-lost,则用EPNP重定位。如果是LOST状态(表示真的实在救不回来了),在ATLAS地图集中,若当前地图中关键帧数目小于10,重置当前地图,若超过10,创建新地图加入ATLAS.
TrackLocalMap, 基于local map进行跟踪,如果是IMU模式,并且IMU数据积累很多,则使用视觉+IMU的误差函数进行优化(PoseInertialOptimizationLastFrame)
如果TrackLocalMap失败,但前面成功,若是IMU模式,则设置为recently-lost,否则设置为lost。重定位采用MLPNP算法,考虑到了图像平面特征点像素的不确定度,在正切空间内,优化特征点在正切空间下的投影最小,得到相机的位姿。
如果跟踪成功 或 recently-lost,更新速度,清除无效地图点,按需创建关键帧,如果是lost则,如果是IMU模式并且还未进行IMU初始化,重置当前地图,退出当前跟踪。如果地图中关键帧超过5 并且 纯视觉模式 或 虽然是IMU模式但是已经完成IMU初始化了,创建新的地图。
在Optimizer.cc 里优化的时候,IMU优化的节点包含当前帧位姿+速度,陀螺仪的偏置,加速度计的偏置。第一种边(视觉重投影约束);第二种边(IMU预积分约束):两帧之间位姿的变化量与IMU预积分的值偏差尽可能小;第三种边(陀螺仪随机游走约束):陀螺仪的随机游走值在相近帧间不会相差太多 residual=VG-VGk;第四种边(加速度随机游走约束):加速度的随机游走值在相近帧间不会相差太多 residual=VA-VAk;【当存在先验时】第五种边(先验约束):上一帧信息随优化的改变量要尽可能小IMU当前帧和关键帧的误差函数,会用在之后当前帧与上一个非关键帧的优化函数中
优化完统计当前帧跟踪到的地图点数目,判断是否跟踪成功。
IMU预积分:先是利用中值积分计算出来,两个相邻图像帧之间的预积分,然后在使用时,考虑到陀螺仪和加速度计的偏置,再对计算出的预积分进行传递后再使用。
Local Mapping 和TrackLocalMap都是把VI-ORB论文的工作放上来,详情可以看VI-ORB
Local Mapping Run()函数在处理的过程中,设置标志位不接收Tracking线程生成的关键帧,因此Tracking线程关键帧判定时考虑该点,并且在判断是否插入时,如果空闲之间插入,如果不空闲,要根据情况插入。
Local Mapping流程图如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。