位置追踪技术是虚拟现实设备的核心也是最复杂的一部分,有好的位置追踪技术才能保证良好的沉浸感,不过要做好位置追踪并非易事,它对硬件以及算法都有非常高的要求。目前业界已经采用的位置追踪技术方案都有差异,不过从现有的产品体验来看,现在主流的几种方案也有很大的提升空间。
那么虚拟现实是如何实现位置追踪的?在设计过程中,如何权衡各个位置追踪的指标?厂商应该注意哪些问题?本期硬创公开课将为大家答疑解惑。雷锋网雷锋网雷锋网
嘉宾介绍:张海威,青瞳视觉联合创始人,2008年毕业于中国科学院自动化研究所模式识别与人工智能国家重点实验室,主要研究方向为SLAM定位、三维重建、全景拼接、动作捕捉、表情捕捉等领域,著有授权发明专利三项。2015年8月创立上海青瞳视觉科技有限公司,定位于人工智能领域的人机交互技术。目前核心产品为动作捕捉、表情捕捉,主要应用于影视、动画、游戏、教育、医疗、体育、军工、虚拟现实、增强现实等领域。青瞳视觉专注于提供好用的交互技术,降低人与计算机之间的沟通成本,让计算机与人类做朋友。
首先我想明确几个概念,这些概念我们平时都会提,但是在提的时候可能嘴上说的是A心里想的却是B,所以有必要明确一下,避免造成不必要的混淆。这三个概念分别是“位置追踪”、“位姿估计”和“动作捕捉”。
我们生活在三维世界中,所以“位置追踪”指的是持续地明确感兴趣物体在三维空间中的位置。
这里面的关键词是“持续”和“位置”,“持续”好理解,“位置”需要好好明确一下。“位置”指的是物体在三维世界中的坐标,也就是物体在“X、Y、Z”三个方向上的坐标。位置信息是三个自由度的,或者叫3Dof。
那么“物体”是什么?
“物体”可能是我们的头,也可能是一把枪,或者是一把椅子。头也好,枪或椅子也罢,这些物体,都是有一定体积的,而“位置”是一个点的概念,这里说的“物体的位置”其实指的是“物体上某一点在三维世界中的XYZ坐标”。这个很重要,尤其对虚拟现实来说,一点点偏差带来的体验很可能差别很大。
“位姿估计”就很好解释了,它是指“持续地明确感兴趣刚性物体在三维空间中的位置和旋转”。位姿信息是六个自由度的,或者叫6Dof,我们在虚拟现实中需要的是六个自由度的信息的,而不是简单的三个自由度的位置信息。
与“位置追踪”不同的是,空间中的一个点是没有旋转信息的,因此旋转是针对一个三维物体,它不是一个点,也不是一根线。同一时刻,对于同一个刚体上的不同点A、B,它们的位置是不同的,但是如果将A、B分别与刚体上的点C连接起来,那么线段AC、BC相对于初始状态的旋转角度是一样的。说到初始状态,我们谈位置,必然有一个坐标系原点,谈旋转,也得有旋转状态的原点。比如有人把道具水平放置认为是旋转零点,有人把道具竖着放认为是旋转零点(旋转角度是0),如果你愿意,也可以把道具斜着放看作是旋转零点,只是有一点,保证模型的旋转零点与实际道具的旋转零点保持一致。
最后是“动作捕捉”。默认情况下,我们谈动作捕捉是指捕捉人全身的动作。人有很多关节,每个关节比如小臂、大臂等都可以近似看作是一个刚体,因此人的动作有很多的自由度。在实际的动作捕捉应用中,一般捕捉的是较大关节的动作,要想捕捉每块骨骼每块肌肉的运动情况代价是比较大的,甚至是不可实现的。
现在的主流技术大概分为:光学、惯性、电磁、机械、UWB等。
这其中光学最复杂,也分几个子流派,比如一种分类方法是按照相机数量和标记点数量可以划分为单相机单标记点(PS MOVE)、单相机多标记点(PS VR、Oculus、HTC Vive、SLAM)、多相机单标记点(Ximmerse、depth VR)以及多相机多标记点(青瞳、Optitrack)等几种方案。这其中标记点是否有源可进一步分为主动标记点和被动标记点的方案。根据相机曝光方式不同可以分为卷帘快门(rolling shutter)和全局快门(global shutter)。其它还有基于压电、声音等传感器的技术。
总的说来,光学中单标记点的方案只能捕捉刚体在空间中的3Dof信息,多标记点的方案可捕捉刚体在空间中的6Dof位姿信息,多相机多标记点的方案可捕捉全身动作。
其实很好理解,单标记点,比如数学上是一个无限小的球吧,这个球在空间中只有位置信息,它无论怎样旋转还是一个球。如果刚体上有两个球,那么这两个球连成一条线,就可以捕捉它的5个自由度,三个球及以上就能解算其6个自由度了。
惯性和机械方案无法捕捉位置信息,也就无法捕捉位姿,只能捕捉人的全身动作。电磁方案可捕捉位姿和全身动作,UWB主要用来捕捉位置信息。由于每种方案都有自己的优缺点,因此实际使用中可能是混合方案。
红外(多相机多标记点)方案由于它的全面性因而被广泛采用,其原理也没有那么复杂,主要是基于三角测量(三角重构)机理。
在捕捉之前,需要对系统进行校准(标定),校准分相机内参(这些参数只与相机本身有关)校准与外参(这些参数与相机本身无关,与相机之间的关系有关)校准。
有的厂家出厂前已经做了内参校准,因此使用时只做外参校准即可,这样可以保证精确度和校准速度,但是失去了灵活性,因此大部分厂家使用的时候对内外参数同时进行校准。
有了内外参数之后,就可以通过三角重构的方法恢复出标记点在空间中的位置信息。
相机拍照是一个由三维映射到二维的过程,丢失了深度信息,通过光心的射线在图像上映射为一个图像点。校准了内参之后,图像上任何一点可以反求出其在三维空间中的射线方向,标记点肯定在这条射线上。那么,如果有两条射线,这两条射线相交就能求出标记点在空间中的位置信息。但是标记点一般情况下是运动的,所以要求拍照的两个相机要同步。假如标记点静止不动,也可以用同一个相机在不同位置拍照计算。实际图像中,所有的标记点都只是一个个的小白点,这需要把这些小白点给区分出来,一一对应起来之后再去做三角重构。
知道了标记点的位置信息后,就可以计算出一组标记点(一般称其为标记体或者Rigid Body)的6Dof或者计算出人体的关节运动信息。
在这个过程中,需要用到相机校准、标记点的图像提取、标记点的识别与匹配、标记点的深度信息恢复、标记体的6Dof恢复,另外需要处理遮挡、噪声等干扰因素。这些环节看上去简单,不过对技术还是有一定要求的,任何一个环节不理想都会导致结果的不理想。对了最后所有这些运算必须在几ms甚至1ms内完成。
一个大的原则是,相机和标记点越分散捕捉的精度越高。类似Oculus、PSVR或者HTC Vive这种单相机(这里把Vive归为单相机类别中,因为其数学本质是一致的,只是在数据处理上有一些差别)方案用一个通俗但不大准确的比喻是“近大远小”。虽然这个比喻是不恰当的,但是能说明一些问题。
假如已知某个物体的大小,可以通过看到的大小来判断其离我们有多远。当这个物体离我们较近的时候,这个判断是较为精确的,当离得远的时候就不那么靠谱了。比如远处的山是很难估计出其到底有多远。也就是说,当目标物体离我们比较远的时候,它在深度方向(Z方向)上的变化(前后运动)反应在图像上并不明显。但是假如我们还可以从另外一个角度去观察物体,那么它在另外一个图像上很可能是沿X、Y方向(左右、上下方向)运动,那么这个变化就明显多了,因此相机之间越分散,恢复出的深度信息越准确,相机之间的连线叫“基线”。
同样道理,可以推知,Oculus或者HTC这种方案,无法做到距离很远,距离远了精度会下降得很厉害(很多人听到激光就想当然地认为精度很高)。当然Light house是用时间分辨率去换算空间分辨率,很巧妙的方法在相同成本情况下将分辨率提高了至少一个或者两个数量级吧,所以相对会好一些。
类似道理,我们也可以推知标记点越分散捕捉效果越好的结论,所以如果我们精确测量,会发现HTC的头盔的捕捉精度要高于其手柄的捕捉精度。
最后,自然,数量越多冗余信息越多,所以一般情况下会越准确,但这个提升不是线性的,而且还要考虑到这个冗余信息也有可能是噪音,所以实际使用中够用就好。
前面对大概的算法构成已进行了回答,这里再对“视场角”进行一下强调。
光学捕捉最大的弊端在于遮挡,如果一个相机的视场角越小,越容易被遮挡,捕捉的范围也是越小,捕捉不到的死角就会越多。如果增大相机的视场角,则捕捉范围变大,可以互相照应的范围变大自然抗遮挡性就增强,死角变少。但是如果图像分辨率不变的前提下,视场角越大意味着物体在图像上所占据的像素越少,图像的畸变也越大,意味着看到更大的场景从而有更多的信息需要处理,因此视场角的大小很能反映光学捕捉的技术水平。
至于对系统的要求其实也还好,主要是对CPU和内存要求高一些。因为强调的是实时,所以一般很难用到GPU去加速,因为动捕的数据在不停地吞吐。因为强调实时,所以算法要能并行处理,并且要权衡优化与速度的关系。有些系统追踪效果很好,但是用了较多的滤波,这个就会带来延时,平时可能没感觉,在VR中有时候会感觉不好。
不同的应用场合可能是不同的地形,可能会有障碍物,也可能是室内室外使用,或者是其它场景。总的来说相机的布置是因地制宜的,保证覆盖掉整个的追踪范围,然后每个追踪范围最少能有两个相机看到。
仅就覆盖范围这点来说,对于红外追踪来讲,区别不是很大,只要范围别特别特别小,另外范围越大越有优势。由于相机都是有一定可视角度的,这个可视范围是类似锥形体,离相机越近范围越小。因此空间很小的环境里,当目标离相机很近而相机的视场角又不大的时候,待捕捉目标很容易跑出相机的捕捉范围从而导致捕捉失败,甚至在小空间里人的身体会把相机整个挡住从而造成系统捕捉彻底失败。
解决方案是尽可能增加相机可视角度,而对于相机被人体整个遮挡住的这种情况则光学很遗憾地表示实在是无能为力了,此情况下那空间是相当狭小了,只能借助其它手段来做追踪了。
其实提高帧率会减小延时,就像前述所说的,将图像处理放到前段,通过硬件的方式来进行实时处理,我们算法理论上对于百万像素的图像已经可以做到1000帧/秒了。当然到1000帧这种对数据的实时处理要求很高,只能尽量提升算法了。或者可以一部分数据离线后处理,这个就不是VR的应用了。
评价一个捕捉系统性能优劣有很多指标,个人认为首先需要保证足够低的延时,大家现在都已经明白了延时对于VR的影响有多大。其次要保证捕捉的稳定性,通俗地讲抖不抖。最后保证捕捉的精度,也就是准不准。
延时是一个相对比较复杂的概念,对于虚拟现实的运动捕捉(所有方式的运动捕捉)来讲主要有数据的获取、数据的处理、数据的传输、数据的应用这么几个环节会引入延时,因此也要对症下药去解决各个环节产生的延时。
在数据获取阶段,尽量采用全局曝光的感光芯片(其实采用Global shutter更主要的是因为对于高速运动的物体来说,这种曝光模式会减小运动模糊的发生),另外尽量缩短曝光时间,再有就是加大数据获取的频次,对于相机来讲就是提高帧速。
在数据处理环节,一方面把图像处理部分前端化,即图像处理放在硬件上完成,比如青瞳的MC1300系列,图像处理仅延后图像拍摄2个像素时钟,也就可以简单理解为在相机完成拍照的同时完成了图像处理。所以这块的延时已经降低到最小,可以忽略不计了。
另外当我们汇总到各个相机的信息后还需要进一步的数据处理,此时需要对数据结构及框架、算法流程等进行精心设计才能保证延时尽可能低,比如当相机帧速提高到500帧的时候,那么所有的计算必须在2ms之内完成。
在数据传输阶段,一方面要对网络通讯协议进行修改,另一方面也要保证有一个良好的网络环境。说到这个还是比较坑的,前段时间参加展会,现场的无线环境实在糟糕,导致延时很大,后来换了功率很大的5G才缓解了,这个后面还得继续改进。
最后,数据应用阶段的延时处理也是相当重要的。动捕系统跟显卡渲染一般是不同步的,这就意味着动捕数据送到后很可能需要等待几ms甚至最坏的情况需要等待16.67/8.33ms(运动捕捉数据刷新率为60/120Hz情况下)才会被显卡使用。显卡在渲染完成之后还要经过屏幕的显示过程(现在好像都不用双buffer了,不然还要延时),这又会带来延时。糟糕的是这些延时是动捕系统所无法控制的,解决的办法是做运动预测。我们不会傻傻地将运动捕捉的原始数据送入显卡,而是会根据游戏刷新的时刻来做动作预测,这会大大减少延时。
所以我们经常会看到有人把相机刷新率来等效为延时,这其实是不严谨的做法,也是无奈,因为大家都需要一个参数嘛,要我说别看参数,实际体验一下最靠谱。另外补充一点,对于VR来讲,运动捕捉的数据刷新率也不是越高越好。因为这些数据是通过网络进行传输的,当感兴趣的目标刚体很多的时候,一味提高刷新率会对网络造成比较大的负担,因此120Hz可能是一个比较舒服的选择。
稳定性的提升一方面需要靠多相机或者多标记点的冗余信息来保证,一方面要看算法的优化程度,另外多传感器融合比如光惯混合是事半功倍的选择。
对于光学捕捉来讲,精度的保证主要有两点:
其一是保证图像处理的精度。通过简单的计算,我们可以知道在某个视场角下某款分辨率的传感器在某个距离一个像素代表多大的物理尺寸。假如说一个像素代表的是边长1cm的正方形,那么可能精度就是1cm,我们可以通过提升相机分辨率来提升精度,比如分辨率提升10倍,那精度就到1mm了。但实际中还可以通过提升图像处理的精度来提升捕捉精度,比如通过亚像素处理,如果可以精确到1/10像素,那么就可以到1mm的精度了,如果精确到1/100像素,那就是亚毫米了。因此精度不能简单看图像分辨率。
另外对于精度影响巨大的是相机的校准和对畸变的校正(其实都是相机校准)。这个校准一方面要算法和配套的硬件做得足够精确,另外也要求执行校准的人比较有经验,这也是光学系统难于使用的原因之一,经验不足的人校准出来的精度可能很差,这就要求提供更傻瓜的办法。最后就是通过合理的相机布局,和标记点布局来提升精度和稳定性。
一般提到光学捕捉的局限性我们首先想到的就是遮挡问题,这的确是光学类的方案最大的问题,不过实际使用中也没有那么严重。
一种意见认为,类似Oculus、HTC Vive这种只需要一个相机即可追踪,因此其抗遮挡性比较强,但这里有另外一面没有被提及,那就是这种方案需要一个相机同时捕捉到多个标记点才可以,这个条件在有些情况下其实是比较难满足的。对于多相机的方案来讲,每个相机看到1-2个marker点很可能最终就把目标的位姿给捕捉出来了。因此好的标记体设计配合好的算法处理,是可以从很大程度上避免遮挡问题的。除非捕捉现场有太多的障碍物,或者当地的边边角角也要全部无死角捕捉,否则这个问题不会太严重。
我认为光学捕捉最大的局限性在于价格和易用性上,这其中易用性是最大问题。因为硬件的价格从来都是跟量有关,如果达到了现在手机的量级,那么价格都不会是问题。当然在没达到这么大量级的时候,也不能放弃治疗嘛,会不停地提升算法以降低对硬件的依赖程度,相信不久后会有小范围(50平米)内的低成本方案出现。
易用性是个很大的问题。在虚拟现实兴起之前,光学捕捉主要应用于影视动画领域,而我国能熟练应用这一系统的动捕师数量可能在10人左右。人数少一方面是价格高的原因,用的人少,另一方面也是系统过于复杂,老外的软件上各种参数,不懂行的人要学习很久才可以。这对于高端的影视等行业还可以接受,但是如果到线下运营或者到普通消费者手中就行不通了,他们希望的是即插即用,稳定可靠。
光学还有一个局限性,就是不能识别无限多的感兴趣目标点。Light house是分布式运算,所以刚体数量理论上可以任意多。但这只是理论上,实际要考虑遮挡,考虑传输问题。光学的方法识别一两百个刚体是可以的,但要识别大几百甚至上千个刚体,这个我们还没测试过。不过算法是并行处理的,所以有必要也是可以分布计算的。
另外被动光学动捕是依靠标记点之间的距离来识别身份的,所以有人担心这个距离组合有上限。这个其实也不必过于担心,只要距离超过5mm就被认为是一个新的距离,而且不同距离的排列组合数量也是庞大的。最后也可以采用主动marker的方法,通过LED的闪烁模式再提供上千个不同的marker点,这样排列组合下来也可以认为是无限的了。
其它局限性比如受光线影响较大,在室外会有问题,如果采用主动marker的话这个也可以解决。对了光学捕捉的范围有限,不像惯性捕捉,理论上可以无限远。
因为光学和惯性二者有非常强的天然互补性,二者结合技能提升捕捉效果又能有效减少成本,所以一般会配合使用。
其实不单是光学与惯性,惯性也跟其它传感器一起配合使用从而搭配出各式各样的方案。
光学的强项在于能够提供绝对的位置和方向信息,但是容易被遮挡,数据易抖动,刷新率低(刷新率高的话成本急剧上升)。惯性的强项是检测动态数据比如角速度和加速度很精确,不会被遮挡,刷新率很高,但是测量位置信息会有累积误差,而磁场的不稳定也导致惯性方案没有绝对的方向信息。
至于分工合作主要分为两种:一种是简单的由光学来提供位置信息,惯性来提供方向信息,这种方案的优点是成本低,缺点是把光学与惯性的缺点都带进来了;还有一种是光学与惯性做数据融合,而不是简单的1+1=2这种数据整合。Light house属于数据融合做得非常好的方案,有的情况下它的光学信息只有30帧,但是呈现出来的效果是精度较高,数据也平滑稳定。
现在大家最看好的应该还是深度相机的方案,从技术实现的终极形态来看,深度相机结合惯性,可以完成SLAM、动作捕捉、物体的识别与定位等等一系列功能,但是技术难度还是比较大的。
人是很懒惰的动物,进入虚拟世界就是想抛开现实世界的束缚。在虚拟世界里,所有的东西都是虚拟的,但你的感受必须是真实的。虚拟现实技术的发展就是把一切现实给数字化后经过艺术加工重新展现出来,在这里,你如果把虚拟世界当成真实世界,那么虚拟现实才能说是成功了。
从这个角度看,其实虚拟现实和增强现实在输入端是非常类似的,区别主要是在显示端。一个好的交互,它能让你任意徜徉在虚拟世界,让人感受到自己的身体,还能去触碰这个虚拟世界,并感受到反馈。现在已经可以近似做到这一点了,但还不够自然,不够稳定,不够易用,不够便宜。当这些成熟了虚拟现实才会大爆发的吧。现在就像春秋战国时代,诸子百家,百家争鸣,百花齐放。