作为VR头盔空间定位的代表,HTC Vive一直以其Lighthouse激光定位傲视群雄。也许Oculus、PSVR分别在用户体验和内容上有自己的优势,但要说到房间尺寸(Room-Scale)定位,则已经推出一年的HTC Vive,至今在全世界还没有对手,这也可以看出它激光定位方案的强大。
先给不玩VR的科普下(不玩VR你看这个文章干啥?),所谓Room-Scale,指的就是用户能否自由地在VR里行走。其实,所谓的VR三大硬件(HTC Vive、Oculus Rift、PSVR)都能实现一定程度的Room-Scale体验,但Oculus、PSVR采用摄像头为主的方案,效果并不怎么好,大多数情况下还是坐着不动玩更舒服。
而HTC Vive的激光方案,才让玩家真正能比较自由地在VR里行走,稳定性和行走范围均远远优于另外两者。可以说,HTC Vive啥都能黑,就是这个定位黑不得。
在2017年的CES上,国内硬件厂商大朋带来了双目激光定位方案Polaris,似乎是要以自研技术和硬件,对HTC Vive发出挑战。三月末又召开了发布会邀行业人现场体验。经过现场测试,大朋的双目激光定位方案反馈还不错。
但是我们仍然要问,大朋的双目激光定位原理为何?如何实现?相比HTC Vive又有哪些好处?本着刨根问底的精神,青亭网专门采访了大朋CEO陈朝阳,首次详细独家揭示大朋的技术奥秘。
首先来看看,HTC Vive的方案是怎么玩的?
首先,要想明白大朋比HTC Vive好在哪里,我们就必须得再详细阐述一下HTC Vive的定位方案(熟悉的小伙伴可以跳过这部分,直接看大朋的)。这一方案使用的是两个名为光塔(Lighthouse)的基站,对角摆放,拉出一块空间,不断发射激光来扫描空间里的HTC Vive和手柄。
那么,基站具体是怎么运作的?现在我们来拆解一下。
打开基站,会发现由三个部分组成,分别是LED灯阵列和两个电机。电机分别用于打出一横一竖两个激光面。
如下图,其中红色面为竖直的激光面,扫动方向是水平的,蓝色为水平激光面,扫动方向为上下垂直扫动,红色阴影部分位于蓝色面下方。
每当一个激光面遇到传感器,就会停止扫描并记录角度。假如两个面停止位置如图所示,则可以确定传感器位于两面相交线,即图中细红线上。
这样得到的位置信息是不全面的,因为只知道点在哪条线上,不知道具体在线上什么位置,就像去某个地方,只知道在某条街上却不知道门牌号码。因此需要安装多个传感器。
所以聪明的你可能已经猜到了,HTC Vive的传感器都放在头盔和手柄上,坑坑洼洼、如同月球表面的头盔上,每一个小坑都是一个传感器。并且传感器是固定的,不能移动。
实际上,系统并不需要确定每个传感器的位置。而只需要确定传感器所在的直线就好了。这就好像吃烤鸡腿,用手拿着可以直接确定鸡腿的位置,也可以拿几根签子穿着固定住,鸡腿的位置同样是确定的。
也就是说,确定位置并不一定需要传感器的点,还可以仅用足够多的线来确定头盔位置。只要知道头盔尺寸,依据下图就能确定位置了。
两个激光面扫描完一次,确定的是头盔上一个传感器距离基站的直线方程。只知道扫描到的传感器在这条直线上,但并不知道详细距离。
这个时候就需要知道头盔的尺寸了。然后通过专门的算法,明白在确定几条直线、并已知头盔大小的情况下,头盔唯一有可能的方位在哪里。
在两个激光面扫描完一个传感器后,该传感器就会关闭,以免下次再被扫到。等到扫到五个传感器后(Valve官方给出的数字),头盔定位完成。所有传感器重新打开,开始新一轮的扫描,如此反复。
新版Lighthouse基站的LED阵列排列有变化
从上所述,理论上传感器只需要五个就够了。然而,实际上定位时由于光线接受可能被遮挡,传感器之间又为了防止串扰信号必须保持距离,因此最后采用的传感器有几十个。所以不要再苛责你头盔为什么长那么丑了,满满的都是爱啊……
重点来了,如何实现完整的数据流程,完成从用户的移动到他们的头盔图像的变化呢?
我们要先确定关键的数据和采集方法。两个激光面能确定一条线(也就是上文所说的,传感器点所在的直线)。那么横竖激光两个面的位置怎么算?只需要角度就能知道了——角度是电机的角速度(转速)和用时的乘积,角速度是恒定的,相当于已知,因此记录下时间就能求出来。
下面是具体实现步骤了,对于不学理科的同学来说,可能还是有点复杂,打起精神!
首先基站会和传感器进行一次沟通,同步闪光(sync light),这样传感器会告诉传感器的控制芯片,让它把计时器(类似于秒表的功能)归零,接下来的10毫米内,会有一个激光面扫过,这个激光面接触到传感器的时候,传感器就会发出信号,计时器就停了,记录下时间,然后归零。紧接着另一个激光面扫过,再次记录时间,归零。
这个过程看似复杂,实际上两个电机只要以20毫秒转一圈的速度(也就是每秒50转)稳定运行,而电机上的激光发射器“此起彼伏”地出现就行了。时间值随后会来到传感器的集线器,再到数据收集芯片,通过WiFi信号以某种数据包形式和协议(如UDP)发送到基站的计算部分。
这样得到了两个时间值能转化为角度值,再转为两个面的方程,求出交线,就能获得一个之前说到的传感器所在的直线方程。然后诸多方程合并起来,通过算法算出一个头盔上传感器方位对应的位置,就是对头盔完成了定位。这个定位数据随后会由基站更新到计算机或主机,在3D引擎内修改摄影机位置,重新计算画面,发送到头盔显示器,完成一帧的显示。
那么,大朋是怎么做的呢?
说完了HTC Vive,终于轮到我们今天的正主儿——大朋了!根据青亭网对大朋CEO陈朝阳的采访,再加上观察和HTC Vive的Lighthouse原理推断,大朋Polaris结构应该类似这样:
画工丑了点,将就点吧……是的,你没看错,大朋的基站里是三组电机,比Vive多一组。分别为两个打出横激光面的电机和一个打出竖激光面的电机。
如下图,三个激光面会形成三条交线,实际上只任意用两条(比如红和蓝)就能确定交点,该点即为要确定的传感器位置。也就是说,三个扫描面的时候,不是确定传感器所在直线,而是直接把传感器所在位置确定了。
显然,这样定位方式比起Lighthouse的定位只能确定传感器所在直线位置要更加有效率。只要钉死三个点就能确定位置,也就相当于头盔上最少三个传感器就够了。(当然为了保证精确,实际上不止三个)
不过,实际中设计的时候为了防止横向两个面靠太近,影响精度(就像人要靠两眼间存在距离才好定位一样)。最好的办法就是,把两个横向电机放在纵向电机的上下两个位置。
这样传感器的数量比起Lighthouse大约能减少一半。但是存在问题是,如果激光面照不到传感器就没有效果了,为了实现无死角,最简单的方式就是在基站的另一面再放一个基站,就能覆盖到了,这样双基站的设计能让传感器数量再减一半。大概像这样:
最后需要的传感器数量大概是Lighthouse的四分之一左右(Lighthouse用了几十个传感器)。事实上,大朋官方也是这样宣传的,即头盔所需传感器相对Vive较少,仅需六个。头盔得以更轻便,而相对的,大朋的基站就要比Lighthouse体积更大。
实际工作顺序如下:
首先LED阵列发出闪光,与传感器控制芯片同步一次,然后开始计时。如果能做到16毫秒左右延迟的话,总周期应该是15毫秒以内。
这里假设是15毫秒。则闪光后第一个5毫秒内,第一个横向激光面扫过,传感器发信号之后记录时间;第二个5毫秒内,纵向激光面扫过,传感器发信号后记录时间;第三个5毫秒内,第二个横向激光面扫过,传感器发信号,记录时间,然后WiFi信号传输时间数据包给基站进行位置计算,上传到计算机或主机完成位置数据更新。
其实和HTC Vive很类似,只是多出一步横激光面的扫描,定位的不是点所在的直线,而是点的坐标。
陈朝阳的在读完青亭网的原理解析后,表示认可:“原理上已经写的很好了。没什么好补充的了。” 但他也强调:“95%的难度在工程实现上,太多细节要考虑了。”
国内专注于大空间多人定位的公司ZVR CEO郭伟也对青亭网指出,激光方案主要是工程方面的问题,在具体的电机调校、产品量产、供应链方面会有很多坑。
定位方案相关疑问
综上,我们对大朋的定位方案进行了解读。但是聪明如你,一定还有一些疑惑。是的,关于大朋的定位方案,从原理上来说,我们萌生了这几个问题(见文末附录)。
青亭网就这些问题对陈朝阳进行求证,对方给出了可以理解的答复:“目前还没到开源我们的所有原理的时候”。
笔者期待,作为国产硬件中少数采用自研技术方案的厂商,大朋的定位方案能够走出一条自己的路,用体验说话,在未来能够对这些问题作出完美的解答。