ORB SLAM2系列的最后一篇,Loop closing线程与全局BA。

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

前三篇链接:系统架构跟踪线程Local Mapping线程

参考文献:
[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(四)Loop closing线程与全局BA

论文[2]中给出的算法框架图。这一篇写Loop Closing线程与全局BA线程。

计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(四)Loop closing线程与全局BA

Loop Closing 线程

计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(四)Loop closing线程与全局BA

当机器人的轨迹完成一个环的时候,称为Loop closure。Loop closing线程需要首先检测到闭环事件,之后优化Pose Graph,启动全局BA线程,优化整个地图和关键帧。

Loop Detection

Loop Closing算法使用DBoW2实现回环的检测。

词袋(Bag of Words)

DBoW2算法的大体工作流程,

1. 为一组训练图像提取特征

计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(四)Loop closing线程与全局BA

2. 特征分类并创建词典。

计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(四)Loop closing线程与全局BA

使用K-means聚类,构成由Word{Wi}组成的词典。

3. 量化每幅图片,为图片的特征寻找词典内最接近的words,生成直方图。

计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(四)Loop closing线程与全局BA

4. 反向映射到图像(documents),生成Inverted Index。

计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(四)Loop closing线程与全局BA

5. 测试图像通过Inverted index在词典中快速匹配。

计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(四)Loop closing线程与全局BA

ORB SLAM中的回环检测

计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(四)Loop closing线程与全局BA

  • 计算计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(四)Loop closing线程与全局BA与其Covisibility Graph的邻居的BOW相似度计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(四)Loop closing线程与全局BA
  • 在Recognition database中排除相似度在计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(四)Loop closing线程与全局BA以下的关键帧。
  • 排除与计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(四)Loop closing线程与全局BA在Covisibiilty直接连接的关键帧。
  • 获得Loop candidiates。
  • 在Loop candidates中挑选最合适的Loop。

计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(四)Loop closing线程与全局BA

Loop Correction

计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(四)Loop closing线程与全局BA

  • 融合新插入的关键帧与Loop,在Covisibility Graph中建立新的边。
  • 优化Essential Graph。

计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(四)Loop closing线程与全局BA

全局BA

计算机视觉大型攻略 —— SLAM(4) ORB SLAM2(四)Loop closing线程与全局BA

Loop closing线程最后启动全局BA线程,做最后的优化。

  • Full BA可以看做Local BA的特例。 
  • 优化所有的关键帧与地图点。
  • 全局优化的性能比较差,因此单独创建一个线程,异步操作。如果在此线程优化期间,发现了新的Loop,那么需要停止当前的优化,为新的Loop从头优化。

上一篇: Local Mapping线程

相关文章: