ORB-SLAM,这个在视觉SLAM领域家喻户晓的名字,江湖地位不用多说,看看高博的《视觉SLAM十四讲》和各家SLAM面经就知道了!ORB-SLAM是一个完整的SLAM工程,源码在GitHub上已经有4.4K+Star了,不得不给西班牙小哥献上膝盖。
最近把它的论文重温了一遍,再配上源码,那感觉简直不要太酸爽。网上已经有各路大神把ORB-SLAM“剥皮抽筋”,今天我也鼓起勇气对它动刀了,这里就它的一些独到特性做一下总结吧。
1 系统框架
ORB-SLAM主要由三个并发进程组成:跟踪、局部建图和回环检测,下图是论文中给出的系统框图,很直观地展现了各模块的功能和步骤。
-
Tracking是这里面的主进程,它负责对每一帧相机的定位和跟踪,通过特征匹配对相机在正常运作和跟丢的情况下进行位姿估计和优化。
-
Local Mapping负责插入和删除新老关键帧和地图点,并对局部的关键帧和地图点进行局部优化。
-
而Loop Closing则对每一个新的关键帧进行回环搜索,一旦检测到回环,就通过计算相似变换(Sim3)将回环对齐和融合,并在Essential Graph上进行位姿图优化。
作者在论文中提到,ORB-SLAM的贡献或者说特性主要包括以下几点:
- 系统的所有任务都使用相同的特征点
- 鲁棒的初始化步骤
- 采用共视图和本质图
- 实时的相机重定位
- 关键帧和地图点的删增策略
ORB-SLAM每一个部分展开都错综复杂,一篇文章三言两语很难总结到位,所以这里先对上述的5个主要特性简单整理一下,如有错误欢迎指出。
2 特征提取
ORB-SLAM,顾名思义,它提取的是ORB特征点。为什么在茫茫特征中,作者却选择用ORB特征点呢?因为要想达到实时的效果,用特征点法的SLAM系统必须保证,特征提取的速度一定得足够快。
我们熟知的SURF和SIFT特征点,虽然效果很好,可是每张图片提取SURF要花217.3ms,提取SIFT更是要花5228.7ms,这让机器人的小身板怎么承受得住!而用ORB就很舒服了,据《ORB: An efficient alternative to SIFT or SURF》这篇论文给出的数据,每张图片提取ORB特征只需要15.3ms,这样看来实时操作完全没问题。
ORB全称是Oriented FAST and Rotated BRIEF,这里我一直有个疑问,为啥FAST没有纳入简称中??ORB作者在论文中说:
“Our proposed feature builds on the well-known FAST keypoint detector and the recently-developed BRIEF descriptor; for this reason we call it ORB. Both these techniques are attractive because of their good performance and low cost.”
所以呢?为啥没有人家FAST的名号[捂脸]!当然这是题外话了。从名字上也能看出来,ORB是给FAST角点加上了方向,而且使BRIEF描