10

一文详解ORB-SLAM3中的地图管理

 3 years ago
source link: https://mp.weixin.qq.com/s/1IP6QXBEFeWbKGSzydtz6Q
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

点击上方“3D视觉工坊”,选择“星标”

干货第一时间送达

640?wx_fmt=jpeg

想要理解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

论文打包下载:在公众号「3D视觉工坊」,后台回复「地图管理」,即可直接下载。

备注:作者也是我们「3D视觉从入门到精通」特邀嘉宾:一个超干货的3D视觉学习社区本文仅做学术分享,如有侵权,请联系删文。下载1在「3D视觉工坊」公众号后台回复:3D视觉即可下载 3D视觉相关资料干货,涉及相机标定、三维重建、立体视觉、SLAM、深度学习、点云后处理、多视图几何等方向。下载2在「3D视觉工坊」公众号后台回复:3D视觉github资源汇总即可下载包括结构光、标定源码、缺陷检测源码、深度估计与深度补全源码、点云处理相关源码、立体匹配源码、单目、双目3D检测、基于点云的3D检测、6D姿态估计源码汇总等。下载3在「3D视觉工坊」公众号后台回复:相机标定即可下载独家相机标定学习课件与视频网址;后台回复:立体匹配即可下载独家立体匹配学习课件与视频网址。

重磅!3DCVer-学术论文写作投稿 交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流、ORB-SLAM系列源码交流、深度估计等微信群。

一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

640?wx_fmt=png▲长按加微信群或投稿

640?wx_fmt=jpeg

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的知识点汇总、入门进阶学习路线、最新paper分享、疑问解答四个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款640?wx_fmt=jpeg 圈里有高质量教程资料、可答疑解惑、助你高效解决问题觉得有用,麻烦给个赞和在看~640?wx_fmt=gif


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK