一起研究ORB-SLAM(一)---结构和入口

转载自: 一起研究ORB-SLAM(一) http://www.wearemonkey.com/read.php?tid=101&fid=18

最近一直在研究ORB-SLAM,目前研究的正在进行总结,就发到这个网站上了,希望大家能给提提意见,作为一个刚毕业的计算机小硕,从一点没听过这个,到开始入手,真的是很困难的,我想大家新手的时候应该也是如此吧,希望我的理解能帮助大家!!我会在这里不断的更新我学习过程中对ORBSLAM的理解,希望大家多多支持。 



直接进入正题,我想能搜索到这篇文章的同学们一定对SLAM不太陌生了,而我接下来就为大家详细介绍一下orb-SLAM,首先介绍下他的流程。主要参考的论文是一下三篇,希望理解的同学请多多参看: [Monocular] Raúl Mur-Artal, J. M. M. Montiel and Juan D. Tardós. ORB-SLAM: A Versatile and Accurate Monocular SLAM System. IEEE Transactions on Robotics, vol. 31, no. 5, pp. 1147-1163, 2015. (2015 IEEE Transactions on Robotics Best Paper Award). PDF.  
[Stereo and RGB-D] Raúl Mur-Artal and Juan D. Tardós. ORB-SLAM2: an Open-Source SLAM System for Monocular, Stereo and RGB-D Cameras. ArXiv preprint arXiv:1610.06475 PDF.  
[DBoW2 Place Recognizer] Dorian Gálvez-López and Juan D. Tardós. Bags of Binary Words for Fast Place Recognition in Image Sequences. IEEE Transactions on Robotics, vol. 28, no. 5, pp. 1188-1197, 2012. PDF  

下图是 ORB-SLAM 的流程图,是从论文里头扒出来的,主要是 ORB-SLAM 的执行流程。  
 

ORB-SLAM 中执行共分为三个线程进行,分别是图上所述的三个, tracking local mapping  loop closing  ,这三个线程分别存放在对应的三个文件中,分别是 Tracking.cpp LocalMapping.cpp   LoopClosing.cpp 文件中,如果大家想查看对应的文件,请直接打开进行查看。  
首先按照这张图片基本介绍下三个线程的过程  
Tracking:  
首先传入一张图片进入其中,之后进行 ORB 特征的提取,之后初始化姿态,并做出估计,或是进行重定位,然后继续宁局部帧的匹配,看看是否可以被认为是关键帧,最后记确定该帧是关键帧,加入队列中去。  
  
LocalMaping:  
从关键帧队列中抽取关键帧进行匹配,进行最近的关键的点的挑选,也就是说该过程是通过两种图片,选取共同的特征点并且对特征点按照一定的规则进行筛选,后计算出前后变化的状态,计算出当前的姿态,从而计算出自己新的位置信息,然后继续局部的 BA 优化过程,之后对局部关键帧进行挑选。  
LoopMapping  
这一部分主要是进行回环检测,该过程共分为两个过程,分别是回环探测和回环优化,绘画探测首先是对帧是否与其他帧有回环进行回环的探测,主要用的工具是 Bow 进行检测,然后通过 Sim3 算法继续尺度的估计,后继续回环校正,主要是回环的融合和图形的优化。  
ORB-SLAM的入口  
ORB-SLAM 的入口点在 System.cpp 的文件中  
在入口的程序中,共分为三个中输入的形式,分别双目的, RGBD( 深度 ) 和单目的,总体流程可分为如下几个方面:  
输入图像 à 转化为灰度图像 à 构造 Frame à Tracking 开始  
基本的流程如下图所示:

  
其中在输入图像过程中,分为三种的输入形式,分别是双目,深度和单目     然后转化为灰度图像,在构造帧的过程中,双目中的 Frame 过程中,会有一个双目的立体匹配的过程,而单目在未经初始化过程的时候,特征点的数目要比已经初始化过城中的数目的二倍,主要由于初始化过程中需要的做的事情比较多,比如说是姿态估计,尺度比例确定等。。。  
  
  
Frame.cpp 介绍  
该过程中共分为两个过程,是对双目和 RGBD 进行立体匹配,由于单目的求解逆深度的过程较为复杂,所以单独进行处理。  
双目立体匹配:(已经完成极限校正     
首先以左目为基准,建立一个带状的搜索表,从而限定搜索区域  
然后通过描述子进行特征点匹配,得到每个特征点的最佳匹配点 scaledR0  
然后通过 SAD 划窗得到匹配修正量 bestincR 
bestincR-1 dist )( bestincR-1 dist )( bestincR-1 dist )三点拟合抛物线          得到亚像素修正量          deltaR 
最终匹配点的位置可以表示为 scaledR0+bestincR+ deltaR 
  
RGBD 相机的匹配过程则相对简单,可以通过下图的方式继续校准:

图片:RGBD匹配.png

你可能感兴趣的:(ORB-SLAM)