ORB-SLAM(一)简介

ORB-SLAM是一种基于ORB特征的三维定位与地图构建算法(SLAM)[1]。该算法由Raul Mur-Artal,J. M. M. Montiel和Juan D. Tardos于2015年发表在IEEE Transactions on Robotics。ORB-SLAM基于PTAM架构,增加了地图初始化和闭环检测的功能,优化了关键帧选取和地图构建的方法,在处理速度、追踪效果和地图精度上都取得了不错的效果。要注意ORB-SLAM构建的地图是稀疏的。

ORB-SLAM一开始基于monocular camera,后来扩展到Stereo和RGB-D sensor上。作者好像还会做Semi-dense mapping的扩展。作者的开源代码都在GIT上[2]。

ORB-SLAM算法的一大特点是在所有步骤统一使用图像的ORB特征。ORB特征是一种非常快速的特征提取方法,具有旋转不变性,并可以利用金字塔构建出尺度不变性。使用统一的ORB特征有助于SLAM算法在特征提取与追踪、关键帧选取、三维重建、闭环检测等步骤具有内生的一致性。

ORB-SLAM架构如下:

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

一、追踪

  1. ORB特征提取
  2. 初始姿态估计(速度估计)
  3. 姿态优化(Track local map,利用邻近的地图点寻找更多的特征匹配,优化姿态)
  4. 选取关键帧

二、地图构建

  1. 加入关键帧(更新各种图)
  2. 验证最近加入的地图点(去除Outlier)
  3. 生成新的地图点(三角法)
  4. 局部Bundle adjustment(该关键帧和邻近关键帧,去除Outlier)
  5. 验证关键帧(去除重复帧)

三、闭环检测

  1. 选取相似帧(bag of words)
  2. 检测闭环(计算相似变换(3D<->3D,存在尺度漂移,因此是相似变换),RANSAC计算内点数)
  3. 融合三维点,更新各种图
  4. 图优化(传导变换矩阵),更新地图所有点

作者提供了ORB-SLAM在New College Data[3]上的时间统计,如下图。

1. 追踪部分,平均每帧约30毫秒,基本达到了30fps。特征提取速度是非常快的,平均11毫秒左右,非常适合于实时SLAM。姿态估计稍微耗时一些,平均需要20毫秒,特别是姿态优化需要耗费16毫秒的时间。

2. 地图构建部分,平均每关键帧约385毫秒。其中生成新的点约70毫秒,Local BA约300毫秒,相对还是比较耗时的。不知道这两部分还有没有优化的空间。

[1] ORB-SLAM: A Versatile and Accurate Monocular SLAM System

[2] https://github.com/raulmur/ORB_SLAM2

[3] http://www.robots.ox.ac.uk/NewCollegeData/

 

该系列的其它文章:

ORB-SLAM(二)性能

ORB-SLAM(三)初始化

ORB-SLAM(四)追踪

ORB-SLAM(五)优化

ORB-SLAM(六)回环检测

 

posted @ 2016-02-24 21:03  路游侠  阅读(52704)  评论(10编辑  收藏  举报