ORB_SLAM3的一些分析

前言

在大学这一年多的学习过程中,因为学习和项目、比赛的需要,渐渐学习了ORB_SLAM3,在此将学习到的心得体会逐渐记录下来,不断深化理解ORB_SLAM3。

1.ORB_SLAM3的创新点

  • ORB_SLAM3是第一个基于特征的紧耦合的VIO系统,仅依赖于最大后验估计(包括IMU在初始化时)代码部分对应于MLPNP部分,在IMU的初始化部分引入了map。

  • 系统根据改进召回的新的重定位模块来构建的混合地图,因为这个模块可以让ORB-SLAM3在特征点较少的场景中长期运行:当里程计失败的时候,系统会重新构建地图并将这个地图和原来构建的地图对齐。如果是原有的DBOW2的话需要匹配三个连续的关键帧,而ORB_SLAM3对候选的关键帧第一次就进行几何一致性检测,然后利用三个共视的关键帧进行局部的一致性检验,这种策略提升了召回率,并增强了数据关联,提高了地图准确性,但是这是以显著提高计算成本作为代价的,所以导致ORB_SLAM3在内存不足的情况下无法运行。

  • ORB_SLAM3是第一个能够在所有算法阶段重用所有先前信息的系统。这样的机制就可以在光束法平差的时候用有共视关系的关键帧,即使两帧在时间相差很远,或者来自原来的建图过程,精度有了很大提升。

  • ORB_SLAM3是第一个可以对短期、中期、长期数据进行数据关联的视和视觉惯导的系统。在已知地图的环境中可以无漂移的运行,其中混合地图数据关联-这个可以保证我们进行地图匹配和进行BA优化,这也达到了构建一个地图,然后可以在地图中进行精确的定位的目的。

    短期的数据关联:在最近的几帧中匹配地图元素。如同视觉里程计中做的一样,丢弃过于久远的帧,这会导致有累计的漂移。

    中期的数据关联:匹配相机累计误差小的地图,这也可以用在BA中,当系统在已经建好的地图中运行的时候可以达到零漂移。

    长期的数据关联:利用场景重识别来匹配当前的观测和先前的观测,不用管累计误差而且即使跟踪失败也可以实现,长期的匹配可以利用位姿图优化重新设置漂移,为了更准确也可以利用BA。这是在大场景中精度保证的关键。

  • ORB_SLAM3是可以解决纯视觉或者视觉惯导的完整的混合地图的SLAM系统,Atlas代表的是地图的集合,可以把其中的地图应用到所有的建图过程中,如场景重识别、相机重定位、闭环检测和精确的地图融合,即该系统为增量的SLAM系统,作者在IROS2019的一篇论文中首次提出了Atlas的概念:《ORBSLAM-atlas: a robust and accurate multi-map system》,而ORB_SLAM3添加了visual-inertial的混合地图系统来实现场景重识别。

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

2.ORB_SLAM3的整体框架

整体流程

1.Atlas

Atlas(地图集)由几乎无限数量的地图组成,每个地图都有自己的关键帧、地图点、共视图和生成树。每个地图参考帧固定在建立这个地图时的第一个相机中,并且它独立于ORB中的其他地图(non-active map)参考。传入的视频只更新地图册中的一个地图,为活动地图(active map),其余地图称为非活动地图(non active map)。该图集还包含一个所有地图的唯一DBoW2识别数据库,该数据库存储识别任何地图中任何关键帧的所有信息。好处是可以处理无限数量的子地图,这些子地图又有着唯一的词袋数据库,其包含了所有子地图的关键帧,因此可以进行高效的多地图位姿识别,并可以建立多映射的算法,当新的子地图创建时,可以将创建的新的映射与原来的映射合并,也可以将两个地图与一个公共地图进行无缝合并,合并后的新映射代替这里原有的映射,这样可以防止比如在跟踪时轨迹突然出现断点,断点前后的地图进行合并,还可以防止相机位姿不确定性导致的BA错误,提高稳定性。

2.跟踪线程

tracking部分与Atlas部分相配合,决定当前帧是否为关键帧,为Atlas输送新的关键帧,并且对该帧计算最小化重投影误差,VI模式中,通过IMU残差计算本体的速度与IMU偏差。如果跟踪丢失,尝试在Atlas所有地图中重定位,如果成功那个地图将成为活动的。如果几帧过后失败,则重新开始一个新的地图,这也使得ORB_SLAM3系统中有着非常多的子地图,并且也有着对于子地图进行融合的操作。

3.局部地图线程

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

4.回环与地图融合线程

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

5.在monocular-IMU情况下的程序流程

因为目前学习相机-IMU情况下进行定位以及建立地图,系统的流程图总结如下

在这里插入图片描述
这是第一次写SLAM的文章,很多地方还是借鉴了其他博主的优秀之处,主要还是对于论文整体的理解和翻译,我也会进一步更新自己ORB_SLAM3的理解,希望可以真正吃透SLAM技术,变得更加优秀。