ORB-SLAM3: An Accurate Open-Source Library for Visual, Visual-Inertial and Multi-Map SLAM


ORB-SLAM3: An Accurate Open-Source Library for Visual, Visual-Inertial and Multi-Map SLAM

初始化

  首先进行纯视觉的初始化,利用视觉得到的初值,将尺度作为变量,进行IMU初始化,最后进行综合优化。算法可以在2秒内完成初始化,同时在15秒内,利用进一步的BA优化到达非常高的定位精度。

定位

  在相邻两帧进行位姿跟踪,对滑动 窗口进行位姿优化。在视觉跟踪失败时,启用IMU进行跟踪,跟踪失败时间较长后,创建新的子地图,重新开始初始化。

回环检测

  回环检测是相较前作改动最大的地方。分为三个部分,在历史关键帧中找到对应帧,对不同地图进行融合,和在同一地图中进行回环检测。

重定位

  • 通过词袋检测到最接近的三个关键帧作为候选。
  • 根据候选帧的共视关键帧和关键帧能观测到的地图点,构建局部邻域。同时在当前帧和局部领域之间,构建特征匹配。
  • 通过RANSAC计算位姿变换,同时根据内点的数量从候选帧中找出正确的回环。根据得到的位姿变换,在局部领域和当前帧的局部邻域内构建特征匹配。
  • 验证回环的正确性,不再像前作一样需要等待三个回环进行验证,论文认为等待过程会导致创建重复地图。如果当前帧的三张共视图有足够的匹配点,就认为回环有效。否则仍然需要后续帧进行验证。

地图融合

  如果当前帧和回环帧处在不同的子地图中,需要将两个地图进行融合。

  • 将当前帧,回环帧的共视帧和地图点构建为临时窗口。
  • 将当前帧的所在地图的所有帧和地图点加入到回环帧所在的地图中, 合并重复的帧和观测。
  • 在临时窗口进行局部BA,同时在合并的两个地图中进行全局BA。

回环处理

  如果当前帧和回环帧在同一个子地图中,不需要进行地图融合,只需要合并约束同时进行局部和全局BA。论文提到VIO的情况下,关键帧数量太多时,不会进行全局BA来避免巨大的计算量。

实验

  在EuRoC和TUM VI上做了对比试验,可以看到效果还是非常好的。