UIE
UIE
泡芙3级
泡芙3级
  • UID14
  • 粉丝4
  • 关注0
  • 发帖数24
阅读:2161回复:2

ORB-SLAM 学习笔记

楼主#
更多 发布于:2018-11-30 16:43
ORB-SLAM 基本介绍
ORB-SLAM 是西班牙 Zaragoza 大学的 Raúl Mur-Arta 编写的视觉 SLAM 系统。 它是一个完整的 SLAM 系统,包括视觉里程计、跟踪、回环检测,是一种完全基于稀疏特征点的单目 SLAM 系统,同时还有单目、双目、RGBD 相机的接口。其核心是使用 ORB (Orinted FAST and BRIEF) 作为整个视觉 SLAM 中的核心特征。
ORB-SLAM 基本延续了 PTAM 的算法框架,但对框架中的大部分组件都做了改进, 归纳起来主要有 4 点:
  1. ORB-SLAM 选用了 ORB 特征, 基于 ORB 描述量的特征匹配和重定位, 都比 PTAM 具有更好的视角不变性。此外, 新增三维点的特征匹配效率更高, 因此能更及时地扩展场景。扩展场景及时与否决定了后续帧是否能稳定跟踪。
  2. ORBSLAM 加入了循环回路的检测和闭合机制, 以消除误差累积。系统采用与重定位相同的方法来检测回路(匹配回路两侧关键帧上的公共点), 通过方位图 (Pose Graph) 优化来闭合回路。
  3. PTAM 需要用户指定 2 帧来初始化系统, 2 帧间既要有足够的公共点, 又要有足够的平移量. 平移运动为这些公共点提供视差 (Parallax) , 只有足够的视差才能三角化出精确的三维位置。ORB-SLAM 通过检测视差来自动选择初始化的 2 帧。
  4. PTAM 扩展场景时也要求新加入的关键帧提供足够的视差, 导致场景往往难以扩展. ORB-SLAM 采用一种更鲁棒的关键帧和三维点的选择机制——先用宽松的判断条件尽可能及时地加入新的关键帧和三维点, 以保证后续帧的鲁棒跟踪; 再用严格的判断条件删除冗余的关键帧和不稳定的三维点,以保证 BA 的效率和精度。

图片:v2-b0b335c323b2ff6cd34024f97bbfe266_hd.jpg


ORB-SLAM 的整体系统框架图

ORB-SLAM 它是由三大块、三个流程同时运行的。第一块是跟踪,第二块是建图,第三块是闭环检测。


1.跟踪(Tracking)
这一部分主要工作是从图像中提取 ORB 特征,根据上一帧进行姿态估计,或者进行通过全局重定位初始化位姿,然后跟踪已经重建的局部地图,优化位姿,再根据一些规则确定新关键帧。

2. 建图(LocalMapping)
这一部分主要完成局部地图构建。包括对关键帧的插入,验证最近生成的地图点并进行筛选,然后生成新的地图点,使用局部捆集调整(Local BA),最后再对插入的关键帧进行筛选,去除多余的关键帧。

3. 闭环检测(LoopClosing)
这一部分主要分为两个过程,分别是闭环探测和闭环校正。闭环检测先使用 WOB 进行探测,然后通过 Sim3 算法计算相似变换。闭环校正,主要是闭环融合和 Essential Graph 的图优化。

ORB-SLAM 优缺点
优点:
  • 一个代码构造优秀的视觉 SLAM 系统,非常适合移植到实际项目。
  • 采用 g2o 作为后端优化工具,能有效地减少对特征点位置和自身位姿的估计误差。
  • 采用 DBOW 减少了寻找特征的计算量,同时回环匹配和重定位效果较好。重定位:比如当机器人遇到一些意外情况之后,它的数据流突然被打断了,在 ORB-SLAM 算法下,可以在短时间内重新把机器人在地图中定位。
  • 使用了类似「适者生存」的方案来进行关键帧的删选,提高系统追踪的鲁棒性和系统的可持续运行。
  • 提供最著名的公共数据集( KITTI 和 TUM 数据集)的详尽实验结果,以显示其性能。
  • 可以使用开源代码,并且还支持使用 ROS。 (Github: slightech/MYNT-EYE-ORB-SLAM2-Sample
缺点:
  • 构建出的地图是稀疏点云图。只保留了图像中特征点的一部分作为关键点,固定在空间中进行定位,很难描绘地图中的障碍物的存在。
  • 初始化时最好保持低速运动,对准特征和几何纹理丰富的物体。
  • 旋转时比较容易丢帧,特别是对于纯旋转,对噪声敏感,不具备尺度不变性。
  • 如果使用纯视觉 slam 用于机器人导航,可能会精度不高,或者产生累积误差,漂移,尽管可以使用 DBoW 词袋可以用来回环检测。最好使用 VSLAM+IMU 进行融合,可以提高精度上去,适用于实际应用中机器人的导航。
ORB-SLAM2
ORB-SLAM2 在 ORB-SLAM 的基础上,还支持标定后的双目相机和 RGB-D 相机。双目对于精度和鲁棒性都会有一定的提升。ORB-SLAM2 是基于单目,双目和 RGB-D 相机的一套完整的 SLAM 方案。它能够实现地图重用,回环检测和重新定位的功能。无论是在室内的小型手持设备,还是到工厂环境的无人机和城市里驾驶的汽车,ORB-SLAM2 都能够在标准的 CPU 上进行实时工作。ORB-SLAM2 在后端上采用的是基于单目和双目的光束法平差优化(BA)的方式,这个方法允许米制比例尺的轨迹精确度评估。此外,ORB-SLAM2 包含一个轻量级的定位模式,该模式能够在允许零点漂移的条件下,利用视觉里程计来追踪未建图的区域并且匹配特征点。

深度相机选择
目前的主流视觉深度传感器方案主要分结构光,Time-of-Flight 和纯双目三类。双目跟结构光一样,都是使用三角测量法根据物体匹配点的视差反算物体距离,只是双目是用自然光,而结构光是用主动光发射特定图案的条纹或散斑。ToF 是通过给目标连续发送光脉冲,然后用传感器接收从物体返回的光,通过探测光脉冲的飞行(往返)时间来得到目标物距离。
ToF 和结构光都属于主动光,比如 Kinect 1,2 代(现已停产),容易受可见光和物体表面干扰,所以更适合室内和短距离的应用场景。

图片:v2-e09f261362dcc075dbd6f239f64e3a9a_hd.jpg

「视觉+结构光+惯性导航」融合的双目方案效果更好

小觅双目深度相机系列融合了 VSLAM+IMU ,提升精度的同时减少了累积误差和漂移,(IR)红外主动光探测器可辅助识别室内白墙和无纹理物体,克服了 ORB-SLAM 初始化运动时对无纹理物体不友好的特性。同时支持 ORB-SLAM , OKVIS,viorb 和 vins 多个开源项目案例,为了方便小伙伴们开发、移植、学习和应用,我们在 Github 上分享了 MYNT-ORBSLAM2-Sample ( ROS 及非 ROS 的接口都有提供噢~)。戳这里:https://github.com/slightech/MYNT-EYE-ORB-SLAM2-Sample


这是我们跑 ORB-SLAM2 的效果:
ORB-SLAM2
[UIE于2018-12-03 14:51编辑了帖子]
xiaoC
论坛版主
论坛版主
  • UID231
  • 粉丝10
  • 关注9
  • 发帖数60
  • 社区居民
沙发#
发布于:2018-12-03 14:59
总结得非常好,非常感谢。
Chatoyant
泡芙3级
泡芙3级
  • UID259
  • 粉丝4
  • 关注0
  • 发帖数18
  • 社区居民
  • 忠实会员
板凳#
发布于:2020-08-10 16:55
你好,请问你们有试过单目吗?我用自己的相机跑单目,总是不能成功初始化。同一个bag,双目能成功运行。
可以保证yaml文件是正确的
游客