2010-2016视觉SLAM算法综述

今天给大家分享一篇文章,关于“视觉SLAM算法从2010-2016年的调查”

2010-2016视觉SLAM算法综述
https://github.com/raulmur/ORB_SLAM2

摘要:

       SLAM是同步定位与建图的简称,是一项用于估计传感器运动和以及在未知环境下重构结构的技术。特别地,使用相机的SLAM被称为视觉SLAM,因为它仅仅依赖于视觉信息。vSLAM是一项用于多种应用场景的基础技术,在许多计算机视觉领域、增强现实(AR)和机器人领域中的文献中都进行过讨论。本论文的目的在于在不同研究领域之中,从技术和历史的角度,进行分类和总结当前所提出的的vSLAM算法。尤其专注于从2010年到2016年期间提出的vSLAM算法,因为那段时期是vSLAM技术取得了重大突破。技术分类被总结如下:基于特征点的方法(feature-based)、直接法(direct)和基于RGB-D相机的方法。

关键词:

Survey, Visual SLAM, Computer vision, Augmented reality, Robotics

1 引言

       SLAM是一种用于获得未知环境的3D结构和传感器运动的技术。该技术最初被提出用于实现机器人中机器人的自动控制。 然后,基于SLAM的应用被广泛地推广,例如基于计算机视觉的在线3D建模,AR可视化和自动驾驶汽车。在早期的SLAM算法中,集成了许多不同类型的传感器,例如激光测距传感器,旋转编码器,惯性传感器,GPS和相机。 这些算法在以下论文(参考文献2-5)中得到了很好的总结。

       近年来,使用相机的SLAM是研究的一个热点,因为传感器配置简单并且技术难度远大于其他方案。因为这些SLAM的输入仅仅是视觉信息,所以这技术叫做视觉SLAM(vSLAM)。vSLAM算法在计算机视觉、机器人和AR领域被广泛提出。此类算法适合用于AR系统中的相机位姿估计,因为系统的配置非常简单,例如平板相机或者智能手机。AR系统的一个重要要求是实时响应,以无缝和交互方式合并实际和虚拟对象。为了在轻量级手持设备上以有限的计算资源实现,在文献中已经提出了各种低计算成本的vSLAM算法。 这种vSLAM算法的应用不限于AR系统。 例如,它对机器人中的无人驾驶自动驾驶车辆(UAV)也很有用。 尽管已经针对不同研究领域中的不同目的提出了vSLAM算法,但它们基本上共享技术核心思想的整体部分,并且可以用于彼此实现不同目的。 因此,我们将这些算法进行归类和总结。

       在本文中,我们回顾了实时vSLAM算法,这些算法在2010年代显着发展。通常,vSLAM的技术难度高于其他基于传感器的SLAM,因为与通常在机器人中使用的360°激光感测相比,​​相机可以从有限的视野获得较少的视觉输入。从这样的输入,需要连续估计相机姿势,同时重建未知环境的3D结构。早期2000年的vSLAM的工作是使用基于跟踪和特征点建图的单目相机,这被称为“基于特征的方法”。为了应对无纹理或无特征的环境,已经提出了无需检测特征点的vSLAM,并且直接用整个图像进行跟踪和建图,这被称为“直接方法”。随着微软Kinect等低成本RGB-D传感器的出现,提出了基于单目图片以及深度图的vSLAM算法。因此,本文介绍的现有vSLAM算法根据基于特征点法,直接法和基于RGB-D摄像机的方法进行分类。本文将对想要开始学习vSLAM的基本框架,算法之间的差异以及2010年至2016年的进展的读者有所帮助。此外,给出了下一步更深的研究课题方向和几种比较不同算法性能差异的基准测试方法。

       本文的其余部分安排如下:在第2节和第3节中,介绍了vSLAM的重要组成部分和vSLAM的相关技术,包括视觉里程计。 在第4,5和6节中,总结了现有的vSLAM算法,分别介绍了基于特征点,直接法和基于RGB-D的vSLAM算法。 在第7节中,讨论了vSLAM算法中的其余技术问题。 在第8节中,介绍了用于评估vSLAM算法性能的数据集。 最后,我们在第9节中给出了结论。注意到2011年之前存在关于vSLAM算法的综述论文(文献8-9), 这些论文对于理解我们对新算法的调查也很有用。

2 vSLAM的组成部分

       在本节中,我们首先介绍2000年以来大多数vSLAM算法的基本框架。

2.1 基本模块

基本框架主要由以下3个模块组成:
1、Initialization(初始化)
2、Tracking(跟踪)
3、Mapping(建图)

       开始vSLAM之前,有必要定义一个固定坐标系系统,用于在未知环境中进行相机位姿估计和3D重建。因此,在初始化中,首先应该定义全局坐标系,并且将一部分环境重建作为全局坐标系中的初始地图。初始化之后,连续跟踪和建图来估计相机姿势。在跟踪中,重建的地图被用于跟踪估计该帧关于地图的相机位姿。为了做到这一点,通过图像的特征点匹配和特征点跟踪获得图像和地图之间的2D-3D匹配。通过求解PnP问题计算相机姿势。应该注意的是,大多数vSLAM算法假定事先校准固有相机内参,是已知的。因此,相机位姿通常等同于相机外参,包括全局坐标系中相机的平移和旋转。在建图中,当相机观测到之间未出现的环境时,将会通过计算环境的3D结构来扩充地图。

2.2 用于稳定和准确的vSLAM的附加模块

根据应用目的,vSLAM算法中还包括以下两个附加模块:
1、Relocalization(重定位)
2、Global map optimization(全局地图优化)

       当由于快速的相机机运动或一些干扰而导致跟踪失败时,需要进行重新定位。 在这种情况下,需要再次计算相机相对于地图的位姿。 因此,这个过程称为“重定位”。如果重定位没有合并到vSLAM系统中,则在跟踪丢失之后系统不再工作,并且这样的系统实际上并不实用。 因此,文献中已经讨论了一种快速有效的重定位方法。 请注意,这也被称为机器人技术中被捆绑的机器人问题。

       另一个模块是全局地图优化。 该地图通常包括根据相机移动距离的累积估计误差。 为了减小误差,通常会进行全局地图优化。 在此过程中,通过考虑整个地图信息的一致性来优化地图。 当相机在移动之后重新观测到同一块区间时,可以计算表示从开始到现在的累积误差。 然后,这个信息将会作为一个回环约束来消除累计误差。

       回环是一种获取参考信息的技术。 在回环中,首先通过将当前图像与先前获取的图像匹配来搜索回环, 如果检测到回环,则意味着相机捕获到先前观察到的视图之一。 在这种情况下,可以估计相机运动发生的累积误差。 注意,回环检测过程可以通过使用与重定位相同的技术来完成。 重定位用于恢复相机位姿,而回环检测则用于获取几何一致性地图。

       位姿图优化已被广泛用于通过优化相机位姿来减少累积误差。在该方法中,相机位姿之间的关系表示为图形,并且构建一致图来减小优化中的误差。 Bundle adjustment(BA)还用于通过优化地图和相机位姿来最小化地图的重投影误差。 在大型环境中,采用这种优化方法可以有效地最小化估计误差。 在小环境中,BA可以没有回环的,因为累积误差很小。

2.3 总结

       如上所述,vSLAM算法的框架由五个模块组成:初始化,跟踪,建图,重定位和全局地图优化。由于每个vSLAM算法对每个模块采用不同的方法,因此vSLAM算法高度依赖于所采用的方法。 所以,了解vSLAM算法的每个模块的性能,优点和局限性非常重要。

       应该注意,使用tracking and mapping(TAM)而不是使用定位和建图。TAM最初用于Parallel Tracking and Mapping(PTAM),因为定位和建图在传统方式中并不是同步的。 使用一个线程在每个帧中执行跟踪,而在另一个线程的某个固定时间执行建图。 在提出PTAM之后,大多数vSLAM算法遵循TAM的框架。 因此,本文将使用TAM。

3 相关技术

       vSLAM,视觉里程计(VO)和sfm都被设计用于估计未知环境中的相机运动和3D结构。 在本节中,我们将解释它们之间的关系。

3.1 视觉里程计(VO)

       里程计是使用转轮编码器等传感器估算传感器位置随时间的连续变化,以获取相对传感器的运动。 基于摄像机的视觉里程计(VO)也是文献中活跃的研究领域之一。 从技术角度来看,vSLAM和VO是高度相关的技术,因为这两种技术基本上都是估计传感器位置。 vSLAM和VO之间的关系可以表示如下:

                                                 vSLAM=VO+全局地图优化

       这两种技术之间的主要区别在于建图中的全局地图优化。 换句话说,VO等同于2.1节中的模块。在VO中,地图的几何一致性仅在地图的一小部分中被考虑,或者仅在没有地图的情况下计算相对相机运动。 另一方面,在vSLAM中,通常考虑地图的全局几何一致性。 因此,为了构建几何一致地图,在最近的vSLAM算法中都会执行全局优化。

       vSLAM和VO之间的关系也可以从论文[20,21]和论文[22,23]中找到。 在文献[20,22]中,首先提出了一种关于VO的技术。然后,通过在VO中添加全局优化,提出了一种关于vSLAM的技术。

3.2 运动结构(Structure from motion)

       运动结构(SfM)是一种以批量方式估计环境的相机运动和3D结构的技术。 在论文[25]中,提出了一种在线运行的SfM方法。作者将其命名为实时SfM。 从技术角度来看,vSLAM和实时SfM之间没有明确的区别。 这可能就是为什么在最近的论文中没有找到“real-time SfM”这个词的原因。

       如本节所述,vSLAM,VO和实时SfM共享许多公共技术。 因此,我们在本文中介绍了所有这些并且不区分这些技术。

4 基于特征的方法

       文献中存在两种基于特征点的方法:基于滤波器的方法和基于BA的方法。在本节中,我们将解释这两种方法并进行比较。 尽管有些方法是在2010年之前提出的,但我们在这里解释了它们,因为它们可以被视为其他方法的基本框架。

4.1 单目SLAM(MonoSLAM)

       第一个单眼vSLAM由Davison等人于2003年开发。他们将其命名为MonoSLAM。MonoSLAM被认为是基于过滤器的vSLAM算法的代表性方法,在MonoSLAM中,使用扩展卡尔曼滤波器(EKF)同时估计未知环境的相机运动和3D结构。 6*度(DoF)相机运动和特征点的3D位置表示为EKF中的状态向量。在预测模型中假设相机均匀运动,并且使用特征点跟踪的结果作为观测。根据相机移动,新的特征点将添加到状态向量中。 请注意,初始地图是通过观测定义在全局坐标系的已知对象来创建的。 总之,MonoSLAM由以下部分组成:

1、使用一个已知对象进行地图初始化
2、使用EFK估计相机运动和特征点的3D结构

       该方法的问题是计算成本与环境的大小成比例地增加,在大型环境中,状态向量的大小变大,因为特征点的数量很多。 在这种情况下,很难实现实时计算。

4.2 PTAM

       为了解决MonoSLAM中的计算成本问题,PTAM 将跟踪和建图分成CPU上的不同线程。 这两个线程并行运行,因此建图的计算成本不会影响跟踪。 因此,在优化中需要较大计算成本的BA可以用于建图。这意味着跟踪实时估计相机运动,并且建图以一定计算成本估计特征点的精确3D位置。PTAM是第一种将BA纳入实时vSLAM算法的方法,在发布PTAM之后,大多数vSLAM算法都遵循这种类型的多线程方法。

       在PTAM中,使用五点算法重建初始地图。在跟踪中,将地图的点投影到图像上,使用纹理匹配来进行2D-3D匹配。根据对应关系,可以计算相机位姿。在建图中,在关键帧中使用三角测量法计算新的特征点的3D位置。 PTAM的重要贡献之一是在vSLAM中引入这种基于关键帧的建图,当测量帧与已有关键帧之间存在较大差异时,插入新的关键帧。准确的三角测量基本上需要很大的差异。与MonoSLAM相比,使用具有一些关键帧的全局BA和具有该地图的所有关键帧的全局BA来优化特征点的3D点。此外,在跟踪过程中,新的PTAM采用了重定位算法。它使用了基于随机树的特征分类器来搜索输入帧的最近的关键帧。总之,PTAM由以下四个部分组成:

1、通用5点法进行地图初始化
2、通过地图点和输入图片之间的特征点匹配来估计相机位姿
3、通过三角测量法来估计特征点的3D位置,再通过BA方法优化已估计的3D位置
4、通过基于随机树搜索来恢复跟踪过程

       与MonoSLAM相比,在PTAM中,系统可以通过将跟踪和建图分成CPU上的不同线程来处理数千个特征点。

       已经提出了许多扩展的PTAM算法。Castle等人开发了PTAM的多地图版本。Klein等人 开发了PTAM手机版。 为了在移动手机上运行PTAM,减少了输入图像的分辨率,地图点和关键帧数量。此外,他们考虑在BA中滚动快门失真以获得准确的估计结果,因为由于其廉价的成本,通常在大多数移动手机相机中安装滚动快门。由于PTAM只能重建环境的稀疏3D结构,因此第三个线程可用于重建环境的稠密3D结构。

4.3 MonoSLAM和PTAM的对比

       在文献[34]中讨论了基于EKF建图和基于BA的PTAM关键帧建图的MonoSLAM之间的差异。根据文献,为了提高vSLAM的准确性,增加地图中特征点的数量是很重要的。从这个角度来看,基于BA的方法比基于EKF的方法更好,因为它可以处理大量的点。

4.4 全局地图优化技术

       如上所述,通过对关键帧使用BA优化来维持整个地图的几何一致性。 然而,一般而言,BA由于涉及大量参数(包括关键帧的相机位姿和地图中的点)而存在局部最小问题。在第2节所讲的回环中进行位姿图优化是一种解决方案。在回环中,首先使用回环约束优化相机位姿。 在优化相机姿势之后,进行BA以优化特征点的3D位置和相机位姿。 对于回环,采用基于视觉信息的方法,他们使用基于词袋的图像检测技术来检测与当前视图类似的关键帧。

       在vSLAM系统中,选择立体摄像机作为视觉传感器。在这种情况下,坐标系的比例是固定的并且是已知的。然而,在单目vSLAM情况下,如果不执行全局BA,则存在尺度模糊并且在相机移动期间尺度可能改变的问题。在这种情况下,就会出现尺度漂移问题,并且每帧的坐标系的尺度可能不一致。 为了校正尺度漂移,应在7 DoF 中优化相机位姿。 Strasdat等人提出了一种基于相似变换的7个 DoF 相机位姿优化的方法。

       作为PTAM的扩展,ORB-SLAM 包括BA,基于视觉的回环检测和7 DoF 位姿图优化。据我们所知,ORB-SLAM是最完整的基于特征的单目vSLAM系统。ORB-SLAM可以扩展到立体vSLAM和RGB-D vSLAM。

4.5 总结

       图1总结了基于特征点的方法。MonoSLAM是在2003年问世的, 跟踪和建图都是使用EKF。 PTAM于2007年问世, 他们提出将跟踪和建图分离到CPU上的不同线程。这种多线程方法使其可以处理地图中的数千个特征点。在大型环境中,很难获得全局最优的地图和相机姿势,因为BA问题存在局部最小值问题。为了避免这个问题,可以在BA优化之前使用回环检测和位姿图优化。ORB-SLAM 包括多线程跟踪,建图和回环检测,并使用位姿图优化和BA优化地图,这可以被视为单目vSLAM的一体化包。由于 ORB-SLAM 是一个开源项目,我们可以在本地环境中轻松使用整个vSLAM系统。
2010-2016视觉SLAM算法综述

5 直接法

       与上一节中基于特征点的方法相比,直接法使用手工设计的特征检测器和描述子,并直接使用输入图像而不进行任何抽象。它们也被称为无特征方法。 通常,光度一致性被用作直接方法中的误差测量,而几何一致性(例如图像中的特征点的位置)被用在基于特征点的方法中,在本节中,我们将介绍一些先进的直接法。

5.1 DTAM

       Newcombe等人提出了一种称为DTAM的完全直接的方法。在DTAM中,通过将输入图像与从重建的地图中生成的合成视图图像进行比较来完成跟踪。这相当于图像和地图的3D模型之间的配准,并且在DTAM中使用GPU加速能够有效地实现。通过使用多基线立体完成建图,然后通过空间连续性来优化地图,这样就可以计算所有像素点的3D坐标。使用像PTAM这样的立体测量来生成初始深度图。总之,DTAM由以下三个部分组成:

1、通过立体测量进行地图初始化
2、通过从重构的地图生成的合成视图来优化相机运动
3、通过使用多基线立体来优化每个像素点的深度信息,然后再通过空间连续性来优化它

       DTAM算法经过优化,可在手机上实现实时处理。基本上,这些方法专为快速和在线3D建模而设计。

       应该指出的是,Stühmer等人,在此前提出了一种估计每个像素深度信息的变分方法,他们使用与DTAM建图类似的代价函数。然而,在该方法中,PTAM 用于跟踪。 因此,跟踪是基于特征的方法,并不是完全直接的方法。

5.2 LSD-SLAM

       LSD-SLAM是直接方法中的另一种先进方法。LSD-SLAM的核心思想遵循半稠密VO的思想。在该方法中,重建目标仅限于梯度变化明显的区域,而DTAM却无此限制。这意味着它无法处理无纹理区域,因为难以从图像估计准确的深度信息。在建图中,首先将随机值设置为每个像素的初始深度值,然后,基于光度一致性来优化这些值。由于此方法不考虑整个地图的几何一致性,因此该方法称为视觉里程计。

       2014年,半稠密VO扩展到LSD-SLAM。在LSD-SLAM中,前半部分中描述的回环检测和7 DoF位姿图优化被添加到半稠密视觉里程计算法中。 总之,LSD-SLAM由以下四个部分组成:

1、随机值被设置为每个像素的初始深度值
2、通过从重建的地图生成的合成视图来优化相机运动
3、可重构区域限制于梯度变化明显的区域
4、使用7 DOF位姿图优化来获取几何一致性地图

       基本上,这些半稠密方法可以实现CPU的实时处理。此外,他们通过考虑手机的CPU架构优化手机的LSD-SLAM算法。 在文献[48]中,他们还评估了LSD-SLAM算法对低分辨率输入图像的准确性。LSD-SLAM扩展到立体相机和全向相机。

5.3 SVO和DSO

       Forster等人提出了semi-direct VO(SVO)。虽然跟踪是通过特征点匹配完成的,但建图是通过直接方法完成的。在基于特征的方法中,特征描述子和LK跟踪器(Lucas-Kanade tracker)用于查找匹配点。与基于特征的方法相比,通过最小化特征点周围的光度误差来估计相机运动。该方法可以视为DTAM和LSD-SLAM的稀疏版本。

       最近,Engel等人提出直接稀疏里程计(DSO)。与SVO相比,DSO是一种完全直接的方法。为了减小累积误差,DSO尽可能地从几何和光度角度去除误差因子。在DSO中,输入图像被分成几个块,然后,选择high intensity点作为重构候选点。通过使用该策略,点在整个图像内扩散。此外,为了实现高精度的估计,DSO使用几何和光度相机校准结果。 应该注意,DSO仅考虑本地几何一致性。 因此,DSO被归类于VO,而不 vSLAM。

5.4 总结

       图2总结了直接法。直接法可以根据地图密度进行分类。稠密方法生成稠密地图,以便估计每个关键帧中每个像素的深度值。这些方法对于使用GPU进行实时3D建模非常有用。 与稠密方法相比,半稠密和稀疏方法主要用于基于传感器位姿跟踪的应用,这些方法可以在CPU上实时运行。
2010-2016视觉SLAM算法综述

6 RGB-D SLAM

       最近,基于结构光的RGB-D相机,如Microsoft Kinect,变得便宜且小巧。由于这些相机能实时提供3D信息,因此这些相机也用于vSLAM算法。

6.1 与单目vSLAM的区别

       通过使用RGB-D摄像机,可以直接获得环境的3D结构及其纹理信息。此外,与单目vSLAM算法相比,坐标系的尺度是已知的,因为可以在度量空间中获取3D结构。

       基于深度D的vSLAM的基本框架如下,ICP算法用于估计相机运动,然后,通过组合多张深度地图来重构环境的3D结构。为了将RGB结合到基于深度的vSLAM中,已经提出了许多方法,如下所述。

       应该注意的是,大多数面向消费者的深度相机是为室内使用而开发的。他们将红外光(IR)投射到环境中以测量深度信息,在室外环境中难以检测发射的红外光。 此外,深度测量范围存在限制,使得RGB-D传感器可以捕获从1至4米的环境。

6.2 KinectFusion

       Newcombe等人在2011年提出 KinectFution 。 在KinectFusion中,体素空间用于表示环境的3D结构。通过在体素空间中组合所获得的深度图来重构环境的3D结构,并且通过ICP算法使用估计的3D结构和输入的深度图来估计相机运动,即基于深度的vSLAM,KinectFusion在GPU上运行以实现实时处理。

       Kahler等人在移动设备上实现KinectFusion的实时处理。为了降低计算成本,他们在建图过程中使用体素块散列。RGB-D vSLAM具有数据量大的问题。在文献[59]中,它们通过统一共面点来减少数据量。

6.3 SLAM++

       Salas-Moreno等人提出了一种对象级RGB-D vSLAM算法。在该方法中,预先将多个3D对象录入到数据库中,并且在在线处理中识别这些对象。通过识别3D对象来优化地图,并且用3D对象来替换3D点已达到减少数据量的目的。

       作为类似的算法,Tateno等人提出了RGB-D SLAM的实时分割方法。标记分割的对象,然后,这些对象可以用作识别目标。

6.4 RGB-D VO和全局地图优化技术

       对于跟踪,RGB图像也用于 RGB-D vSLAM 算法。在文献[62,63]中,通过跟踪连续帧之间的特征点来估计相对相机运动,然后使用跟踪的特征点估计平移矩阵,并且使用深度图通过ICP算法改进该平移矩阵。另一方面,在文献(22、23、64)已经提出了基于光度一致性的相机运动跟踪方法,这种基于光度一致性的相机运动跟踪也采用基于单目相机的稠密vSLAM方法[20、21、43]。

       为了获得几何一致的映射,在RGB-D vSLAM算法中使用位姿图优化和形变图优化。Kerl等人使用位姿图优化来减少累积误差,这种位姿图优化几乎与单目vSLAM算法中的回环相同。 Whelan等人分别使用位姿图优化来改进相机运动估计和形变图优化来改进地图。 与其他工作相比,估计的地图也得到了改进。在[66]中,形变图优化经常用于某些帧,并且通过RGB-D图像和重建模型之间的匹配来估计相机运动。他们表明了几何一致性模型,经常可以使用形变图优化来获取。

       注意到RGB-D SLAM API有提供给消费者设备,例如Google TangoStructure Sensor。特别是,Google Tango通过整合内部传感器信息提供稳定的估算结果。

7 其余问题

       在实际情况中,vSLAM面临一些问题。在本节中,我们列出了以下问题:纯旋转运动,地图初始化,估计相机内参,滚动快门失真和尺度模糊。

7.1 纯旋转运动

       当用户在手持AR应用中移动设备时,有时会发生纯粹的旋转运动。这是一个问题,因为在单目vSLAM中纯旋转运动中无法观察到差异。为了解决这个问题,在文献[67,68]中,不同的投影模型被提出用于处理一般相机运动和纯旋转运动。例如,基于单应性的跟踪用于纯旋转运动,6个DoF相机跟踪用于其他相机运动。 另一种方法是根据相机运动使用两种类型的3D点表示法,具有明显视差的点被表示为3D点,反之表示为3D射线。在跟踪过程中,3D射线信息也用于估计相机运动,它们使用输入图像中的3D射线和特征点之间的距离作为重投影误差。

       注意到,纯粹的旋转运动在RGB-D vSLAM中不是问题。这是因为可以通过使用获得的深度图来完成跟踪和建图过程。 另一方面,基于单目相机的vSLAM在纯旋转运动期间不能继续建图。

7.2地图初始化

       地图初始化对于在vSLAM中实现准确的估计是非常重要的。 基本上,为了获得准确的初始地图,基线应该很宽。然而,在实际场景中,新手可能难以进行理想的相机运动。为了解决这个问题,Mulloni等人提出了一个用户友好的初始化方法, 他们使用2D / 3D指南来指示理想的相机运动以进行地图初始化。 Arth等人提出了基于2.5D地图的室外环境初始化, 通过使用此方法,可以在地球上的全局坐标系中初始化vSLAM。

       例如基准标记和已知3D对象的参考对象也已用于获得全局坐标系,并且通过跟踪参考对象来估计初始相机位姿。为了扩展可跟踪区域,vSLAM与它结合在一起。 Vuforia提供基于标记的SLAM初始化。 在文献[72,73]中,他们使用已知的3D对象作为参考,并且已知的对象形状用于改进地图。

7.3 估计相机内参

       大多数vSLAM算法假定已知的相机内参, 这意味着应在使用vSLAM应用之前完成相机校准,并且应在vSLAM估算过程中修正固有相机内参。 然而,这对新手来说很困难。在文献中,他们实现了在vSLAM时相机内参估计[74]。 在vSLAM估计过程中,相机内参逐渐收敛。另一方面, 它们通过基于离线自校准技术估计焦距变化来消除相机变焦效果,来处理相机内参变化。

7.4 滚动快门失真(卷帘快门变形)

       为了实现精确的相机位姿估计,考虑快门类型也很重要。大多数vSLAM算法都假定全局快门,并且这些算法估计每帧的一个相机位姿。 然而,包括RGB-D相机在内的大多数消费者相机由于其成本而采用卷帘式快门。 在滚动快门相机中,捕获图像的每一行是由不同的相机位姿拍摄的,显然很难直接估计每行的相机姿势。通常,基于插值的方法用于估计滚动快门相机位姿。 在文献[77]中,他们使用样条函数来插值相机轨迹。

7.5 尺度模糊

       在一些使用单目vSLAM的vSLAM应用中需要绝对尺度信息。为了获得绝对尺度信息,在文献[80,81]中需要使用用户肢体配合。 Lee等人使用用户的手来确定绝对尺度和全局坐标系[80]。Knorr等人使用用户的面部信息来确定绝对尺度[81],这里做了个假设,假设这些身体部位的尺寸差异很小。因此,这些vSLAM系统可以准确地估计尺度信息。

       作为另一种方法,也可以使用移动手机上的诸如加速度传感器,陀螺仪和磁传感器等若干传感器。在文献[82]中,通过使用加速度计估计尺度信息,他们使用频域滤波技术来消除传感器噪声。

8 Benchmarking(基准)

       为了实现vSLAM算法之间的公平比较,基准测试显然很重要,并且近年来已经讨论了其方法。 在这里,我们介绍一些基准数据集如下:

       TrakMark提供具有6个 DoF 相机运动和相机内参的图像序列[83]。在TrakMark中,图像序列分为三种场景:虚拟环境,室内环境和室外环境。TrakMark假定用于评估AR / MR研究领域中vSLAM算法的性能, 他们还从AR / MR研究的角度提出了评估标准。在AR / MR应用中,图像空间错误是最重要的,因为只有将虚拟对象叠加到图像上并显得自然才是可以的。在TrakMark中,他们使用虚拟对象(PEVO)的投影误差作为评估vSLAM算法的标准[84]。在该标准中,使用估计的和理想的相机位姿将虚拟点投影到输入图像上,然后在图像空间中测量距离。

       Martull等人提供了一个跟随Tsukuba数据集的立体数据集[85]。Tukuba立体数据集已用于评估立体算法。 他们使用计算机图形创建了新的Tukuba立体数据集。数据集中提供了每个帧的图像序列,相机位姿和深度图。使用不同的相机轨迹和光照条件来创建图像序列。

       TUM RGB-D基准数据集为具有6个DoF相机位姿的RGB-D图像序列[86]。使用运动捕捉系统获得相机位姿,其可以被认为比vSLAM更准确。他们分别提出用于评估局部和全局误差的相对姿态误差(PRE)和绝对轨迹误差(ATE)。

       KITTI数据集用于评估驾驶场景中的视觉系统,包括许多类型的数据[87]。在数据集中,提供了VO数据集,使用RTK-GPS获得地面相机位姿。 在KITTI数据集网页中,列出了评估结果。 LSD-SLAM和ORB-SLAM算法的结果可以在网页中找到。

       与其他数据集相比,SLAMBench提供了一个框架,用于评估vSLAM算法的准确性和能耗性[88]。 此外,Kinect Fusion实现包含在SLAMBench中的不同选项(C ++,OpenMP,OpenCL和CUDA)

       自2008年以来,在混合和增强现实(ISMAR)国际研讨会上组织了现场基准测试,称为“竞赛”。在跟踪竞赛中,参与者需要使用自己的vSLAM系统完成组织者的特定任务。 与基于数据集的评估不同,参与者可以基于当前跟踪结果来控制相机移动。因此,跟踪竞赛将vSLAM算法当做交互系统。

9 总结

       在本文中,我们主要介绍了2010年至2016年的最新vSLAM算法。基本上,vSLAM算法由初始化,相机运动估计,3D结构估计,全局优化和重定位组成。目前,直接法是单目vSLAM的活跃研究领域。近年来也开发了RGB-D vSLAM,因为可以以便宜的价格获得许多消费者RGB-D相机。在AR / MR研究领域,实际问题已得到解决。尽管自2003年以来已开发出很多vSLAM算法,但vSLAM仍然是一个活跃的研究领域。

       为了理解不同方法之间的差异,应该比较这些模块。表1总结了代表性方法,每种算法都有不同的特点,我们需要通过考虑应用的目的来选择合适的算法。
2010-2016视觉SLAM算法综述
       本文重点介绍了最近仅使用相机的vSLAM算法。作为另一种方法,使用视觉和惯性数据的SLAM算法称为视觉惯性SLAM。通过结合视觉和惯性数据,我们可以获得更稳定的估算结果。此外,在文献[77,82]中,他们使用传感器信息来解决尺度估计和滚动快门失真补偿问题。目前,智能手机和平板电脑设备具有相机,GPS,陀螺仪和加速度计。在未来,我们相信传感器融合是实现强大而实用的vSLAM系统的一个方向。

       为了学习vSLAM算法的内容,我们提供了ATAM,这是一个面向初学者的vSLAM工具包[89]。它包括单目vSLAM算法,包括棋盘的真实尺度估计。用户可以轻松安装和修改ATAM,因为源代码设计得很好,只依赖于OpenCV [90]和cvsba [91]。