ORB_SLAM v2

视频效果展示:

通过视频可以看到我们的 handsfree ros 机器人通过摄像头完成了地图的构建。

本小节介绍如何将开源项目 ORB_SLAM v2 移植到我们 handsfree 机器人上。

在移植之前,我们先来了解一下相关的知识点。

关于 ORB_SLAM v2

在了解 ORB_SLAM v2 前我们先来了解一下 ORB_SLAM

关于 ORB_SLAM

简介

ORB_SLAM 是一种基于ORB特征的三维定位与地图构建算法,该算法由Raul Mur-Artal,J. M. M. Montiel和Juan D. Tardos于2015年发表在IEEE Transactions on Robotics。其核心是使用 ORB (Orinted FAST and BRIEF) 作为整个视觉 SLAM(simultaneous localization and mapping,即时定位与地图构建) 中的核心特征。 它是一个完整的 SLAM 系统,包括视觉里程计、跟踪、回环检测,是一种完全基于稀疏特征点的单目 SLAM 系统,同时还有单目、双目、RGBD 相机的接口。

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 的效率和精度。

ORB_SLAM 的 Github源码

系统框架和三大功能

orbslam-system-frame

ORB_SLAM 利用三个线程分别进行追踪、地图构建和闭环检测。

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

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

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

优点

  1. 一个代码构造优秀的视觉 SLAM 系统,非常适合移植到实际项目。
  2. 采用 g2o 作为后端优化工具,能有效地减少对特征点位置和自身位姿的估计误差。
  3. 采用 DBOW 减少了寻找特征的计算量,同时回环匹配和重定位效果较好。重定位:比如当机器人遇到一些意外情况之后,它的数据流突然被打断了,在 ORB_SLAM 算法下,可以在短时间内重新把机器人在地图中定位。
  4. 使用了类似「适者生存」的方案来进行关键帧的删选,提高系统追踪的鲁棒性和系统的可持续运行。
  5. 提供最著名的公共数据集( KITTI 和 TUM 数据集)的详尽实验结果,以显示其性能。
  6. 可以使用开源代码,并且还支持使用 ROS。

缺点

  1. 构建出的地图是稀疏点云图。只保留了图像中特征点的一部分作为关键点,固定在空间中进行定位,很难描绘地图中的障碍物的存在。
  2. 初始化时最好保持低速运动,对准特征和几何纹理丰富的物体。
  3. 旋转时比较容易丢帧,特别是对于纯旋转,对噪声敏感,不具备尺度不变性。
  4. 如果使用纯视觉 SLAM 用于机器人导航,可能会精度不高,或者产生累积误差,漂移,尽管可以使用 DBoW 词袋可以用来回环检测。最好使用 VSLAM+IMU 进行融合,可以提高精度上去,适用于实际应用中机器人的导航。

关于 ORB_SLAM v2

ORB-SLAM2 在 ORB-SLAM 的基础上进行了优化改动,摆脱了对 ROS 的依赖,显示模块改用了 Pangolin,直接对双目和 RGBD 提供接口,不论是单目,双目和 RGB-D 相机,都有一套完整的 SLAM 方案。它能够实现地图重用,回环检测和重新定位的功能。无论是在室内的小型手持设备,还是到工厂环境的无人机和城市里驾驶的汽车,ORB_SLAM2 都能够在标准的 CPU 上进行实时工作。ORB_SLAM2 在后端上采用的是基于单目和双目的光束法平差优化(BA)的方式,这个方法允许米制比例尺的轨迹精确度评估。此外,ORB_SLAM2 包含一个轻量级的定位模式,该模式能够在允许零点漂移的条件下,利用视觉里程计来追踪未建图的区域并且匹配特征点。

ORB_SLAM v2 更多相关介绍
ORB_SLAM v2 的 Github源码
相关数据集

关于 ORB

ORB(Oriented FAST and Rotated BRIEF)是一种快速特征点提取和描述的算法。

ORB算法分为两部分,分别是特征点提取和特征点描述。特征提取是由FAST(Features from Accelerated Segment Test)算法发展来的,特征点描述是根据BRIEF(Binary Robust IndependentElementary Features)特征描述算法改进的。ORB特征是将FAST特征点的检测方法与BRIEF特征描述子结合起来,并在它们原来的基础上做了改进与优化。ORB算法最大的特点就是计算速度快。这首先得益于使用FAST检测特征点,FAST的检测速度正如它的名字一样是出了名的快。再次是使用BRIEF算法计算描述子,该描述子特有的2进制串的表现形式不仅节约了存储空间,而且大大缩短了匹配的时间。

关于 SLAM

SLAM是同步定位与地图构建(Simultaneous Localization And Mapping)的缩写,最早由Hugh Durrant-Whyte 和 John J.Leonard提出。SLAM主要用于解决移动机器人在未知环境中运行时定位导航与地图构建的问题。简单的说就是机器人在未知环境中从一个未知位置开始移动,在移动过程中根据位置估计和地图进行自身定位,同时在自身定位的基础上建造增量式地图,实现机器人的自主定位和导航。

SLAM通常包括如下几个部分,特征提取,数据关联,状态估计,状态更新以及特征更新等。对于其中每个部分,均存在多种方法。SLAM既可以用于2D运动领域,也可以应用于3D运动领域。

运行 ORB_SLAM

  1. 关闭之前的所有终端,打开一个新的终端,输入命令打开摄像头
roslaunch handsfree_camera astra_dabai.launch
  1. 打开新的终端,启动ORB_SLAM指令
  roslaunch ORB_SLAM2 dabai_orb_slam2.launch

界面会启动两个界面,一个是特征点展示的图像界面,另一个是里程计与点云特征的展示

show

对于ORB-SLAM2:Map Viewer界面:

  • 鼠标滑动滚轮放大缩小
  • 鼠标按下左键拖拽移动
  • 鼠标按下右键拖拽旋转

现在我们可以打开机器人的键盘控制节点,移动机器人开始建图了。

results matching ""

    No results matching ""