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线程
来源:CSDN
作者:linusyue
链接:https://blog.csdn.net/plateros/article/details/103613139