AR Foundation增强现实开发实战(ARKit版)
上QQ阅读APP看书,第一时间看更新

1.2 AR技术原理

AR应用带给使用者奇妙体验的背后是数学、物理学、几何学、人工智能技术、传感器技术、芯片技术、计算机科学技术等基础科学与高新技术的深度融合,对开发人员而言,了解其技术原理有助于理解AR整个运行生命周期,理解其优势与不足,更好地服务于应用开发工作。

对AR应用而言,最重要也是最基础的功能是感知设备(使用者)位置,将虚拟数字世界与真实物理环境对齐,其核心技术基础是同时定位与建图(Simultaneous Localization And Mapping,SLAM)技术,即搭载特定传感器的主体,在没有环境先验信息的情况下,于运动过程中建立环境模型,同时估计自己的运动。SLAM技术用于解决两个问题:一个是估计传感器自身位置;另一个是建立周围环境模型。通俗地讲,SLAM技术就是在未知环境中确定设备的位置与方向,并逐步建立对未知环境的认知(构建环境的数字地图)。SLAM技术不仅是AR/MR技术的基础,也是自动驾驶、自主导航无人机、机器人等众多需要自主定位技术的基础。经过近30年的发展,SLAM技术理论、算法框架已基本定型,现代典型视觉SLAM技术框架如图1-2所示。

图1-2 现代典型视觉SLAM技术架构示意图

1.2.1 传感器数据

携带于运动主体上的各类传感器,如激光传感器、摄像机、轮式编码器、惯性测量单元(Inertial Measurement Unit,IMU)、深度传感器等,它们采集的环境信息为整个SLAM系统提供数据来源,其中轮式编码器会测量轮子转动角度,IMU会测量运动角速度和加速度,摄像机、激光传感器、深度传感器则用来读取环境的某种观测数据,它们测量的都是间接的物理量而不是直接的位置数据,我们只能通过这些间接的物理量推算运动主体位姿(Pose,包括位置和方向)。就移动端设备而言,我们更关注来自设备摄像头的图像信息、IMU运动信息(可能还会有深度传感器信息),理论上可以通过这些数据解算出运动主体精确的位姿信息和环境地图,但遗憾的是来自各类传感器的数据都不是完全准确的,都带有一定程度的噪声(误差),这使问题变得复杂化,因为噪声数据会导致计算误差,而这种误差会随着时间的推移而快速累积(试想一下,一个微小的误差以每秒60次的速度迅速放大),很快就会导致定位和建图完全失效。

以图像数据为例,来自摄像头的图像本质上是某个现实场景在相机成像平面上留下的一个投影,它以二维的形式记录了三维的场景,因此,图像与现实场景相比少了一个深度方向的维度,所以仅凭单幅图像无法恢复(计算)拍摄该图像时相机的位姿,必须通过移动相机获取另一幅图像形成视差才能恢复相机运动,这也就是移动设备在使用AR应用时必须移动才能实现正确运动跟踪的原因。

图像在计算机中以矩阵的形式进行存储和描述,为精确匹配图像中的像素与现实世界中的环境点,图像数据还要进行校准才能进入SLAM系统中,校准分为相机光度校准与几何校准两部分。

(1)光度校准:光度校准涉及相机底层技术,通常要求OEM厂商参与。因为光度校准涉及图像传感器本身的细节特征及内部透镜所用的涂层材料特性等,光度校准一般用于处理色彩和强度的映射。例如,正在拍摄遥远星星的望远镜连接的相机需要知道传感器上一像素光强度的轻微变化是否确实是源于星星的光强变化或者仅仅是来源于传感器或透镜中的像差。光度校准对于AR运动跟踪的好处是提高了传感器上的像素和真实世界中图像点的匹配度,因此可使视觉跟踪具有更强的稳健性及更少的错误。

(2)几何校准:以普通相机为例,几何校准使用针孔相机模型校正镜头的视野和镜筒畸变。由于镜头的加工精度、安装工艺等缘故所有采集到的图像都会产生变形,软件开发人员可以在没有OEM帮助的情况下使用棋盘格或公开的相机规格进行几何校正,如图1-3所示。

图1-3 对图像信息进行几何校准示意图

对SLAM技术而言,光度校准确定了真实物理点与成像点颜色与强度映射,镜头出厂后不会再发生变化,而由于镜头加工精度、安装工艺所导致的畸变却会影响真实物理点与成像点的位置对应关系,它们对整个SLAM系统的精度影响非常大,必须进行预先处理。常见的畸变有桶形失真和枕形失真两种,如图1-4所示。

图1-4 图像畸变类型

除了图像数据噪声和畸变外,IMU数据也不准确,IMU产生数据的频率非常高,通常能达到每秒100~1000次,IMU误差主要来自噪声(Bias and Noise)、尺度因子(Scale Errors)和轴偏差(Axis Misalignment),在极短时间内,可以信赖IMU数据,但由于IMU数据频率高,误差会在短时间内快速累积,因此也需要对IMU数据进行校准。

深度传感器也会带来误差,除了深度传感器本身的系统误差和随机误差,环境中的透明物体、红外干扰、材质反光属性都会增加深度值的不确定性,也需要进行误差校准和外点剔除。

1.2.2 前端里程计

基于视觉的SLAM前端里程计又称为视觉里程计(Visual Odometry,VO),其主要任务是估算相邻图像间的运动,建立局部地图。移动设备通常配备有IMU传感器,因此,在移动设备中的前端里程计融合了视觉和IMU各传感器数据,可以提供更高精度和稳健性。

里程计通过定量地分析图像与空间点的几何对应关系、相对运动数据,能够估计相机运动,并恢复场景空间结构,前端里程计只计算相邻时刻的相机运动,不关联之前的数据,因此不可避免地会出现累积漂移(Accumulation Drift),以这种方式工作,先前时刻的误差会传递到下一时刻,导致经过一段时间后,估计的运动轨迹误差越来越大,原本直的通道变成了斜的,原本圆的场景变成了椭圆的,为解决累积漂移问题,需要引入额外的抑制技术——后端优化和回环检测。

1.2.3 后端优化

概括地讲,后端优化主要指处理SLAM过程中的噪声问题。虽然希望所有输入的数据都是准确的,然而在现实中,再精确的传感器也带有一定的噪声。便宜的传感器测量误差较大,昂贵的则较小,有的传感器还会受磁场、温度、红外线的影响,所以除了解决“从相邻时刻估计出相机运动”之外,我们还要关心这个估计带有多大的噪声及如何消除这些误差。后端优化要考虑的问题,就是如何从这些带有噪声的数据中,估计整个系统的状态,以及这种状态估计的不确定性大小。这里的状态既包括运动主体本身的轨迹,也包含地图。在SLAM框架中,前端给后端提供待优化的数据,以及这些数据的初始值,而后端负责整体的优化过程,面对的只有数据,不关心这些数据到底来自什么传感器。在ARKit中,前端和计算机视觉研究领域更为相关,例如图像的特征提取与匹配等,也包括图像数据与IMU或者TOF数据的融合,后端则主要负责滤波与非线性优化算法。通过后端优化,我们能够比较有效地抑制误差累积,将整个SLAM系统维持在一个可接受的精度范围之内。

1.2.4 回环检测

回环检测,又称闭环检测(Loop Closure Detection),主要解决位姿估计随时间漂移的问题。假设实际情况下,运动主体经过一段时间运动后回到了原点,但是由于漂移,它的位置估计值却没有回到原点。如果有某种手段感知到“回到了原点”这件事,或者把“原点”识别出来,我们再把位置估计值“拉”过去,就可以消除漂移了,这就是所谓的回环检测。回环检测与“定位”和“建图”都有密切的关系。事实上,我们认为,地图存在的主要意义,是为了让运动主体知晓自己到达过的地方。为了实现回环检测,需要让运动主体具有识别曾到达过场景的能力。实现回环的手段有很多,例如可以在环境中的某个位置设置一个标志物(如一张二维码图片),只要它看到了这个标志,就知道自己回到了原点,但是,该标志物实际上是对环境位置的一种人为标识,对应用环境提出了限制,而我们更希望通过运动主体自身携带的传感器(图像数据),来完成这一任务。例如,可以判断图像间的相似性,来完成回环检测,这一点和人类是相似的,当我们看到两张相似图片时,容易辨认它们来自同一个地方,当然,在计算机中判断两张图片是否相似比我们想象的要难得多,这是一个典型的人觉得容易而计算机觉得难的命题。

如果回环检测成功,则可以显著地减小累积误差,所以回环检测,实际上是一种计算图像数据相似性的算法。由于图像的信息非常丰富,使正确检测回环的难度也降低了不少。在检测到回环之后,我们会把“A与B是同一个点”这样的信息通知后端优化算法,后端根据这些新的信息,把轨迹和地图调整到符合回环检测结果的样子。这样,如果我们有充分而且正确的回环检测,就可以消除累积误差,得到全局一致的轨迹和地图。

1.2.5 建图

建图(Mapping)是指构建地图的过程。地图是对环境的描述,但这个描述并不是固定的,需要视SLAM的应用而定。相比于前端里程计、后端优化和回环检测,建图并没有一个固定的形式和算法。一组空间点的集合可以称为地图,一个3D模型也是地图,一个标记着城市、村庄、铁路、河道的图片亦是地图。地图的形式随SLAM的应用场合而定,按照地图的用途,地图可以分为度量地图和拓扑地图两种。

度量地图强调精确地表示地图中物体的位置关系,通常用稀疏(Sparse)和稠密(Dense)对它们进行分类。稀疏地图进行了一定程度的抽象,并不需要表达所有的物体。例如,我们选择一部分具有代表意义的标志,称为路标(Landmark),那么一张稀疏地图就是由路标组成的地图,而不是路标的部分就可以忽略掉。相对地,稠密地图着重于建模所有看到的场景。对于定位来讲,稀疏地图就足够了,而对于导航来讲,则需要稠密地图。

拓扑地图(Topological Map)是一种保持点与线相对位置关系正确而不一定保持图形形状与面积、距离、方向正确的抽象地图,拓扑地图通常用于路径规划。

在移动端AR设备中,主要使用稀疏地图实现对物理环境的映射,但在搭载有LiDAR、TOF传感器的设备上,可以通过物理方法得到场景深度值,利用这些深度信息,通过算法就可以建立对环境的映射(对环境场景几何表面进行重建),因此允许虚拟对象与真实物体发生碰撞及遮挡,如图1-5所示。

环境映射是实现真实物体与虚拟物体碰撞与遮挡关系的基础,在对真实环境进行3D重建后虚拟对象就可以与现实世界互动,实现碰撞及遮挡。

通过SLAM技术,我们不仅能解算出运动主体位姿,还可以建立起周围环境的地图,对齐虚拟数字世界与真实物理世界,因此,就能以正确的视角渲染虚拟元素,实现与真实物体一样的透视、旋转、物理模拟现象,营造虚实融合的AR体验。

图1-5 对场景重建后实现遮挡示意图