在第一部分中,我们了解了算法如何识别相机帧中的关键点。这些是跟踪和识别环境的基础。
对于增强现实,设备必须知道更多信息:它在世界上的 3D 位置。它通过自身与多个关键点之间的空间关系来计算这一点。这个过程称为"同时定位和地图构建" - 简称 SLAM。
NSDT工具推荐 : Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - AI模型在线查看 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割 - 3D道路快速建模
1、用于感知世界的传感器
高级视图:当您首次使用 Google ARCore、Apple ARKit 或 Microsoft Mixed Reality 启动 AR 应用时,系统对环境了解不多。它开始处理来自各种来源的数据 - 主要是相机。为了提高准确性,设备会结合来自其他有用传感器(如加速度计和陀螺仪)的数据。
基于这些数据,算法有两个目标:
- 构建环境地图
- 在该环境中定位设备
对于某些场景,这很容易。如果您可以自由地将信标放置在已知位置,则只需对距离进行三角测量,即可准确知道自己的位置。
对于其他应用,GPS 可能就足够了。
但是,移动增强现实通常没有已知信标的奢侈。GPS 也不够准确------尤其是在室内。
2、不确定的空间关系
让我们从基础开始,如 Cheeseman 等人在"不确定空间关系的随机地图"(1987 年)中所述。
在理想的世界中,你将拥有有关所有事物的确切位置的完美信息。这包括信标 (1) 的位置以及机器人 (2) 的位置。
不确定的空间关系 1
因此,你可以计算信标 (1) 和您自己的位置 (2) 之间的确切关系。如果你需要将机器人移动到 (3),可以准确推断出您需要移动到的位置和方式。
不确定的空间关系 2
不幸的是,在现实生活中的 SLAM 场景中,你必须使用不完善的知识。这会导致不确定性。
不确定的空间关系 3
这些点彼此具有空间关系。因此,你可以获得每个位置可能所在的概率分布。对于某些点,你可能具有更高的精度。对于其他点,不确定性可能很大。根据不确定性计算位置的常用算法是扩展卡尔曼滤波器、最大后验 (MAP) 估计或捆绑调整 (BA)。
由于点之间的关系,每个新的传感器更新都会影响所有位置并更新整个地图。保持一切最新需要大量的数学运算。
3、对齐感知世界
为了使增强现实可靠,将新测量与早期知识对齐是 SLAM 算法的最重要方面之一。每个传感器测量都包含误差------无论它们是从相机图像中得出的,还是从使用加速度计(里程计)的帧间运动估计中得出的。
对齐范围扫描。图片来源:Lu, F., & Milios, E. (1997)。用于环境映射的全局一致范围扫描对齐。自主机器人,4(4),333-349。
在"用于环境映射的全局一致范围扫描对齐"(1997) 中,Lu 和 Milios 描述了该问题的基本原理。在上图中,(a) 显示了范围扫描误差如何随时间累积。从一个位置 P1 ... Pn,每个小的测量误差都会随着时间的推移而累积,直到生成的环境地图不再一致。
通过基于相对姿势约束网络对齐 (b) 中的扫描,生成的匹配得到显着改善。在算法中,它们维护所有本地数据帧,以及它们之间的空间关系网络。
主要问题之一是:要保留多少历史记录?如果将每个新测量值与所有历史记录进行比较,应用程序运行的时间越长,复杂性就会增加到无法管理的水平。因此,算法通常会将历史记录减少到关键帧,并/或通过使用"适者生存"机制进一步完善策略,以便稍后删除没有预期那么有用的数据(如 ORB-SLAM 中所做的那样)。
4、SLAM -- 同步定位和映射
要使增强现实发挥作用,SLAM 算法必须解决以下挑战:
- 未知空间。
- 不受控制的摄像头。对于当前基于手机的 AR,这通常只是一个单目摄像头。
- 实时。
- 无漂移。
这幅来自 I. D. Reid 等人(2007 年)的 MonoSLAM 算法的图像展示了您想要实现的目标。跟踪的特征点、它们在空间中的关系以及推断出的相机位置。
跟踪图像中的地标及其在映射视图中的位置。图片来源:Davison, A. J.、Reid, I. D.、Molton, N. D. 和 Stasse, O. (2007)。MonoSLAM:实时单摄像头 SLAM。IEEE 模式分析与机器智能交易,(6),1052-1067。
5、SLAM 剖析
如何在增强现实场景中应用和解决这个问题?
理解 SLAM 原理的一个很好的起点是:Cadena 等人的《同时定位和地图绘制的过去、现在和未来:迈向稳健感知时代》(2016 年)。他们描述了 SLAM 的典型架构如下:
SLAM 算法概述
该系统由 4 个部分组成:
- 传感器数据:在移动设备上,这通常包括摄像头、加速度计和陀螺仪。它可能由其他传感器增强,如 GPS、光传感器、深度传感器等。
- 前端:第一步是特征提取,如第 1 部分所述。这些特征还需要与地标相关联 - 具有 3D 位置的关键点,也称为地图点。此外,需要在视频流中跟踪地图点。
长期关联通过识别以前遇到过的位置(环路闭合)来减少漂移。 - 后端:负责建立不同帧之间的关系、定位相机(姿势模型)以及处理整体几何重建。一些算法会创建稀疏重建(基于关键点)。其他算法则尝试捕获环境的密集 3D 点云。
- SLAM 估计:结果包含跟踪的特征、它们的位置和关系,以及相机在世界中的位置。
让我们仔细看看具体的 SLAM 实现:ORB-SLAM。
6、示例:ORB-SLAM 算法
Mur-Atal、Montiel 和 Tardós 的 ORB-SLAM是一种非常有效且最新的算法。继任者 ORB-SLAM2 除了单目系统外,还增加了对立体或深度相机的支持。特别棒的是,这些算法在 GPL-v3 许可下以开源形式提供。Jeroen Zijllmas 在一篇博客文章中描述了如何在你自己的计算机上运行 ORB-SLAM,所以我不会在这里详细介绍。
ORB-SLAM 是一种视觉算法,因此不使用加速度计和陀螺仪的里程计。考虑到该算法仍然运行良好,结果令人印象深刻。
7、特征选择
如第 1 部分所述,许多算法的任务是找到关键点并生成描述符。传统的SIFT和 SURF 算法始终用作参考,但通常对于实时使用来说太慢了。
顾名思义,ORB-SLAM 算法依赖于 ORB 特征跟踪算法。ORB 基于与第 1 部分中的 BRISK 算法相同的底层方法来查找关键点和生成描述符,因此我不会详细介绍。
关键点数据库
一般来说,ORB-SLAM 会分析每个帧中的关键点。然后,这些关键点会与检测到这些关键点的关键帧的引用一起存储在地图中。这种关联非常重要;它用于匹配未来的帧并优化之前存储的数据。
8、将关键点转换为 3D 地标
SLAM 最有趣的部分之一是 2D 相机帧中找到的关键点如何实际获得 3D 坐标(然后称为"地图点"或"地标")。在 ORB-SLAM 中,这很大一部分发生在 LocalMapping::CreateNewMapPoints()(第 205 行)中。
ORB-SLAM 实际操作:相机图像中的绿色方块 = 跟踪的关键点。下方地图视图中的蓝色框:关键帧。红色框 = 当前相机视图。红点 = 可见的局部地图点。图片来源:Raúl Mur Artal 的ORB-SLAM 视频
每当算法从相机获得新帧时,它首先执行关键点检测。然后将这些关键点与前一个相机帧匹配。到目前为止,相机运动提供了一个很好的想法,即在新帧中再次找到相同的关键点;这有助于满足实时要求。匹配结果会产生初始相机姿势估计。
接下来,ORB-SLAM 尝试改进估计的相机姿势。该算法将其地图投射到新的相机帧中,以搜索更多关键点对应关系。如果足够确定关键点匹配,它会使用额外的数据来优化相机姿势。
通过对连接帧中的匹配关键点进行三角测量来创建新的地图点。三角测量基于帧中关键点的 2D 位置,以及整个帧之间的平移和旋转。最初,匹配是在两帧之间计算的 - 但稍后可以扩展到其他帧。
9、回环检测和回环闭合
ORB-SLAM 算法执行的回环检测。图片来源:Mur-Artal, R.、Montiel, J. M. M. 和 Tardos, J. D. (2015)。ORB-SLAM:一种多功能且精确的单目 SLAM 系统。IEEE Transactions on Robotics,31(5),1147-1163。
SLAM 算法中的另一个关键步骤是回环检测和回环闭合:ORB-SLAM 检查帧中的关键点是否与之前从不同位置检测到的关键点匹配。如果相似度超过阈值,则算法知道用户已返回已知位置;但途中的不准确性可能会引入偏移。
通过将坐标校正从当前位置传播到上一个位置的整个图形,地图将使用新知识进行更新。
回环闭合前(左)和后(右)的重建地图。图片来源:Mur-Artal, R., Montiel, J. M. M., & Tardos, J. D. (2015)。ORB-SLAM:一种多功能且精确的单目 SLAM 系统。IEEE Transactions on Robotics,31(5),1147-1163。
10、SLAM 和 Google + Microsoft + Apple?
快速现实检查:当今的移动 AR 中使用了什么?所有数据都将惯性传感器的数据与摄像头馈送融合在一起。
- Google:在文档中,Google 描述了 ARCore 正在使用一种称为并发里程计和地图绘制的过程 - 这本质上只是更广泛术语 SLAM 的另一个名称。该名称还表明他们正在集成惯性传感器进行里程计。专利中描述了一般架构。维基百科上关于 SLAM 的文章提到,谷歌正在使用之前描述的类似 Bundle Adjustment / Maximum a Posteriori (MAP) 估计。
- 微软:HoloLens 和 Windows Mixed Reality 中发生的许多事情都基于之前为 Kinect 所做的研究。因此,微软与 SLAM 相关的专利已于多年前发布。此外,HoloLens 的新研究模式允许访问执行的 SLAM 算法的结果。微软在 GitHub 上提供了一些入门示例 - 包括 OpenCV 集成。
- 苹果:几年前,苹果收购了开发 SLAM 算法的 Metaio 和 FlyBy。苹果正在使用视觉惯性测距/SLAM - 因此他们还将摄像头与其他手机传感器相结合以提高精度。WWDC 2018 的会议视频对该技术进行了很好的概述。
ARKit 执行的 SLAM,如 WWDC 2018 上所展示的。图片来源:Apple
11、基于手机的增强现实的未来
SIFT 算法对许多研究课题都很有价值,包括自动驾驶汽车导航。因此,提高和扩展质量和性能是一个非常活跃的研究课题。
在"紧密耦合的单目、双目和立体 VINS 的比较分析"(2017 年)中,Paul 等人比较了将惯性测量单元 (IMU) 的数据与光学传感器相结合的算法,当今的大型商业 AR 框架也这样做了。除此之外,他们还将他们的新算法与最先进的 ORB-SLAM2 和 OKVIS 算法进行了比较,发现他们设法进一步提高了可靠性和速度。
此外,将语义含义引入 SLAM 算法的尝试也显示出希望,正如几周前 Schönberger、Johannes L. 等人发表的"语义视觉定位"(2018)所展示的那样。
当然,AR 系统通常会尝试越来越多地了解环境。虽然 ARKit 和 ARCore 从跟踪简单平面开始,但 HoloLens 已经尝试通过空间理解推断出更多知识。Apple 在 ARKit 2 中引入了 3D 对象跟踪。因此,我们将看到虚拟对象与真实环境之间的集成大大改善。
凭借这些有希望的结果和最新的研究进展,我们可以期待手机上的增强现实在未来几个月和几年内进一步得到很大改善!