计算机视觉大型攻略 —— 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

系统架构

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

Local Mapping 线程

 

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

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

插入关键帧

Local Mapping线程得到关键帧后,首先更新地图。K_{i} 为新插入的关键帧,K_{c}为Local Map中的关键帧。

  • 更新Covisibility Graph。添加新的节点,如果与其他的关键帧存在公共特征点,创建边。
  • 更新Essential Graph(Spinning tree)。与公共特征点最多的关键帧建立连接。
  • 计算K_{i}的词袋。

Recent Map Points Culling

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

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

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

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

  • 地图点(Map point)的属性包括世界坐标系的坐标,ORB描述符,观测方向和观测距离。
  • 如上图,将K_{i}上的特征点与其他帧做匹配。K1为观测到相同特征点的关键帧集合,K2是Covisibility Graph中与K1连接的关键帧集合。K1, K2构成了Local Map。

局部BA (Local BA)

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

  • 上面的公式里面K_{L}指的是K1集合,P_{L}指的是K_{L}里的公共地图点,K_{F}为之前定义的K2集合。

  • E_{kj}为投影误差,与Motion-only BA的定义相同。

  • Motion-only BA只优化当前帧的位姿(R, t)而Local BA优化K1集合所有关键帧的位姿(R_{l}, t_{l}) 与地图(X^{i})。

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

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

Local KeyFrame Culling

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

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

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值