ORB-SLAM3系统详解

目录

Tracking部分

Local Mapping

回环检测和融合


可以参考: ORB-SLAM3源码阅读笔记1

论文翻译论文解读

一、Tracking部分

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

Local Mapping 和TrackLocalMap都是把VI-ORB论文的工作放上来,详情可以看VI-ORB

Local Mapping Run()函数在处理的过程中,设置标志位不接收Tracking线程生成的关键帧,因此Tracking线程关键帧判定时考虑该点,并且在判断是否插入时,如果空闲之间插入,如果不空闲,要根据情况插入。

Local Mapping流程图如下:

​​​​​​​

 

三、回环检测和融合

  1. DetectNBestCandidates。在所有关键帧中计算与当前关键帧具有最多相同单词数(max_n),然后相同单词数寻找大于0.8*max_n的关键帧序列lScoreAndMatch。在这个序列中,再计算当前关键帧和lScoreAndMatch里每个相关联的关键帧的相似度分数和,同时找到共视里面(一个小组里)分数最高的关键帧。然后将小组分和分数最高的一个关键帧保存到lAccScoreAndMatch。最后对lAccScoreAndMatch进行根据分数从大到小排序。最后根据当前帧和候选的关键帧是否在同一个map中,将其分到回环帧或是融合候选帧。
  2. 然后在候选闭环帧中选出符合要求的一帧作为闭环帧,vpLoopBowCand和vpMergeBowCand分别各选出一帧。在DetectCommonRegionsFromBoW函数里,会对当前帧和闭环候选帧及其共视帧进行特征点匹配、求解和优化sim3,如果成功,说明当前帧和该闭环候选帧是可以建立闭环关系的。然后紧接着会进行融合连续性检测,即将当前帧的3个共视帧与匹配上的闭环帧进行投影匹配,如果匹配数足够,说明当前帧的共视帧与闭环帧也可以建立闭环关系,如果有三个共视帧可以建立闭环关系则返回true,检测到回环!作者论文里也说明了这是他们算法的一个创新点,即检测时间连续性时不用等好几帧,直接拿当前帧的共视帧来做,这样使得检测更快,避免错过回环,即提高了召回率。
  3. 如果在上一步中找到了可以和当前帧及当前帧共视帧建立回环关系的闭环帧,但是融合连续性检测没有达到3帧,mnLoopNumCoincidences或者mnMergeNumCoincidences就不会为0(可能为1或2),那么会执行现在这步。这时下一帧进入DetectCommonRegionsFromBoW( )函数时就会计算回环候选帧-当前帧帧间约束。具体做法为:通过投影寻找闭环帧的局部窗口地图点(遍历每个回环候选帧和其共视最好的5个帧的点云)与当前帧的匹配(searchbyBOW),如果某个回环候选帧的窗口中的某个帧的点云和当前帧点云的sim3匹配(3D-3D RANSAC)收敛了,则窗口更新为该帧的窗口。然后将新窗口中的所有帧的地图点通过投影匹配当前帧,重新进行双边优化,求解出sim3变换,最后进行连续性检测,计算当前帧的公视帧与新的回环帧searchByProjection的匹配内点数目,如果有3个关键帧验证成功则DetectCommonRegionsFromBoW返回true。最终如果进来3个关键帧DetectCommonRegionsFromBoW都正确,则表示融合连续性检测成功
  4. 如果融合连续行检测通过,则可以开始回环矫正,在矫正前,如果是IMU模式,根据Sw1w2(两个世界坐标系之间的变换)计算出roll、pitch、yaw。roll,pitch角不应该过大,如果过则步融合。融合函数(CorrectLoop)要求LocalMapping和全局BA线程停止。CorrectLoop的操作有1.将当前帧局部窗口的帧,转到w2坐标系下,将回环帧及其窗口的点与当前帧的地图点进行融合(SearchAndFuse)。把当前帧与其一级和二级关联的关键帧先剔除,当前帧只留下了回环的约束,然后使用4自由度(inertialize)7自由度(visual-only)pose graph优化

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ORB-SLAM3是一个基于ORB-SLAM2和ORB-SLAM-VI的系统,它可以在纯视觉或者视觉惯导的系统中鲁棒地运行。它支持在单目、双目和RGB-D相机上利用针孔或者鱼眼模型进行SLAM(Simultaneous Localization and Mapping)任务。ORB-SLAM3是对之前版本的改进和扩展,在2015年提出的ORB-SLAM首次引入了特征点描述子ORB(Oriented FAST and Rotated BRIEF),2017年提出的ORB-SLAM2在此基础上进一步改进了定位和地图重建的性能,还引入了闭环检测和重定位功能。ORB-SLAM-VI在ORB-SLAM2的基础上进一步增加了惯性测量单元(IMU)的支持。而ORB-SLAM3则在ORB-SLAM2和ORB-SLAM-VI的基础上进行了更多的改进和优化。具体来说,ORB-SLAM3引入了新的局部地图表示方法,采用了更强大的特征点描述子SuperPoint和更快速的特征点检测器SuperGlue,提升了系统的定位和重建性能。此外,ORB-SLAM3还引入了新的优化方法,提高了系统的鲁棒性和实时性。整体上,ORB-SLAM3在之前版本的基础上进行了多方面的改进和优化,使得系统在各种不同场景和设备上都能更加可靠地进行SLAM任务。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [一文详解ORB-SLAM3](https://blog.csdn.net/qq_29462849/article/details/118159468)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [ORB-SLAM3技术详解(1)简介与论文解读](https://blog.csdn.net/hhaowang/article/details/117318737)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值