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

余生颓废 提交于 2019-12-19 21:51:10

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

系统架构

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

Loop Closing 线程

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

Loop Detection

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

词袋(Bag of Words)

DBoW2算法的大体工作流程,

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

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

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

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

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

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

ORB SLAM中的回环检测

  • 计算

    与其Covisibility Graph的邻居的BOW相似度

  • 在Recognition database中排除相似度在

    以下的关键帧。
  • 排除与

    在Covisibiilty直接连接的关键帧。
  • 获得Loop candidiates。
  • 在Loop candidates中挑选最合适的Loop。

Loop Correction

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

全局BA

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

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

上一篇: Local Mapping线程

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!