《论文笔记》ORB-SLAM:a Versatile and Accurate Monocular SLAM System

作者:Raúl Mur-Artal*, J. M. M. Montiel, Member , IEEE, and Juan D. Tardós, Member , IEEE,

单位:西班牙萨拉戈撒大学

期刊:IEEE TRANSACTIONS ON ROBOTICS(二区)

时间:2015

摘要:本文提出的ORB-SLAM算法是一个基于特征点的单目SLAM系统,可以实时运行在狭小的室内环境和宽阔的室外环境中。该系统对剧烈运动具有鲁棒性,支持宽基线的闭环检测和重定位,以及全自动初始化。该系统是我们基于近年来的优秀算法重新设计的一个全新算法,其中SLAM的所有环节:跟踪,构图、重定位和回环检测都采用了相同的特征,并选用合适的特征点和关键帧选取策略,使系统具有很好的鲁棒性,生成精简、可追踪的地图。只有当场景内容改变时,地图大小才会增加,因此可以支持在同一个场景下的持续定位。在文章最后,我们选择公共数据集中的27个图像序列进行了测试。相比目前最新的单目SLAM算法,本文提出的ORB-SLAM性能优势明显。为了使更多人获益,公布了源码。

(wide baseline loop closing:baseline可以理解为两个位姿间的距离;wide baseline loop closing就是当前帧与检测到的闭环帧直接的平移t比较大。)

具体实现:

1.地图自动初始化

地图初始化的目的是计算两帧图像之间的相对位姿来三角化一组初始的地图点。

本文算法提出并行计算两个几何模型,一个是面向平面视图的单应性矩阵,另一个是面向非平面视图的基础矩阵。然后,采用启发式的方法选择模型(先按照参考文献方法提取8种运动假设,再把八个解全计算一遍重投影误差,取误差最小的解),并使用所选的模型从两图像的相对位姿中对地图点进行重构。

本文算法只有当两个视图之间的视差达到安全阈值时,才进行地图初始化。如果检测到低视差的情况或已知两视图模糊的情况,则为了避免生成一个有缺陷的地图而推迟初始化。

2.跟踪

ORB特征提取:根据图像分辨率的不同,提取不同数量的特征点。若提不够则降低阈值。这样虽有一些不太准的点,但可以保证数量。

通过前一帧图像估计相机初始位姿:如果上一帧图像跟踪成功,就用匀速运动模型来预测相机当前位置,匹配地图点。如果没有找到足够的匹配点对(比如运动模型失效,非匀速运动),就加大搜索范围,搜索地图点附近的点在当前帧图像中是否有匹配点。然后通过寻找到的对应匹配点对优化当前时刻的相机位姿。

通过全局重定位来初始化位姿:如果扩大了搜索范围还跟踪不到特征点(那么运动模型已经失效),则计算当前帧图像的词袋向量,并利用BoW词典选取若干关键帧作为备选匹配帧(这样可以加快匹配速度);然后,在每个备选关键帧中计算与地图云点相对应的ORB特征,如第三部分E节所述。接着,对每个备选关键帧轮流执行RANSAC迭代求解尝试用PnP算法[41]计算当前帧位姿。如果能找到一个涵盖足够多有效点的姿态,就对该姿态进行优化,搜索该关键帧对应的更多匹配云点。最后,基于所有找到的匹配点对相机位置进行进一步优化,如果有效数据足够多,跟踪程序将继续执行。

跟踪局部地图:一旦获得了相机初始位姿和一组初始特征匹配点,就可以将更多的地图点投影到图像上以寻找更多的匹配点。为了降低大地图的复杂性,只投影局部地图。该局部地图包含一组关键帧K1,它们和当前关键帧有共同的地图点,还包括在covisibility graph中与关键帧K1相邻的一组关键帧K2。这个局部地图中还有一个参考关键帧Kref∈K1,它与当前帧具有最多的共享地图点(K1——一级相邻,K2——二级相邻,见下方笔记3)。在当前帧中对K1, K2中均可见的每个地图云点进行搜索。

3.局部地图构建

这部分包括了关键帧和地图点的筛选。在跟踪阶段是尽可能多地插入关键帧的,以保证能跟踪上,在这一阶段就进行了严格的关键帧和地图点筛选。

4.回环检测

确定回环也是非常严谨的,连续三次检测成功才认为是闭环成功,因为闭环很重要。确定回环后,计算从当前帧到回环帧的相似变换,以获得回环误差。之后进行回环融合和本质图优化。

 

结论:本文中,我们提出了一个新的单目SLAM系统,并详细介绍了其组成模块,并使用公共数据集对其性能进行了全方位的测试。实验结果显示,我们的系统可以处理室内与室外的图像序列,能够用于汽车、机器人和手持设备上。其定位精度在室内小场景中约为1厘米,室外大场景的应用是几米(前提是尺度与真实轨迹对齐)。

PTAM[4]被认为是目前最精准的单目实时SLAM。PTAM后端是BA优化,这是离线SFM(从运动到结构)问题[2]的经典解法。PTAM和Mouragnon[3]早期作品的主要贡献是将BA算法引入到机器人SLAM框架下,并证明了其良好的实时性。而本文的主要贡献是将PTAM算法的适用性进一步扩展,使其可以应用于原来不可应用的场景下。为了实现这一目标,我们从头设计了一种新的单目SALM系统,引入了新的想法和算法,同时也结合了最近几年的优秀方案,比如[5]中的闭环检测,[6],[7]中提出的的闭环检测程序和covisibility graph,[37]中提出的g2o优化框架以及ORB特征[9]。就我们所知,没有哪种方案能够在如此多的情况下依然还能达到ORB_SLAM的精度。ORB_SLAM方法是目前为止最可靠最完整的单目SLAM系统。我们提出的新的关键帧生成和删除策略,允许每隔几帧就创建一个关键帧,当关键帧冗余时就丢弃。这样灵活的构图方式在外界条件很差的情况下可以保证系统正常运行,比如相机作纯旋转运动或快速移动。当算法在相同场景下运行时,地图在只有拍摄到新内容的情况下才会增长,可以从我们的长期构图结果中看到这个特性。

最后,我们还展示了ORB特征具有很好的识别能力,可识别剧烈视角变换情况下的场景信息。此外,它们的提取和匹配速度很快(不需要多线程或GPU加速),能够满足跟踪和建图的实时精度。

 

未来工作:我们系统的精度可以通过结合无限远点跟踪来进一步增强。这些点在视差足够大的情况下是看不到的,也没有包含在本文算法构建的地图中,但对相机的旋转非常有用。

另外一种方法是将稀疏地图更新到一个更加稠密的地图。得益于我们的关键帧选择机制,关键帧组成了一个具有高精度位姿和丰富的covisibility信息的紧凑地图。所以,ORB-SLAM稀疏地图是一个非常优秀的初始估计框架,比稠密地图更好。这个方向的首次尝试在论文[47]中有详细描述。

 

笔记:

1.用一句话来描述BA:BA的本质是一个优化模型,其目的是最小化重投影误差。详见https://blog.csdn.net/OptSolution/article/details/64442962

2.基础矩阵、本质矩阵、单应矩阵。

https://zhuanlan.zhihu.com/p/159194599

3.Covisible graph和Essential graph

Covisible graph就是一种结构,提供了更多的关系,而不是地图。

Essential graph只保留了联系紧密的边,如共视图需要15个共视地图点构成边,本质图需要100个共视地图点构成边。

Covisible graph有什么用?就是一个记录作用,这样在localBA时只拿出来这些共视KF,组成一个局部地图,优化这些KF可以减小计算量。至于这个图中的权重在优化时并没有用到,因为他优化时根本就没有帧间边。

4.BA用于前端求解PNP,和后端BA中的差别在于:

PNP问题只包含两帧图像的位姿,而后端中的BA则包含多个图像的位姿。

5.作者很看重关键帧的生成和剔除。自己跑如果效果不好的话,看能不能从这儿改进。

 

备注:本文翻译版https://blog.csdn.net/qq_38373843/article/details/90755887

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值