新闻  |   论坛  |   博客  |   在线研讨会
一文详解ORB-SLAM3中的地图管理
计算机视觉工坊 | 2021-01-11 11:44:07    阅读:626   发布文章

想要理解ORB-SLAM3的地图管理,仅看ORB-SLAM3的论文[3]是不够的,因为很多细节出现在之前的ORB-SLAM1/2[1][2],以及ORB-Atlas[4]这几篇论文中。从头到尾搞清楚这些论文中采用的地图管理方法,就能理解ORB-SLAM3中的内容。本文介绍这几篇论文中涉及地图的部分,并不介绍特征跟踪、关键帧创建等内容。作者能力有限,在整理时难免出现疏漏,望读者以原论文为准。

一、ORB-SLAM1

首先介绍ORB-SLAM1中的一些基本概念。

1.基本概念

·共视图 Covisibility Graph:

共视图是一个加权无向图,图中每个节点是相机的位姿,如果两个位姿的关键帧拍摄到的相同关键点的数量达到一定值(论文设定为至少15个),则认为两个关键帧具有共视关系。此时两个节点之间便生成了一条边,边的权重与共视点的数量有关。

·生成树 Spanning Tree:

Spanning Tree用最少的边连接了所有的关键帧节点(即共视图中所有的节点)。当一个关键帧被加入到共视图当中后,这个关键帧与共视图中具有最多观测点的关键帧之间建立一个边,完成Spanning Tree的增长。

·Essential Graph:

根据共视关系得到的共视图是一个连接关系非常稠密的图,即节点之间有较多的边,而这过于稠密而不利于实时的优化。于是构建了Essential Graph,在保证连接关系的前提下尽可能减少节点之间的边。Essential Graph中的节点依旧是全部的关键帧对应的位姿,连接的边包含三种边:Spanning Tree的边、共视图中共视关系强(共视点数量超过100)的边、以及回环时形成的边。

2.具体的使用

·利用局部地图进行跟踪

相机跟踪时利用了局部地图。具体来说,先从所有关键帧中选择与当前帧有相同特征点的关键帧集合,之后提取中每一个关键帧的共视帧的集合,之后利用两个集合的关键帧的信息进行相机位姿的跟踪

·回环检测

回环检测共包含四个部分:选择候选帧、计算变换、回环融合与Essential Graph优化。

1) 选择候选帧

当每次获得一个关键帧时,都会判断是否与之前的关键帧发生了回环。采用bag of words方法进行判断是否是相同的观测场景,论文采用了一个小技巧就是首先判断了当前关键帧与其共视帧的匹配得分,其他关键帧如果低于这个得分不会判定为回环。如果某个关键帧与当前帧的匹配分数达到了阈值,还需要判断共视的3个关键帧是否也满足回环的条件。只有都满足时才会判定发生了回环。

2) 计算变换

通过3D地图点计算回环时,当前帧与回环帧之间的SE(3)变换。

3) 回环融合

回环融合时,完成了以下工作:将重复的地图点融合并更新共视图;通过,纠正当前关键帧与当前帧相连关键帧的位姿,并进行回环帧的地图点与当前帧地图点的融合;更新融合后的共视图

4) Essential Graph的优化

通过优化,将回环得到的误差均匀分配到整个Essential Graph当中,纠正建图过程中积累的误差。

二、 ORB-SLAM2

ORB-SLAM2与1相比,主要的改动有:BoW字典有所变化,以及在回环检测Essential Graph优化后,新增了一个全局的BA进一步优化。总得来说,在地图部分,和1相比就是多了一个全局优化而已。具体可参考ORB-SLAM2的github下的issue(https://github.com/raulmur/ORB_SLAM2/issues/333)

三、ORB-Atlas

Atlas翻译为“地图集”,即管理着一系列的子地图(sub-map),这些子地图共用同一个DBoW数据库,使得能够实现重定位回环等操作。

当相机在正常跟踪状态,所生成关键帧所在的地图称为“活动地图(active map)”。如果跟踪失败,首先将进行重定位操作寻找地图集中对应的关键帧,如果依旧失败,则重新创建一个新的地图。此时旧的地图变成了“非活动地图(non-active map)”,新的地图作为活动地图继续进行跟踪与建图过程。在跟踪过程中,当前相机必然是位于活动地图当中,可能存在零或多个子地图。

每次插入关键帧时,都与完整地图的DboW数据库进行匹配。如果发现了相同的场景,且两个关键帧同时位于活动地图,则意味着发生了回环,便按照回环的方式进行融合处理;如果匹配上的关键帧位于非活动地图,则需要将两个子地图进行拼接,这便是ORB-Atlas的创新之处。

地图无缝融合时,当前活跃的地图吞并对应的非活跃地图。通过一系列步骤将非活跃地图的信息补充到当前活跃地图。具体步骤如下:

1. 检测:首先由重识别模块检测出当前关键帧Ka与匹配上的待吞并关键帧Ks,并获取两个子地图当中与匹配上的两个关键帧具有共视关系的关键点和关键帧。

2. 位姿计算:通过Horn+RANSAC方法初步计算两个关键帧之间的变换关系,之后将待吞并地图的地图点通过这个变换投射到当前关键帧Ka上,再利用引导匹配的方法获得更丰富的匹配并进行非线性优化,获得精确的变换。

3. 地图点合并:将被吞并地图的关键点变换到当前关键帧位姿下,融合重复的地图点。之后将两个地图的关键帧融合,重新生成spanning tree和共视图。

4. 衔接区域的局部BA优化:融合后与Ka具有共视关系的关键帧参与局部BA优化,为避免gauge freedom,固定之前活跃地图中的关键帧而移动其他的关键帧。优化完成后再次进行地图点的合并与spanning tree/共视图的更新。

5. 完整地图的位姿图优化:对整个合并后的地图进行位姿图优化。

小结

Atlas的方法使得在跟踪丢失时能够重新创建一个地图,并在回到原有位置时利用原地图的信息,使得SLAM更加鲁棒。Atlas的方法也用在了ORB-SLAM3中

四、ORB-SLAM3

ORB-SLAM3中的地图,大致上采用了ORB-SLAM1/2和ORB-Atlas的方法完成了重定位、回环和地图融合。

1. 重定位

ORB-SLAM3在重定位的策略上做了一些改进。为了保证重定位不出错,重定位常常设置了严苛的条件,保证高精准率而识别率较低。旧的方法(ORB-SLAM1/2)中当3个关键帧完全匹配上后才判定为重定位成功。然而作者发现,三个关键帧经过了很长的时间。主要改进是,当当前关键帧与数据库的关键帧匹配上后,检测与当前关键帧具有共视关系的关键帧是否也能够匹配,如果可以则判定为重定位成功;否则才继续使用接下来的关键帧进行判定。

2. 视觉地图融合

视觉地图融合方式与ORB-Atlas的大致相同,对融合的区域起了一个新的名字叫做“衔接窗口(welding window)”。同时指明在衔接后进行完整位姿图融合时,衔接窗口的关键帧固定以保证不会出现gauge freedom。

3. 闭环

闭环检测部分与ORB-Atlas的基本相同。

参考文献

[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]. ORB-SLAM3: An Accurate Open-Source Library for Visual, Visual-Inertial and Multi-Map SLAM

[4] ORBSLAM-Atlas: a robust and accurate multi-map system

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客