ORB-SLAM3论文解读

ORB-SLAM3论文解读ORB-SLAM3论文解读主要的创新点数据关联模型系统整体ORB-SLAM3论文解读ORB-SLAM1和2的作者Juan已经毕业了,其工作仍然由同一课题组的Carlos继续完成并撰写论文和代码,这次论文同样对应着开源代码,youtube演示效果惊人,很多场景下无需大量修改即可直接使用,可谓是工作党的KPI,学生党的SCI。废话少说,直入主题。ORB-SLAM3与前两次作品相比,引入和视觉惯性和多地图模式的SLAM。其算法支持的传感器也有单目、双目、RGBD相机等。在相机的成像
摘要由CSDN通过智能技术生成

ORB-SLAM3论文解读

ORB-SLAM1和2的作者Juan已经毕业了,其工作仍然由同一课题组的Carlos继续完成并撰写论文和代码,这次论文同样对应着开源代码,youtube演示效果惊人,很多场景下无需大量修改即可直接使用,可谓是工作党的KPI,学生党的SCI。
废话少说,直入主题。ORB-SLAM3与前两次作品相比,引入和视觉惯性和多地图模式的SLAM。其算法支持的传感器也有单目、双目、RGBD相机等。在相机的成像模型中 ,采用了针孔、鱼眼相机模型(见摘要的第一段)。
代码传送门:链接: https://github.com/UZ-SLAMLab/ORB_SLAM3.
论文传送门:链接: https://arxiv.org/pdf/2007.11898.pdf.

主要的创新点

大佬的自吹自擂部分中也提到,他们的主要创新点有两点:

  1. “完全”基于最大后验估计MAP的VI-SLAM ,无论在初始化阶段还是运行阶段,都采用了MAP进行状态估计,因此ORB-SLAM3在室内外、大小场景中鲁棒性很好,且精确度是其他方法的2~5倍;如文中所讲,本文的IMU和视觉的组合系统是extremely robust的。
  2. 多地图系统,当定位丢失即lost时,ORB-SLAM3会自动建立一个新的小地图,并在revisit两张地图上的同一地点的时候进行地图的seamlessly merge,因此,这一算法能够使用不仅仅几帧之前的信息,而是运用了全局的信息,能够在bundle adjustmen中利用视差较大的帧来增加BA求解的准确性(因为当视察较小时,求解不准确,且优化容易进入局部极值)。这种方法里对同一特征的观测可能在时间上的间隔较大,因为我们对其上一次的观测甚至可能出现在之前一张小地图中(中间过程里lost了至少一次)。

数据关联模型

  1. short-term,在短程模式下,路标点一旦退出我们的视野,我们将这个路标点丢弃,其在优化时计算效率高,但存在累计误差,即使重新回到同一地点,也无法实现重定位或者回环检测,位姿图无法构成闭环。
  2. mid-term,在中程模式下,和短程模式类似,累计误差只有在重新回到地图中已知区域才有可能实现重定位,建立一个封闭的环状位姿图以消除累计误差。这与大多数SLAM系统中的方法类似。这一方法能够保证局部定位的准确性
  3. long-term,长期模型中,采用place recognition的方式,例如Dbow词袋库的回环检测与重定位,无视累计误差和跟踪丢失,直接将当前位姿和之前一记录位姿对齐。并通过图优化的方式消除(平摊)累计误差。这一方法能够保证大环境重定位的稳定性。在运用词袋库的回环检测模型中,需要被检测帧具有时间一致性,即需要连续三帧均能触发词袋库召回匹配。在此之后,还需要检查是否具有几何一致性,因此,召回的准确性得到了较大提升,然而其召回率却难以得到保证,这种方法的计算过于缓慢,难以将之前建立的小地图充分应用起来。因此ORB-SLAM3先进行几何一致性的检测,随后再对局部一致性(即local window中连续三个存在共视的帧的匹配性)进行检测。其中,时间一致性将连续三个关键帧进行比较,而此处局部一致性将连续三个共视关键帧进行了检查。由于其存在共视,关键点的匹配会更多,所以其准确性和召回率得到了提升,而计算量会少许增大。

系统整体

这部分就直接按照论文中的部分进行依次解读 (fan)(yi)。
ORB-SLAM3系统流程图

Atlas地图集

整个ORB3最牛逼的地方就在这里了,最早在IROS2019的一篇文章,即参考文献[9]中提到。在ORB3中,Atlas地图集由一系列不连续的小地图构成,并能够无缝连接,实现重定位、回环检测、地点识别等功能。当每一个新的视觉帧进入流程,跟踪线程立即追踪并定位新一帧的位姿。地图集本身也随着时间逐步优化且会将新的视觉帧经过挑选作为关键帧。在Atlas中,DBoW2被用于重定位、回环检测、地图合并。地图的状态也分为active和non-active两个状态,在跟踪线程的介绍里将会详细介绍这一机制。

跟踪线程

跟踪线程被用来根据当前的active地图,实时地跟踪最新一帧的位置,利用最小化重投影误差的方式实现位姿的最大后验估计MAP。决定新一帧是否作为关键帧加入地图也是在这个线程中完成的。跟踪线程接受IMU、Frame输入,IMU 被预积分处理,而Frame被提取ORB特征,整体跟踪流程中规中矩,没什么值得一提的地方。
当定位跟踪失败时:首先会在所有的Atlas地图集中搜索当前位置的匹配,如果成功,则将当前的地图设置为non-active,而将在Atlas搜索到的地图设置为active,并继续在active的地图上进行局部跟踪。如果在全图搜索失败,则在一定时间后,当前的active地图会强行被设置为non-active,新的小地图将被构建,并设置为active。这样,就的地图的正确性不会被局部定位的失败影响,新旧地图之间的位姿变换关系不确定性也有希望被之后的共视减小或者消除。

局部建图线程

局部建图线程中规中矩,只有active的地图被添加关键帧,在添加关键帧的时候,重复的关键点被移除。VI-Bundle Adjustment在当前被插入帧前后窗口内被用来提升地图的质量。但是,在Local mapping框图中的后三项,ORB3加入了一些改进,用了他们的novel MAP,后续会介绍。

回环和地图合并线程

当每一个关键帧被插入,地点识别都被启动,这一关键帧被和整个Atlas地图集关键帧进行比较,如果检测到两关键帧是同一地点,分为两种情况:若被召回帧是当前的active地图中的一部分,则需要进行loop correction回环矫正,在回环矫正之后,Full BA在另一个线程中被悄悄进行,全局位姿图得到优化,整体的地图一致性得到了提升;若被召回帧是属于一个non-active的map,两个地图则会被合并成一个地图并将大地图设置为当前的active地图。这一过程和跟踪并行,不会影响跟踪的实时性。

相机模型

相机模型带来的重定位问题

相机模型这块,ORB3将系统中所有与相机模型相关的部分(投影和反投影公式以及其雅可比)提取了出来,让相机模型成为了一个独立的模块儿,以便随时替换其他的相机模型。在重定位中,由于需要使用PnP(Perspective n points)算法,所以需要一个标定好的针孔模型,因此,其他相机模型不再适用,在此我们选择MLPnP(Maximum Likelihood PnP)来作为求解算法。这种算法直接应用光线投影作为输入,只需要使用者提供一个将像素反投影为光束的unprojection公式以及相应像素点的坐标就可以求解相机的位姿。

相机模型带来的双目问题

在针孔相机双目视觉中,在寻找特征点匹配时,可以直接在另一个相机的同一行像素上进行搜索,实现快速的匹配,但这一加速技巧在鱼眼相机或者两个不同的针孔相机上难以实现。因此我们将一个双目相机看作是两个具有固定位姿变化SE3的单目相机,且两个相机帧之间存在较大的共视区域。两个单目被分别加入BA优化。为了利用双目的优势,如果两个相机之间存在共视区域,这一区域的特征点可以在第一次被看见的时候被三角化,且尺度的不确定性被双目SE3的尺度信息所消除。在没有共视的区域,特征点依旧按照多视图几何的方式进行三角化。

视觉惯性SLAM部分

ORB-SLAM-VI将ORB-SLAM改装成VI-SLAM。但这一算法仍有其局限性,虽然能够实现地图的复用,但其只能用针孔相机且初始化特慢,在此一一叙述。关于预积分和视觉重投影误差的部分我就不再多说了。分别将两个残差的信息矩阵加权马氏距离进行求和最小化即是最终的损失函数。在优化时,调整路标点的三维坐标以及机器人状态(R,p,v,q,b)使目标损失函数最小。如下:

min ⁡ S ‾ k , X ( ∑ i = 1 k ∥ r I i − 1 , i ∥ Σ I i , i + 1 2 2 + ∑ j = 0 l − 1 ∑ i ∈ K j ρ Hub  ( ∥ r i j ∥ Σ i j ) ) \min _{\overline{\mathcal{S}}_{k}, \mathcal{X}}\left(\sum_{i=1}^{k}\left\|\mathbf{r}_{\mathcal{I}_{i-1, i}}\right\|_{\Sigma_{\mathcal{I}_{i, i+1}}^{2}}^{2}+\sum_{j=0}^{l-1} \sum_{i \in \mathcal{K}^{j}} \rho_{\text {Hub }}\left(\left\|\mathbf{r}_{i j}\right\|_{\Sigma_{i j}}\right)\right) Sk,Xmin(i=1krIi1,i

  • 25
    点赞
  • 169
    收藏
    觉得还不错? 一键收藏
  • 21
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值