AR开发权威指南:基于AR Foundation
上QQ阅读APP看书,第一时间看更新

1.2 AR技术原理

AR带给用户奇妙体验是因为有数学、物理、几何、人工智能、传感器、工程、计算机科学等高新技术的支持,对开发人员而言,了解其技术原理有助于理解AR的整个运行生命周期;理解其优势与不足,可更好地服务于应用开发工作。

1.2.1 位置追踪

环境注册与跟踪是AR的基本功能,即时定位与地图映射(Simultaneous Localization And Mapping,SLAM)是在未知环境中确定周边环境的一种通行技术手段,其最早由科学家Smith、Self、Cheeseman于1988年提出。SLAM技术解决的问题可以描述为:将一个机器人放入未知环境中的未知位置,想办法让机器人逐步绘制出该环境的完全地图,所谓完全地图(Consistent Map)是指可使人不受障碍地进入每个角落的地图。SLAM作为一种基础技术,最早用于军事(核潜艇海底定位就有了SLAM的雏形),如今,它逐步走入大众的。当前,在室外我们可以利用GPS、北斗等导航系统实现高精度的定位,这基本上解决了室外的定位和定姿问题,而室内定位的发展则缓慢得多。为解决室内的定位定姿问题,SLAM技术逐渐脱颖而出。SLAM一般处理流程包括Track和Map两部分。所谓的Track是用来估测相机的位姿的,也叫前端,而Map部分(后端)则是进行深度的构建,通过前端的跟踪模块估测得到相机的位姿,采用三角法(Triangulation)计算相应特征点的深度,然后进行当前环境Map的重建,重建出的Map同时为前端提供更好的位姿估测,并可以用于闭环检测。SLAM是机器人技术、AR技术中自主导航的基础技术,近年来发展得非常快,图1-2是Kumar教授进行SLAM实验的图示。

▲图1-2 Kumar教授进行SLAM实验

定位与跟踪系统是AR的基础,目前在技术上,解决室内定位与位姿问题主要采用视觉惯性测距系统(Visual Inertial Odometry,VIO)和惯性导航系统。综合使用VIO与惯性导航系统可以通过软件实时追踪用户的空间位置(用户在空间上的六自由度姿态)。VIO在帧刷新之间计算用户的位置,为保持应用流畅,VIO速度必须达到每秒30次及以上。这些计算要并行完成两次,通过视觉(摄像)系统将现实世界中的一个点与摄像机传感器上的一帧像素匹配,从而追踪用户的姿态。惯性导航系统(设备加速度计和陀螺仪统称为惯性测量单元,即Inertial Measurement Unit,简称IMU)也可以追踪用户的姿势,VIO与惯性导航系统并行计算,在计算完之后,卡尔曼滤波器(Kalman Filter)结合两个系统的输出结果,评估哪一个系统提供的估测更接近用户的“真实”位置,从而作出选择。定位与跟踪系统追踪用户在三维空间中的运动,作用类似于汽车里程表与加速计等。

提示 

自由度(Degrees of Freedom,DOF)是指物理学当中描述一个物理状态,可独立对物理状态的结果产生影响的变量的数量。运动自由度是确定一个系统在空间中的位置所需要的最小坐标数。在三维坐标系中描述一个物体在空间中的位置和朝向信息需要6个自由度数据,即6DOF,指x轴、y轴、z轴方向上的三维运动(移动)加上俯仰/偏转/滚动(旋转)。

惯性导航系统的最大优势是IMU的读取速度大约为1000次每秒,并且这是基于加速度的(设备移动),可以提供更高的精度,通过航迹推算(Dead Reckoning)即可快速测量设备移动。航迹推算是一种估算方法,类似于向前走一步,然后估测行走距离。估测出的结果会有误差,并且这类误差会随时间累积,所以IMU帧率越高,惯性导航系统从视觉系统中复位所需的时间越长,追踪位置与真实位置偏差就越多。

VIO使用摄像头采集视觉信息,设备帧率通常为30帧/秒并且依赖场景复杂度(不同的场景帧率也有所不同)。通常随着距离的增大,光学系统测量误差也不断地增大(时间也会有轻度影响),所以用户移动得越远,误差就越大。

惯性导航系统与视觉测量系统各有各的优势和不足,但惯性导航和视觉测量是基于完全不同的测量方法,它们之间并没有相互依赖的关系。这意味着在遮蔽摄像头或者只看到一个具有很少光学特征的场景(例如白墙)时惯性导航系统照样可以正常工作,或者设备在完全静止的条件下,视觉测量系统可以呈现出一个比惯性导航系统更加稳定的状态。卡尔曼滤波器会不断地选择最佳姿态,从而实现稳定跟踪。

在具体实现上,为了获得精确定位,VIO需要获取两张有差异的场景图像,然后对当前位置进行立体计算。人眼通过类似原理观察3D世界,一些跟踪器也因此依赖立体相机。采用两台相机比较好计算,测量两个相机之间的距离,同时捕获帧进行视差计算;而在只有一个相机时,可以先捕捉一次画面,然后移动到下一个位置进行第二次捕捉,再进行视差计算。使用IMU航迹推算可以计算两次数据读取位置之间的距离然后正常进行立体计算(也可以多捕获几次使计算更加准确)。为了获得较高的精度,系统依赖IMU精确航迹推算,从IMU读取的加速度和时间测量中,可以计算出速度和在获取两次画面之间设备移动的实际距离(公式S=0.5×a×t2)。使用IMU的困难是从IMU中除去误差以获得精确的加速度测量结果,在设备移动的几秒钟之内,若每秒运行1000次,一个微小的错误会造成很大程度的误差积累。

深度相机可以帮助设备增强对环境的理解。在低特征场景中,深度相机对提高设备地面检测、度量标度以及边界追踪的精度有很大的帮助。但是深度相机能耗较大,因此只有以非常低的帧率使用深度相机才能降低设备耗能。移动设备上的深度相机的拍摄范围也比较有限,这意味着它们只适合在手机上的短距离范围内使用(几米的范围),另外深度相机在成本方面也比较昂贵,因此原始设备制造商(Original Equipment Manufacturer,OEM)目前都避免在手机上大量采用。

立体RGB或鱼眼镜头也有助于人们看到更大范围的场景(因为立体RGB和鱼眼镜头具有潜在的光学特性。例如通过普通镜头可能只会看到白色的墙壁,但是通过一个鱼眼镜头可以在画面中看到有图案的天花板和地毯,Tango和Hololens就使用这种方法)。并且相对VIO而言,它们可以用更低的计算成本来获取深度信息。由于手机立体摄像头之间的距离非常近,因此手机上深度计算的精度范围也受到限制(相隔数厘米距离的手机相机在深度计算的误差上可以达到数米)。除此之外,TOF(Time Of Flight)、结构光方式也在快速的发展当中。

但综合设备存量、成本、精度各方面因素,VIO结合IMU进行位置定位跟踪仍将是以后一段时间内的主流做法。

1.2.2 视觉校准

为了使软件能够精确地匹配摄像机传感器上的像素与现实世界中的“点”,摄像机系统需要进行精密的校准。

几何校准:使用相机的针孔模型来校正镜头的视野和镜筒效果。由于镜头的形状,所有采集到的图像都会产生变形,软件开发人员可以在没有OEM帮助的情况下使用棋盘格和基本公开的相机规格进行几何校正,如图1-3所示。

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

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

1.2.3 惯性校准

当我们在考虑IMU时,一定要记住IMU是用来测量加速度而不是距离或速度的,这点很重要。IMU数据读取错误造成的计算结果误差会随着时间的推移快速累积,校准和建模的目标就是确保距离测量具有足够的精度。理想情况下,在使用IMU时可以使摄像机具有足够长的时间来弥补由于用户遮盖镜头,或者场景中发生其他意外所造成视频帧跟踪的丢失。使用IMU测量距离的航迹推算是一种估测,但是通过对IMU行为进行建模,找出产生错误的所有来源,然后通过编写过滤器来减少这些错误,可以使这个估测更加精确。想象一下用户向前走一步,然后猜测用户走了几米这样的场景,仅凭一步去估测结果会有很大的误差,但是如果重复上千步,那么对用户每步的估测与实际行走距离的估测最终会变得非常准确。这就是IMU校准和建模的原理。

在IMU中会有很多错误来源,它们都需要分析捕获并过滤。假设一个机器臂通常用于以完全相同的方式重复地移动,对其IMU的输出不断进行采集和过滤,直到IMU的输出能够和机器臂的实际移动十分精确地匹配,这就是IMU校准与建模的过程。从IMU中获得非常高的精度很困难,对于设备厂商而言,必须消除所有引起这些误差的因素。Google和微软甚至将他们的设备发送到太空微重力环境中,以便消除额外的误差。

1.2.4 3D重建

3D重建(3D Reconstruction)系统能够计算出场景中真实物体的形状和结构,并对真实环境进行3D重建,因此可以实现虚拟对象与真实物体发生碰撞或遮挡,如图1-4所示。要将虚拟对象隐藏在真实物体之后,就必须要对真实物体进行识别与重建。目前来看3D重建还有很多难点需要克服,当前移动端AR基本都不支持3D重建,因此AR中的虚拟对象会一直浮在真实物体的前面。3D重建通过从场景中捕获密集的点云(使用深度相机或者RGB相机),将其转换为网格,并将网格传递给3D重建系统(连同真实世界的坐标),然后将真实世界网格精准地放置在相机所捕获的场景上。在对真实环境进行3D重建后虚拟对象就可以与真实物体互动,实现碰撞或遮挡。

▲图1-4 Magic Leap演示的遮挡效果

提示 

3D重建在Hololens术语中叫空间映射,在Tango术语中叫深度感知。

通过图像获取、摄像机标定、特征提取、立体匹配获取比较精确的匹配结果,结合摄像机标定的内外参数,就可以恢复三维场景信息。由于3D重建精度受匹配精度、摄像机的内外参数误差等因素的影响,只有重建前各个环节的精度高、误差小,才能较好地恢复真实场景的三维空间结构。我们只了解一下3D重建的概念,本书中我们不会用到3D重建相关的知识。但3D重建在构建AR系统深度信息方面非常重要,3D重建是实现真实物体与虚拟物体碰撞或遮挡的基础。