比较全面的ORB-SLAM3论文翻译(基本全文不带相关研究与精度验证部分)

       看了网上一些解读论文的都是不是很全面啊,呃呃呃。。。不会整一些段子跟斗图可能有些枯燥,废话不多说直接开整吧!整个论文重点放在了地图融合跟优化上面可以一边看原论文一边看这个,里面参杂了一些个人理解,哪里错误和理解不到位的地方可以一起讨论啊。排版好像有问问题,从word直接拷过来的。

       大致看了下代码没有细看而且还没试跑,命名及流程啥的基本跟2代一样,不过优化部分代码8000多行看的有点汗颜啊,看来针对优化做了跟多功夫啊,感觉可读性比上一代差一些,因为劳尔大神走了的原因么。。

 

orbslam3 可以看做成多模块集成的slam系统

包括orbslam2,orbslam Atlas,VI-orbslam(都是这个实验室搞得东西,相当于一次把之前的论文源码全放出来了啊!)

流程图变化不大针对功能需要加了些模块

优势

1. 单、双目的vo/vio slam系统,并支持鱼眼相机。

2. 地图复用,拥有合并地图的功能。

3. 高召回的地点识别(占用较低的计算资源换得高召回与精度)

4. 不限制相机模型,只需提供投影,反投影及Jacobian方程(程序里提供了针孔与鱼眼模型)

 

系统介绍

Atlas(一个由一系列非连接的地图组成的多地图系统)

       其中包含一个活动的地图与许多非活动地图。活动地图与用于当前帧的定位,同时会增加关键帧。地图包含一系列基于DBOW2的关键帧用于重定位,回环与地图融合

跟踪线程

       给活动的地图提供新的帧,最小化重投影误差(单帧),决定当前帧是否成为关键帧。VI模式中,通过IMU残差计算本体的速度与IMU偏执。如果跟踪丢失,尝试在Atals所有地图中重定位,如果成功那个地图将成为活动的。如果几帧过后失败,则重新开始一个新的地图。

局部地图线程

       添加新的关键帧与MapPoint到活动的地图中,删除冗余,利用滑动窗口通过BA更新地图。VI模式中IMU的参数在这个线程初始化与更新,使用的是作者提出的最大后验估计技术。

回环与地图融合线程

       每添加一个关键帧,就探测活动的地图与其他地图的共有区域,如果检测到,执行回环矫正,如果不属于同一个地图,则将他们融合成一个。在矫正后另开一个线程进行整体的BA进一步更新地图且不影响实时性。

 

相机模型

       不限制相机模型,只需要一些关于相机的参数与方程(正反投影方程与Jacobian矩阵等)只需要提供相机模块就可以使用任何相机模型。在ORBSLAM3里面提供了针孔与鱼眼,相机模型抽象化有一下几点问题:

       1. 在之前的orbslam中相机重定位时基于EPnP算法,前提是一直都是一个标定好的相机。为了延续这个方法需要一个不依靠相机模型的PnP算法,这里提出了一个最大似然PnP算法(MLPnP),使用投影射线作为输入,与相机模型解耦,只需要提供一个从像素到投影射线的重投影方程。

       2. 这个系统不依赖双目矫正,将双目看做成两个单目(他们之间有一个固定的SE(3),且有共视区域)。使用这两个要素可以通过三角化获得真实尺度,后面跟踪时使用单目流程。

 

VI-SLAM

       VI-ORBSLAM假设的是针孔模型,且初始化太慢,在一些有挑战性的传感器上会失败。orbslam3里面基于上面的工作提出了一个快速准确的IMU初始化技术,可用于针孔/鱼眼的单双目惯性视觉slam。

 

1. 基本原理

       需要计算的有本体位姿Ti,速度vi,加速度计与陀螺仪的偏置,假设他们由布朗运动演化的(无规则),他们组成了状态向量Si。

       对于VIslam需要对两帧之间做IMU预积分,获得角度变化、速度变化与位置变化,还有一个关于全部测量向量的一个信息矩阵。定义惯性残差:

还有重投影误差:

Π表示相机的投影方程,⊕表示李群SE(3)在三维空间上的转换运算。

2. IMU初始化

三个关键观点:

- 纯单目slam可以提供非常准确的初始化地图,主要问题是没有尺度。解决这个问题的方法是添加IMU初始化。

- 当尺度明确地表示为优化变量时,它收敛得更快,而不是使用BA的隐式表示。

- 在IMU初始化阶段忽略传感器的不确定性会产生大量的不可预兆的误差。

因此,考虑到传感器的不确定性,我们将IMU初始化描述为一个MAP(最大后验概率)估计问题,分为三个步骤:

(1)仅视觉MAP估计

       用2秒钟来进行单目初始化,以4HZ的频率添加关键帧。此时已经有了10个相机位姿及上百个MapPoint,使用纯视觉BA。这些位姿转成以body坐标系下,上标表示变量尺度未知

(2)仅惯导MAP估计

 

这一步目的为了得到惯导参数的最佳估计,使用T0:k与这些关键帧间的惯导测量数据,惯导参数如下。

在只考虑惯性测量的情况下构建MAP估计问题。

考虑到测量的独立性,最终的优化问题结果是:

IMU预积分和先验分布取负对数与假设高斯误差:

与上面不同的是没有加入视觉残差,但是先验残差rp应该接近于0,其协方差由IMU特征给出。

在流形中进行优化时,需要定义一个收缩(见62参考文献),以在优化过程中更新重力方向估计:

(因为重力方向默认为向下的,绕着重力方向的旋转轴不管怎么转都不影响,这点在VIORB论文中也有介绍)

更新尺度方法如下:

       一旦惯性优化完成,帧的姿态和速度以及三维地图点将按估计的比例缩放并旋转以使z轴与估计的重力方向对齐。修正偏差,重复IMU预积分,以减少后面的线性化误差。

(3)VI MAP估计

       一旦获得一个好的IMU与视觉参数估计,可以执行视觉IMU联合优化进一步更新。对于所有关键帧有共同的偏置,包含与仅imu阶段共同的先验信息。

3.跟踪与建图

       跟踪阶段VI优化比较简单,只优化最近两帧的位姿,MapPoints固定。

       Mapping,执行整体优化对于大地图比较难处理。使用滑动窗口对关键帧和对应的MapPoints,包含与这些关键帧共视的关键帧,但它们是固定的。

       某些时候缓慢移动不能提供很好的惯导参数观测性,初始化在短短的15秒内可能不会收敛到准确结果。为了提高这种情况的鲁棒性,提出了一个新颖的尺度更新技术,基于一个改进的纯IMU优化,包含所有插入的关键帧,但只优化尺度与重力方向(如图2d)。注意,在这种情况下,假设恒定偏差是不正确的。相反,使用每个帧的估计值,并修复它们。这种优化在计算上非常高效,每10秒在LocalMapping线程中执行一次,直到地图有超过100个关键帧或自初始化以来已超过75秒。

4. 跟踪丢失的鲁棒性

       在纯VSLAM或者VO系统中,由于相机快速运动或遮挡容易导致丢失。ORBSLAM里面首创了基于词袋位置识别的快速重定位技术,但是在EUROC的困难数据集上还有些不足。当跟踪到少于15个MapPoints点时,这篇中VI系统会丢失。主要分成两个阶段提高鲁棒性:

    (1)短时丢失:目前的本体状态使用IMU的读取来估计,MapPoints在估计的相机位姿下被投影且在一个大的图像窗口中寻找匹配点。匹配结果被包含于VI优化中。在大多数情况下这样可以恢复视觉跟踪,否则5秒后进入下一阶段。

    (2)长时丢失:重新开一个地图,且作为活动的地图。

地图融合与回环

       为了防止假阳性结果导致地图混乱,DBoW2实施了时序与几何一致性检验,完成了百分百的精度,召回率30~40%。时序一致性检测需要至少三个关键帧。在ATLAS上使用了这种方法,这种延迟和低召回率经常导致相同或不同地图上的重复。

       无论何时在Mapping线程中创造了一个关键帧,位置识别都会尝试去探测与ATLAS中的关键帧的匹配。如果检测到匹配的关键帧属于活动的地图,执行回环,否则执行地图融合。

       作为这个方法的第二个新颖之处,一旦新的关键帧与地图确定了相对位姿,定义一个局部窗口,包含匹配的关键帧及其在covisibility graph中的临近帧。在这个窗口里密集地搜索中长度数据关联,提高回环与地图融合精度。与ORBSLAM2不同的细节如下:

A.地点识别

       为了实现高召回,对于每一个新的关键帧,在DBoW2的数据集中寻找与之相似的几个关键帧(ATLAS中)。为了实现百分百的精度,每一个候选帧都要经过数个几何认证。所有几何验证步骤的基本操作是检查图像窗口内是否存在与MapPoint的ORB描述符匹配的ORB关键点(也就是1.是否在图像上;2.是否能匹配上)。如果这个局部窗口里有数个候选关键帧,为了避免不明确的匹配,检查到第二近匹配的关键帧的汉明距离的比例。具体如下:

  1. DBow2 候选关键帧:从ATLAS DBoW2数据集中查找与活动的关键帧Ka最相似的三个关键帧,但并不包括与Ka有共视关系的关键帧。将每一个候选关键帧定义为Km。
  2. 局部窗口:对于每一个Km都定义一个局部窗口,包含Km、它的一些最佳共视关键帧以及这些帧能够看到的所有的MapPoints。DBoW2的直接索引提供了一系列的假定匹配(Ka的关键点KeyPoints与局部窗口中的关键帧的KeyPoints)。对于每一个2D-2D的匹配都有一个与之对应的3D-3D的MapPoint匹配。
  3. 3D 对齐变换:使用RANSAC计算Tam可以更好的将Km的MapPoints与Ka中对应的MapPoints对齐(这里应该表示一一对应)。在纯单目或者单目加IMU中,如果地图还没有构建成型(尺度没有,有可能是刚重新开了一个地图),计算Sim(3),否则计算SE(3)。在这两种情况下,都使用Horn算法[80],使用三个3D-3D匹配的最小集合来找到Tam的每个假设。通过Tam将MapPoint投影到Ka中,假设的匹配在Ka中实现了低于阈值的重投影误差,则对假设投了赞成票。如果最终的票数超过了阈值,选择票数最高的那一个Tam。
  4. 引导匹配更新:为了找到更多的匹配关键点,将窗口中所有MapPoints全部通过Tam投影到Ka中。这个搜索同样也是被颠倒的,在局部窗口的所有关键帧中寻找Ka MapPoints的匹配点(这块的操作个人理解为Ka中的关键点个数通过将所有MapPoints投影的方式增加,建立更多Ka与局部窗口的匹配关系后做优化)。利用所有匹配结果,通过非线性优化更新Tam,以双向重投影误差为目标函数,利用Huber影响函数对误匹配进行鲁棒性优化。优化后的内点数量达到一定阈值的话,使用一个更小的图片搜寻窗口来进行第二轮引导匹配与非线性更新。
  5. 验证三个共视关键帧:为了避免假阳性,DBoW2等待位置识别在三个连续的关键帧中触发,延迟或丢失位置识别(DBoW2 waited for place recognition to fire in three consecutive keyframes, delaying or missing place recognition,感觉翻译的不是很合适)。在大多数的时候验证所需要的信息已经在地图中。为了验证位置识别,我们在地图的活动部分搜索两个与Ka共视的关键帧,其中与局部窗口中的MapPoints匹配的数量超过阈值。如果没找到,验证过程将在下一个关键帧来时尝试,不需要再让词袋开始(without requiring the bag-of-words to fire again)。验证将继续直道找到了三个关键帧来确认,或者另外两个新来的关键帧都验证失败。
  6. VI重力方向验证:在VI模式下,如果活动的地图尺度计算完毕,估计SE(3)。进一步检查pitch与roll角度是否小于一定阈值来确定地接受位置识别假设。

B.视觉地图融合

       如果位置识别完成,并且当前Ka与Km在ATLAS中不属于同一个地图,执行地图融合。执行过程中要特别注意保证地图Mm中的信息可以迅速地被tracking线程使用,为了防止地图重复。为此,建议将Ma图引入Mm。

       因为Ma可能包含许多元素,融合它们可能会消耗很长时间,融合分成两步。第一步,定义一个welding window(焊接窗口)包含Ka与Km的临近帧。第二步,矫正传播到了剩余的融合地图中,通过位姿图优化来执行。详细过程如下:

  1. welding window这个窗口包含Ka及其共视关键帧、Km及其共视关键帧还有所有它们包含的MapPoints。在包括之前需要使用Tma做一个坐标转换,转换到Mm坐标系下使之对齐。
  2. 地图融合:Ma与Mm融合成了一个新的活动地图。为了删除重复点,主动地在Mm关键帧中搜索Ma地图中的MapPoints的匹配关系。对于每一个匹配,来自Ma的MapPoint被删除,Mm中的MapPoint保留了那些被删的点的可视关系(也就是那个被删除的点在Ma上是有对应的像素点的,需要把这些关系继承到对应的Mm地图的MapPoint中)。Covisibility graphs与essential graphs添加了新的边,这多亏了找到mid-term MapPoint的关联关系。
  3. Welding BA执行局部BA,优化窗口中所有来自Ma与Mm地图的关键帧。为了固定测量(gauge)自由度,在地图Mm中与窗口中的MapPoint有共视关系的关键帧固定不优化(由图可知这一部分关键帧不在窗口内,但是跟窗口的MapPoint或者关键帧有一定共视关系,还没看代码仅是猜测)。一旦优化完成,窗口内所有关键帧可以被用于相机跟踪,实现了快速且准确的地图Mm复用。
  4. 位姿图优化:整个融合的地图的essential graph进行一次位姿图优化,此时固定窗口中的关键帧。此优化从窗口矫正到剩余地图(也就上一步加上当前,先优化窗口里,在优化窗口外)

 

C.视觉惯导地图融合

       VI的融合算法与纯视觉的步骤类似,但是步骤1与步骤3为了更好的利用惯导数据而改变。

    (1)VI welding window:如果当前活动地图已经成型(个人理解为尺度已知),在其纳入窗口前先将可用的Tma(SE(3))应用于地图Ma。如果地图没有成型,使用Sim(3)。(这段感觉就是多考虑一个地图成型与否,上面的纯视觉没有提到此事还需要看源码,但是对比加IMU的可以发现加IMU时图3b左边的关键帧多了Ma的关键帧,且不是固定不变的了,看源码时一定要对比这个图。)

    (2)VI welding window BA:关键帧Ka的位姿,速度与偏置及关键帧Ka的前5个时序上的关键帧加入到优化。这些变量与IMU的预积分相关。对于地图Mm,处理类似,关键帧Km的位姿,速度与偏置及关键帧Km的前5个时序上的关键帧加入到优化。Mm地图加入了局部窗口中,但是关键帧被固定了,但在Ma地图中与之相似的关键帧需要被优化(图里画了固定,不太理解,以源码为准吧)。这些关键帧能看到的所有的MapPoints与看到这些MapPoints的关键帧也被优化。所有的关键帧和MapPoints都是通过重投影误差来关联的

D.回环

       回环矫正算法与地图融合算法类似,但情况是两个匹配的关键帧属于同一个地图。同样使用一个welding window,进行重复MapPoint检测,在covisibility和essential graphs 中建立新的连接。接下来是一个位姿图优化,将回环传播到剩余的地图中。在找到mid-term and long-term匹配关系后,最后一步执行全局BA为了找到最大后验估计。

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页