ORB-SLAM2课程介绍 及 论文详解--总结自《全网最详细的ORB-SLAM2课程》

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框架

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个共视地图点)的连接关系|

  • 1
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ORB-SLAM2是一种基于二维图像的实时单目视觉SLAM系统,可以在没有先验地图的情况下,从单个摄像头的输入中实时定位和建立环境模型。为了更好地理解ORB-SLAM2的原理和代码实现,我们需要逐行分析其核心算法。 ORB-SLAM2的主要原理是通过特征提取,特征匹配和位姿估计来实现定位和建图。在代码中,我们可以看到一些关键的数据结构和函数调用,这些都是实现这些原理的关键。 首先,ORB-SLAM2使用FAST特征检测器在图像中检测关键点。这些关键点代表图像中的有趣区域。然后,使用ORB描述符对关键点进行描述。ORB描述符使用二进制位串来表示关键点周围的特征。 然后,ORB-SLAM2使用词袋法(Bag-of-Words)模型来进行特征匹配。它首先通过建立一个词典来表示所有关键点的描述符。然后,使用词袋模型来计算图像之间的相似度,从而找到匹配的关键点。 接下来,ORB-SLAM2使用RANSAC算法来估计两个图像之间的相对位姿。RANSAC算法通过迭代随机采样的方式来筛选出最佳的匹配关系,从而得到相对位姿估计。 最后,ORB-SLAM2使用优化算法(如g2o)来进行位姿图优化,从而更精确地估计相机的位姿。通过优化,ORB-SLAM2能够减少位置漂移,并在动态环境下更好地跟踪相机的位置。 总的来说,ORB-SLAM2通过特征提取、特征匹配和位姿估计实现实时单目视觉SLAM。核心代码实现了特征检测、描述符提取、特征匹配、RANSAC算法和图优化等关键步骤。了解这些原理和代码实现,可以帮助我们更好地理解ORB-SLAM2系统背后的工作原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值