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利用三个线程分别进行追踪、地图构建和闭环检测。
一、追踪
- ORB特征提取
- 初始姿态估计(速度估计)
- 姿态优化(Track local map,利用邻近的地图点寻找更多的特征匹配,优化姿态)
- 选取关键帧
二、地图构建
- 加入关键帧(更新各种图)
- 验证最近加入的地图点(去除Outlier)
- 生成新的地图点(三角法)
- 局部Bundle adjustment(该关键帧和邻近关键帧,去除Outlier)
- 验证关键帧(去除重复帧)
三、闭环检测
- 选取相似帧(bag of words)
- 检测闭环(计算相似变换(3D<->3D,存在尺度漂移,因此是相似变换),RANSAC计算内点数)
- 融合三维点,更新各种图
- 图优化(传导变换矩阵),更新地图所有点
作者提供了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/
该系列的其它文章: