这篇文章翻译自Basics of AR: SLAM – Simultaneous Localization and Mapping,是上一篇文章 [翻译] AR 基础:锚点,关键点和特征检测 的后续
在上一个部分我们研究了如何在摄像头获取的图像帧中确认关键点。这些技术是算法进行追踪和环境识别的的基础。
对于 AR 应用,设备还需要知道更多的信息:设备自身在现实世界中的三维位置。这通过设备计算自己同多个关键点之间的空间关系来确定,而这个过程被称为 Simultaneous Localization and Mapping,缩写为 SLAM。
1 感知世界的传感器
从更高的视角来看,在你启动 APP 时,无论是 Google ARCore, Apple ARKit 还是 Microsoft Mixed Reality,系统对于其运作的现实环境所知甚少。在系统开始运行时,系统也开始处理多种传感器返回的数据 -- 主要是摄像头。为了改善进度,设备还需要融合来自其他传感器的数据,例如加速度计和陀螺仪。
基于这些数据,算法有两个需要达成的目标:
- 建图:建立起周围环境的地图;
- 定位:确认设备在环境中位置。
在某些场景下,这个任务比较简单。如果你可以在一些已知的位置放置 Beacons,你可以使用三角定位法进行非常精确的定位。
在另一些应用中,GPS 提供的定位信息就足够了。
但是,对于移动 AR 应用来说,这些应用没法部署 Beacon 点,GPS 的精度也不够 -- 尤其是在室内环境下。
2 不确定的空间关系
让我们从基础内容开始:1987 年由 Cheeseman 等人提出的 A stocastic map for uncertain spatial relationships.
在一个完美的世界模型中,你可以知道任何一个物体的精确位置,包括 Beacon 的位置(1) 和机器人的位置 (2),如下图。
此时你可以计算位置 (1) 和 (2) 之间的准确相对位置。如果你要将机器人移动到位置 (3),你可以准确地知道你应该如何进行移动。
不幸的是,在现实生活的 SLAM 应用场景中,你只能使用不完美的知识,那么前面的例子中的所有结果都是不确定的。
空间中的这些点之间的具有空间上的相关关系。不同于理想情况,在现实世界中你所能知道的是这些位置点的概率分布。对于某些点的位置,你可能能有一个比较高精度的位置信息。对于另外的点,不确定性可能更大。经常用来基于不确定性的数据计算位置的算法包括 Extended Kalman Filter, Maximum a Posteriori (MAP) or Bundle Adjustment (BA).
由于各个点之间的相对关系,每次传感器返回新的数据时都会影响到所有的定位信息,并更新整个地图。让所有的数据保持最新需要大量的计算。
3 对齐认知世界
为了让 AR 应用更加可靠,将新的测量树对齐到已有的知识体系是 SLAM 算法最为重要的一个部分。每个传感器数据都存在不确定性:无论是摄像头图像中的误差还是由加速度计估计出来的帧间移动数据。
在 1997 年的论文 Globally consistent range scan alignment for environment mapping,作者 Lu 和 Milios 等人阐述了这个问题的基础。在上图中,图 (a) 显示了从 \(P_1\) 到 \(P_n\) 距离扫描随着时间累积误差的情况。每一步都会产生微小的误差,累积之后会使得环境地图不再准确。
在 (b) 中,通过使用相对位置限制对扫描数据进行对齐,地图结果得到了显著的改善。在算法中,作者保留了数据的所有本地帧 (local frames of data),以及所有节点之间的相对关系。
主要问题之一是:应该保留多少的历史信息呢?如果将新的测量同所有的历史数据进行比对,那么问题的复杂性会很快上升的一个无法处理的水平。因此相关算法需要减少关键帧的数量,采用一种「适者生存」的策略删除不太适用的数据 (ORB-SLAM 采用了这个策略)。
4 SLAM - Simultaneous Localization and Mapping
为了让 AR 工作,SLAM 算法需要解决如下挑战:
- 位置空间
- 无法直接控制的摄像头:现有的手机平台的 AR 应用,通常只能使用一个单目摄像头
- 实时
- 无漂移
下图显示了 MonoSLAM (I. D. Reid et al. 2007) 的例子,这个例子展示了我们需要达到的目标:追踪到的特征点,他们的相对位置,以及红外相机的位置。
5 SLAM 剖析
如何在 AR 场景应用并解决 SLAM 问题呢?
理解 SLAM 的一个好的起点是 Past, Present, and Future of Simultaneous Localiation and Mapping: Towards the Robust-Perception Age (Cadena et. al. 2016),这篇文章描述了如下的典型的 SLAM 结构:
系统包括四个部分
- 传感数据:在移动设备上,一般是摄像头,加速度计,陀螺仪。可能还会有 GPS,光传感器,深度传感器。
- 前端:第一步是特征提取。这些特征需要同地标 - 即关键点关联起来。另外,这些关键点会在视频流中被实时追踪。长期的消除漂移的关联方法通过识别出之前遇到过的环境来实现(loop cloure)。
- 后端:负责建立起不同的帧之前的关系,定位摄像头,以及整体的几何重建。有点算法会根据关键点进行稀疏重建,其他的算法则试图获取环境密集点云信息。
- SLAM 估计:SLAM 的结果包含特征、特征的位置和关系、以及摄像头的位置。
下面我们看一下 SLAM 的实现:ORM-SLAM。