2021.11.19 ORB_SLAM学习

《基于ORB-SLAM的特征匹配与建图方法研究》基础知识提取

视觉里程计

视觉里程计的作用是根据相机捕捉的连续图像实时估计相机自身的运动。而视觉 SLAM方法就是结合了视觉里程计的 SLAM方法。根据视觉里程计如何利用图像信息,可以将其分为特征点法直接法,特征点法的视觉里程计通过从图像中提取点、线、面等特征然后进行匹配来估计相机位姿;直接法的视觉里程计避免了特征提取和描述子计算,可以直接根据图像的像素亮度信息来估计相机位姿。
2007年Klein和Murray[1]提出了第一个基于关键帧的单目视觉SLAM系统PTAM(Parallel Tracking and Mapping),其底层也是使用了图优化的方法。PTAM的突出贡献是将系统SLAM分成了两个线程,一个Tracking线程用于逐帧估计相机的位姿,相当于一个视觉里程计,另一个Mapping线程则负责对地图点的位置和关键帧的位姿进行优化。由于Mapping线程只将关键帧中的特征点加入地图,因此可以满足实时性的要求。
华盛顿大学的Henry等人提出了最早的基于RGB-D相机的SLAM方法[2],该方法使用SIFT算法提取特征点并利用深度数据生成了3D-3D特征点对信息,使得位姿估计问题可以用迭代最近点(Iterative Closest Point,ICP)算法来求解。其在后端采用了TORO(Tree-based network Optimizer)算法进行优化,并实现了三维环境的构建。在2014年的改进版本[3]中作者使用FAST算法和BRIEF算法[4]替代了SIFT算法,并使用稀疏光束平差法(Sparse Bundle Adjustment,SBA)替代了TORO算法,在性能和效率上都得到了提升。
2011年Newcombe提出了基于单目相机的使用稠密直接法的SLAM方法DTAM(Dense Tracking and Mapping)[4],该算法利用了所有像素信息来估计位姿,导致图优化算法的复杂度较高,因此其在
GPU上实现才获得了实时性能。
2013年Engel提出了基于单目相机的半稠密视觉里程计[5],并在2014年提出了基于单目相机的使用半稠密直接法的SLAM方法LSD-SLAM[6]。与DTAM不同,该算法只利用梯度变化明显的像素来估计位姿,大大降低了计算量,使得该系统可以在CPU上实时运行。
2014年Forster提出了基于单目相机的半直接法的视觉里程计SVO[7],所提出的半直接法结合了特征点法和直接法。其主要思想是先通过对特征点周围的图像块使用直接法来估计相机位姿,然后根据位姿预测图像块在当前帧中的位置,最后对估计的位姿和预测的位置进行优化。该算法的效率非常高,实验表明其在无人机系统中可以达到55的帧率。

ORB_SLAM

ORB-SLAM中使用的ORB算法本质上是FAST角点检测算法和BRIEF特征描述算法的结合。
ORB-SLAM系统构建的稀疏特征点地图主要用于辅助定位,一张640*480的图像中约有30万的像素点。

特征检测和特征描述负责从灰度图中提取角点,并计算角点的描述子。主要涉及到特征检测算法和特征描述算法,这部分的算法也是视觉里程计中最耗时的部分。

特征匹配即在两帧图像的角点中查找描述子比较相似的角点对。对于二值描述子,可以通过汉明距离来度量其相似程度,其意义就是两个字符串位置不同的字符的个数;对于非二值描述子可以通过欧式距离来进行度量。最简单的匹配方法是暴力匹配法,即将当前图像上的角点与参考图像上的角点逐个计算汉明距离或欧式距离,然后取距离最小的作为匹配点对。但是当特征点的数量比较多时,暴力匹配方法的运算量将会变得很大。而快速近似最近邻(FLANN)算法在特征点数量极多时非常有效,是目前比较常用的算法。

使用双目或RGB-D相机时,可以根据两张图像计算出特征点的深度信息,或根据深度图直接获取特征点的深度信息,因此特征匹配得到的是3D-3D的匹配对,除了可以用 PnP方法,还可以利用ICP方法来求解相机位姿。
在ORB-SLAM中,系统假设相机是恒速运动的,可以先根据之前相机的运动轨迹来估计当前相机的位姿,然后将上一帧的特征点投影到当前帧,再寻找匹配点对,寻找到足够多的匹配点对后再利用这些匹配点对优化恒速模型估计得到的位姿;若没有查找到足够的匹配点对,则将当前帧与关键帧进行特征匹配,然后再估算位姿。
若当前帧与关键帧之间也没有足够多的匹配点对,则认为跟踪丢失了,ORB-SLAM会尝试进行重定位。即与之前产生的关键帧进行匹配来判断相机是否回到了之前去过的位置,若该方法依然没有成功,则说明跟踪失败。

ORB-SLAM中对关键帧的选择有几点要求:一是关键帧不能过于稠密,即相邻的关键帧之间要有一定的间隔;二是当前帧与其他关键帧需要有一定数量的成功匹配点才可以作为关键帧;三是将与当前帧有最多共视点的关键帧作为参考关键帧,当参考关键帧与当前帧的共视点超过百分之九十时,则认为参考关键帧可以替代当前帧。

后端算法主要包含局部地图构建和回环检测两大模块。局部地图构建负责比较小型的优化,主要任务是将特征点插入到地图中,然后对算法优化相机位姿和地图点,并剔除一些冗余的点。回环检测负责的是比较大型的优化,主要任务是判断是否出现了回环,若出现回环就需要对全局的地图进行优化。后端的算法复杂度比较高,因此与前端区分开来,并且在系统空闲时才运算,这样可以保证整
个SLAM系统良好的实时性。

共视图是一个无向有权图,顶点是关键帧的位姿,边就是位姿与位姿之间的变换关系,边的权值就取决于这两个关键帧中共视的点的数量。由于一张图像中往往有成百上千个特征点,在共视图中忽略了特征点的位置,使得优化位姿时计算变得更加简单。在进行全局优化时,为了限制优化的规模需要尽量减少边的数量,同时又保持顶点之间的连通性,因此使用了本质图,实际上就是共视图的最小生成树(MST)。

通过共视图找到当前关键帧的邻接关键帧(与当前关键帧共视点达二十个以上的),再遍历邻接关键帧查找二级邻接关键帧(与当前关键帧共视点达五个以上的)。然后判断邻接关键帧和二级邻接关键帧中的地图点与当前关键帧中的地图点是否存在重复的,若存在则将其融合。
接着局部最小化重投影误差(Local BA)优化位姿和地图点。利用图优化的方法优化局部的位姿和地图点,在构建的图中,将待优化的变量作为结点,将边作为误差项,构造成最小二乘问题。可以选择的最优化方法有最速下降法、高斯牛顿法、列文伯格-马夸尔特方法等等。

比较简单的方法是将当前关键帧与所有的历史关键帧都进行匹配来寻找回环,但检测次数将随着关键帧的增加而线性增加。有一种朴素的方法是随机抽取几个历史关键帧进行回环检测,但在关键帧增加后抽到回环的几率越来越小,效率依然不高。
Hahnel[8]提出了基于里程计的方法,其思想是系统根据相机运动发现回到了之前的某个位置时才进行回环检测。但是由于存在误差累计,问题正是系统无法发现回到之前的位置,当误差累计比较大时,该方法就失去了作用。
目前最有效的是基于外观的方法,在许多视觉SLAM系统中都有应用,ORB-SLAM也是使用这种方法。该方法就是根据两幅图像的相似性来确定回环关系,并且这种方法与跟踪和建图模块没有关联性,因此回环检测是一个比较独立的模块[9]。

2021.11.19 ORB_SLAM学习_第1张图片 图为SIFT算法的匹配过程

问题

视觉SLAM中视觉里程计的主要任务就是估算出相机的位姿,一种方法是从图像中提取出点线面等特征来进行匹配,再根据成功的匹配点对来估算位姿,另一种方法是根据整张图像的亮度直接进行位姿的估算。相比线、面而言,角点是图像中最稳定的特征,因此基于特征点法的视觉里程计成为了主流的方法。但是特征点法还存在着一些缺点,一是角点的提取和描述子的计算都要耗费大量时间,二是当图像中没有明显特征时容易跟踪失败。

参考文献
[1]Klein G, Murray D. Parallel Tracking and Mapping for Small AR Workspaces[C]//Mixed and Augmented Reality, 2007. ISMAR 2007. 6th IEEE and ACM International Symposium on. IEEE, 2007: 225-234.
[2]Henry P, Krainin M, Herbst E, et al. RGB-D Mapping: Using Depth Cameras for Dense 3D Modeling of Indoor Environments[C]//In the 12th International Symposium on Experimental Robotics (ISER. 2010.
[3]Henry P, Krainin M, Herbst E, et al. RGB-D Mapping: Using Kinect-Style Depth Cameras for Dense 3D Modeling of Indoor Environments[J]. The International Journal of Robotics Research, 2012, 31(5): 647-663.
[4]Newcombe R A, Lovegrove S J, Davison A J. DTAM: Dense Tracking and Mapping in Real-time[C]//Computer Vision (ICCV), 2011 IEEE International Conference on. IEEE, 2011: 2320-2327.
[5]Engel J, Sturm J, Cremers D. Semi-dense Visual Odometry for a Monocular Camera[C]//Proceedings of the IEEE International Conference on Computer Vision. 2013: 1449-1456.
[6] Engel J, Schöps T, Cremers D. LSD-SLAM: Large-scale Direct Monocular SLAM[C]//European Conference on Computer Vision. Springer, Cham, 2014: 834-849.
[7]Forster C, Pizzoli M, Scaramuzza D. SVO: Fast Semi-direct Monocular Visual Odometry[C]//Robotics and Automation (ICRA), 2014 IEEE International Conference on. IEEE, 2014: 15-22.

你可能感兴趣的:(ORB_SLAM,自动驾驶)