ORB-SLAM2课程介绍 及 论文详解
https://appafc4omci9700.h5.xiaoeknow.com/v1/course/video/v_604dce0ae4b0e51d821de16c?feature=&is_redirect=1&share_from=u_60605fd13b251_jsBsAc9HF0&type=2
一、ORB-SLAM2框架
1. 三个线程:TRACKING跟踪、LOCAL MAPPING局部建图、LOOP CLOSING闭环。
· TRACKING (尽可能多放关键帧和地图点进来,宽松)
--> 预处理
--> 三个重要的跟踪方式,用三种方式中的一种或者一种失败了用另一种做初始的跟踪
(对应代码:(位姿预测)参考关键帧跟踪/(运动模型)恒速模型/(重定位跟踪))
-->用局部地图做一个更精确的跟踪(只针对某一帧(位姿)做BA)
-->生成关键帧(根据结果判断是否插入关键帧)
· LOCAL MAPPING
--> 插入关键帧
--> 筛选地图点(严格,地图点剔除)
--> 只用关键帧生成新的地图点(比较稳定)
--> 局部BA,针对几帧BA,不仅对位姿还对地图点做BA
--> 局部关键帧剔除
· LOOP CLOSING
--> 所有关键帧放在数据库里(绿色Recognition Database)
--> (闭环检测)
每来一个帧,就查询数据库(是否已经闭环),如果确认闭环,则计算SE3(需要用SE3矫正)
--> (闭环融合/矫正)
用当前关键帧和闭环关键帧,有漂移,用SE3做矫正,位姿融合
优化本质图
2. 其他
· 全局BA(确认闭环后)
full BA、更新地图
· MAP地图(一直维护着一个MAP)
地图点(三维点),关键帧,共视图,扩展树
· PLACE RECOGNITION(位置识别)
用词袋做的
二、ORB-SLAM1论文阅读-2015
概述(摘要)
1)基于特征的单目SLAM系统,实时地,复杂运动情况下鲁棒,宽基线的闭环(wide baseline loop closing,即使t距离比较大,也能检测到闭环),重定位,自动初始化。所有地方都是使用的ORB特征,效率高。
2)tracking跟踪,mapping建图,relocalization重定位,loop closing闭环检测。
3)选择关键帧和地图点的时候,选择策略出色鲁棒性,紧密可跟踪的地图(只随着环境变化而增长),可长时间操作。
1. 介绍
1)一个实时的SLAM算法需要有:有地图和与之对应的关键帧,复杂度只随着关键帧增长(选择策略尽量避免没必要的冗余),一个好的关键帧和地图点的策略产生更精确的结果;(为了非线性优化)初始化位姿的估计;局部地图可扩展性;快速全局优化来进行实时的闭环。
2) PTAM:没有闭环,视角变换差,地图初始化需要人工干预,
3)一系列的前人的工作组建出来ORB。
4)自动初始化,本质图,宽进严出
2. 相关工作
· 位置识别Place Recognition
1)图像到图像,图像到map,map到map,用到词袋bag of words。
2)里面用的是brief描述子,与SIFT和SURF做对比,效果相当,但是breif没有尺度不变性和旋转不变性。
3)而ORB-SLAM用ORB特征解决了这两个问题。
· 地图初始化
1)单目没有深度,
2)ORB里面,恢复相应的相机位姿用homography单应矩阵(平面)或者用本质矩阵/基础矩阵(非平面)来做。直到产生一个比较明显的视差 parallax才会成功初始化。(位移比较小初始不成功)
· 单目SLAM
1)背景:以前用滤波(浪费计算量,有的真没有信息),关键帧的方法(与帧率无关,只处理关键帧)。在同样的计算量下,关键帧更加准确
本文的闭环(loop closing)采用了 7个自由度(旋转*3+平移*3+尺度*1)的位姿图优化并且应用于本质图中。
2)local map也基于共视关系
3)LSD-SLAM:半稠密地图,直接法,仍然需要特征来做闭环,相机定位精度不如PTAM高
4)SVO:帧率很高,适合无人机,没有闭环,俯视
5)在跟踪阶段,尽量多的插入关键帧,然后再在local mapping时(有局部BA)移除冗余的,避免额外的计算成本。
3. 系统概述
· 特征选择
ORB:计算快,匹配快,对光照、视角鲁棒(只比较中心点和周围点的亮度差异(二值)),wide baseline(提高BA精度)
· 三个线程
tracking:定位相机的位姿,每一帧都要算位姿,算完之后决定他是否作为一个关键帧插入。如果帧丢失,执行relocalization重定位。
用local covisible map局部共视地图
local mapping:处理关键帧,在关键帧之间重新生成新的对应关系,新的关键帧之间三角化产生新的地图点,地图点剔除,关键帧剔除。
loop closing:计算相似变换SIM3,,目的是把回环的地方对齐。用到本质图。
· 地图点,关键帧,以及他们的选择
对地图点的描述(类里面有什么)
· 共视图和本质图(见三、)
· 词袋位置识别bags of words place recognition
DBoW2视觉词典(离线创建的)。用了许多图提取ORB特征点,训练构建 了一个树状结构 。
不再全范围的匹配,在一定相似范围层级搜索。
· 自动初始化
计算两帧的相对位姿,三角化成地图点的初始化。地图与平面或非平面没有关系,非人工干预。
初始化时,有多组解,怎么选择,每个点都检测一遍,找误差最小的。使初始化非常鲁棒。
4. Tracking
· ORB 特征提取
不同数据集不同分辨率提取特征个数不一样。自适应阈值,特征不够就降低阈值,直到提取到足够数量的特征。
· 从以前的帧中初始化位姿估计
恒速模型(a constant velocity motion model):
· 通过全局重定位初始化位姿估计(结合代码理解)
如果跟踪丢失,将帧转换成词袋,并且查询识别数据库。使用PnP算法。
· 跟踪局部地图(Track Local Map)
利用共视关系
· 新的关键帧选择(与代码对应)
尽快插入关键帧,使得跟踪鲁棒。
5. 局部建图线程(Local Mapping)
· 关键帧插入
· 最近地图点剔除
· 生成新的地图点
从连接关键帧三角化ORB(共视图)
· 局部BA
优化当前处理的关键帧,以及所有和它向相连的关键帧(共视图),以及所有关键帧的地图点。
在优化过程中,丢弃外点。
· 局部关键帧剔除
6. 闭环
· 闭环候选检测(非常严格)
检测至少连续 三次检测到闭环成功(共视关系也得)才是闭环成功。(结构)
得到闭环候选。
· 计算相似变换(Similarity Transformation)–SIM3
七个自由度:3*平移,3*旋转,1*尺度。
计算相似变换,将误差累积做融合。也叫环的几何验证。(闭环矫正)
· 闭环融合(Loop Fusion)
去掉一些重复duplicated地图点,由共视关系插入一些新的边。
· 本质图优化
7. 实验
闭环时,蓝色:闭环匹配,然后用SIM3进行相似变换,红色是局部地图点。
LocalBA速度和环境有关。
与PTAM对比,ORB-SLAM关键帧数量随着时间的增加,并没有增加很多。因为会删除冗余关键帧,把数量保持在一个合适的数量。
8. 总结
· 总结
室内1cm,室外达到米级。融合了很多成果,是单目SLAM最完整的解决方案。关键帧的选择和剔除可以根据数据集的不同进行改进。
优势:尺度不变,光照鲁棒,旋转不变,wide baseline宽基线。
· 改进
地图点稀疏,希望更稠密。等等。(已经实现)
9. 附录
一些东西的推导,看代码。
· 非线性优化
三、ORB-SLAM2论文阅读-
1. 介绍
以前的RGB-D用ICP,现在用BA效果更好
(RGB-D,双目)远点、近点(小于40倍的基线距离),越近的点越准。
远点对旋转用处比较大,平移和尺度不用。
双目和RGB-D一帧就能初始化,只需做刚度变换,不需要相似变换。
四、总览
1. ORB-SLAM2总
· 特点
1)所有的任务(跟踪/局部地图/闭环/重定位)采用相同的特征,使得系统更高效、简单可靠
2)ORB特征具有旋转/光照不变性,无需GPU即可实时
3)共视图使得跟踪/建图控制在局部共视区域,与全局地图大小无关,可以在大场景下运行
4)使用Esseÿtial Graph来优化位姿实现回环检测,耗时少精度高
5)实时重定位使得在跟踪丢失后可以恢复位姿,增强地图重用性
6)单目初始化和应用场景解耦,不管是平面/非平面场景,都可以自动初始化,无需人工干预
7)地图点和关键帧创建比较宽松,但后续会进行严格筛选,剔除冗余关键帧和误差大的地图点,增加建图过
程的弹性,在大旋转、快速运动、纹理不足等恶劣情况下可以提高跟踪的鲁棒性
8)相比于直接法,可以用于宽基线匹配,更适合于对深度精度要求较高的三维重建
9)适用于手持设备、汽车、机器人
10)集各种优秀的算法于一身,特征点法SLAM中最佳方案
· 不足
1)相比于直接法,特征提取比较耗时,运行速度没有直接法高
2)相比于直接法,在弱纹理/重复纹理/图像模糊的场景 下容易跟踪丢失
3)产生的地图比较稀疏(直接法可以产生半稠密地图)
2. 共视图(Covisibility Graph)
节点是关键帧,边是关键帧之间的共同观测地图点数目(至少15个)
(a)蓝色部分是关键帧,绿色的是当前帧,红色和黑色是地图点,(红色部分是当前的局部地图点,不是当前帧看到的,而是用了共视关系对当前帧的扩展)
(b)共视图
能通过共视关系,得到更多的信息,来优化最初比较粗糙的信息。
3. 本质图(Essential Graph)
(c)扩展树(绿色),父节点,子节点,父关键帧,子关键帧
闭环(红色):闭环检测成功
(d)本质图:边复杂一些
· 只针对关键帧,不考虑普通帧
· 共视图比较稠密,本质图比共视图更稀疏。这是因为本质图的作用是用在闭环矫正时,用相似变换来矫正尺度漂移,把闭环误差均摊在本质图中。本质图中节点也是所有关键帧,但是连接边更少,只保留了联系紧密的边来使得结果更精确。
· 本质图中包含:1.Spanning tree连接关系;2.形成闭环的连接关系,闭环后(地图点变动后)新增加的连接关系;3.共视关系非常好(至少100个共视地图点)的连接关系|
|