计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(三)Local Mapping线程

书接前文,Local Mapping线程(Local Mapping)。

开源代码:https://github.com/raulmur/ORB_SLAM2.git

参考文献:
[1] ORB-SLAM: a Versatile and Accurate Monocular SLAM System
[2] ORB-SLAM2: an Open-Source SLAM System for Monocular, Stereo and RGB-D Cameras
[3] Double Window Optimization for Constant Time Visual SLAM
[4] Bags of Binary Words for Fast Place Recognition in Image Sequences
[5]ORB: an efficient alternative to SIFT or SURF

系统架构

计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(三)Local Mapping线程

论文[2]中给出的算法框架图。这一篇写Local Mapping。

Local Mapping 线程

 

计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(三)Local Mapping线程

Tracking线程将新的Keyframe传给Local Mapping线程。此线程使用Local BA优化Local地图与相机位姿。

Local Map由两个集合K1, K2组成。K1是与当前帧观测到同一地图点的集合。K2是covisibility graph中与K1相连的集合。

插入关键帧

计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(三)Local Mapping线程

Local Mapping线程得到关键帧后,首先更新地图。计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(三)Local Mapping线程 为新插入的关键帧,计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(三)Local Mapping线程为Local Map中的关键帧。

计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(三)Local Mapping线程

  • 更新Covisibility Graph。添加新的节点,如果与其他的关键帧存在公共特征点,创建边。
  • 更新Essential Graph(Spinning tree)。与公共特征点最多的关键帧建立连接。
  • 计算计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(三)Local Mapping线程的词袋。

Recent Map Points Culling

计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(三)Local Mapping线程

检查之前“新”进入地图的特征点(Map point),去掉一批不稳定的点。

计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(三)Local Mapping线程

  • 当一个新的Map Point创建后,在紧跟其后的三个关键帧插入的时候 ,都需要通过一个额外的"新人关卡"。该点需要在预测帧中的25%以上跟踪成功,才能通过这个检查。否则就删除这个点。
  • 一旦地图点通过了测试,就成立了老伙计了。每次插入关键帧时就可以绕过这个关卡。 只有在可以观测到该地图点的关键帧少于三个时,才会将其删除。这种事情通常在两种情况下发生。第一,有关键帧被删除的时候。第二,Local BA去外点时候。

创建新的地图点(New Map Point Creation)

计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(三)Local Mapping线程

新的关键帧插入,因此需要创建新的地图点(这些地图点在随后紧接着的三次关键帧插入时,都需通过上面的"新人关卡"。

计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(三)Local Mapping线程

  • 地图点(Map point)的属性包括世界坐标系的坐标,ORB描述符,观测方向和观测距离。
  • 如上图,将计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(三)Local Mapping线程上的特征点与其他帧做匹配。K1为观测到相同特征点的关键帧集合,K2是Covisibility Graph中与K1连接的关键帧集合。K1, K2构成了Local Map。

局部BA (Local BA)

计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(三)Local Mapping线程

跟踪线程做了Motion-only BA,此时在Local Mapping线程内执行Local BA。

计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(三)Local Mapping线程

  • 上面的公式里面计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(三)Local Mapping线程指的是K1集合,计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(三)Local Mapping线程指的是计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(三)Local Mapping线程里的公共地图点,计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(三)Local Mapping线程为之前定义的K2集合。

  • 计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(三)Local Mapping线程为投影误差,与Motion-only BA的定义相同。

  • Motion-only BA只优化当前帧的位姿(计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(三)Local Mapping线程, 计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(三)Local Mapping线程)而Local BA优化K1集合所有关键帧的位姿(计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(三)Local Mapping线程, 计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(三)Local Mapping线程) 与地图(计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(三)Local Mapping线程)。

  • 下图为一个简单示意。右上方框内是被优化对象,包括K1集合里的Keyframe(位姿)以及他们能观测到的地图点。

  • K2集合的Keyframe只是作为约束条件参与了代价计算,其本身并没有优化。

计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(三)Local Mapping线程

Local KeyFrame Culling

计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(三)Local Mapping线程

为进一步提高系统性能,有必要限制一下Keyframe的数量。如果局部地图里的某一帧,他的可观测地图点的90%,可以被其他三个关键帧观测到,那么就可以删掉他。这个操作后续还会引起一系列的连锁反应,如冗余地图点的去除等。

总结一下,Local Mapping线程接到新插入的Keyframe,通过局部BA优化局部地图的地图点和相应关键帧的位姿。过程中,删除冗余关键帧和地图点,降低地图的复杂度,提升了系统性能。

下一篇:Loop Closing线程与全局BA                  上一篇: 跟踪线程