每个手机里都有IMU。
IMU实现三自由度(相当于人的前庭系统)算出加速度和方向,就像你走路的时候可以加速减速走,也可以拐弯。
<img src=”https://pic2.zhimg.com/e0e1883481d97d6bc0130a927ad5be1d_b.jpg” data-rawwidth=”1920″ data-rawheight=”1080″ class=”origin_image zh-lightbox-thumb” width=”1920″ data-original=”https://pic2.zhimg.com/e0e1883481d97d6bc0130a927ad5be1d_r.jpg”>
传统的智能手机只能用来调节手机的方向,横向(landscape)或者纵向(portrait),所以对IMU的要求不高,但是在tango中方向被重新定义了,以重力为垂直方向,一切与水平面为正,所以tango的IMU比普通的要精准。
<img src=”https://pic3.zhimg.com/4140a477d1622379aff6db990ab939be_b.jpg” data-rawwidth=”299″ data-rawheight=”388″ class=”content_image” width=”299″>我们都知道三自由度是方向追踪,可以tracking设备在三个轴上的方向旋转。我们都知道三自由度是方向追踪,可以tracking设备在三个轴上的方向旋转。
这里会用到《如何形象地理解四元数? – 计算机图形学》
Quaternions and spatial rotation
位置追踪
追踪位置的方法分为两种,常见的是第三人称的追踪,也是三大厂(PSVR、oculus和HTC vive所用的方法)——《追踪设备的使用场景和覆盖范围有哪些局限?是否会影响VR可交互的空间的设计?》就是摄像头在第三方追踪一个被你标记的东西,这样很容易就能够定位到该物体在空间中的绝对位置。虽然精准,但是使用场景是受限的,也就是需要先搭一个空间,然后装上tracker,在这个空间里进行追踪。
常见的GPS就是空间内的第三人称的绝对位置跟踪。
对了,鼠标也是在2D平面上的相对位置跟踪,在平面上拖动鼠标,做到了平面上的位置追踪。
<img src=”https://pic1.zhimg.com/238ae7bc88ca6b26d54ae88a4aeaada8_b.png” data-rawwidth=”562″ data-rawheight=”567″ class=”origin_image zh-lightbox-thumb” width=”562″ data-original=”https://pic1.zhimg.com/238ae7bc88ca6b26d54ae88a4aeaada8_r.png”>第二种是第一人称的追踪,就是设备通过摄像头这只眼睛探索周围环境,定位自己所在的位置,但是这个位置是第二种是第一人称的追踪,就是设备通过摄像头这只眼睛探索周围环境,定位自己所在的位置,但是这个位置是相对的。把你扔到一个地方,你自己走回家这叫『导航』,而你知道你自己走了多远,知道自己在已知的这块区域中的位置,叫『定位』,你通过前庭知道自己的姿势和运动状态(站着、跑着、躺着、跳着、坐车……)。
<img src=”https://pic1.zhimg.com/b08ed9b282bdd61a6611bfbceab644c8_b.jpg” data-rawwidth=”450″ data-rawheight=”299″ class=”origin_image zh-lightbox-thumb” width=”450″ data-original=”https://pic1.zhimg.com/b08ed9b282bdd61a6611bfbceab644c8_r.jpg”>
然而,这么复杂的追踪,被Google用一个相机就实现了。
注意图中的motion tracking camera,感知tango在三维空间中的运动。
<img src=”https://pic2.zhimg.com/8d6deda5fdab9cc787d202943bfd56b1_b.png” data-rawwidth=”1600″ data-rawheight=”924″ class=”origin_image zh-lightbox-thumb” width=”1600″ data-original=”https://pic2.zhimg.com/8d6deda5fdab9cc787d202943bfd56b1_r.png”>
他有一个鱼眼镜头(相当于人的眼睛,认识到自己所在的位置)检测图像。
<img src=”https://pic3.zhimg.com/032af3c740460eb82f980765e90bf0fa_b.jpg” data-rawwidth=”223″ data-rawheight=”377″ class=”content_image” width=”223″>图像是edge还是Corner呢?两帧之间图像产生了多大的变化呢?那个像素点移动了多少呢?从而推测出你的运动,这叫feature tracking。图像是edge还是Corner呢?两帧之间图像产生了多大的变化呢?那个像素点移动了多少呢?从而推测出你的运动,这叫feature tracking。
<img src=”https://pic3.zhimg.com/14c265974d3fc9f707f8fe0664f11932_b.jpg” data-rawwidth=”1920″ data-rawheight=”1080″ class=”origin_image zh-lightbox-thumb” width=”1920″ data-original=”https://pic3.zhimg.com/14c265974d3fc9f707f8fe0664f11932_r.jpg”>
注意时态,motion tracking是根据现在和以前的图像对比,而它的时态是到目前为止。所以它的track动作应是实时的,因为你现在的motion是根据上一帧和这一帧算出来的(前一帧是base frame ,后一帧是target frame。),而帧与帧之间只有10ms。而根据这个算出来的运动轨迹可以估算出之后大概的运动轨迹。
最神奇的地方在于这个广角相机从它看到的东西推断出它所走的轨迹和方向。
GPS是第三方绝对定位,而这是第一人称相对定位,就是你走在一个地方,你知道你走了多远,你知道你走过哪里,面朝哪里,你走路的姿势。
<img src=”https://pic4.zhimg.com/0b5d95f0e7cb45bf16362a246cb6e3f3_b.jpg” data-rawwidth=”1920″ data-rawheight=”1080″ class=”origin_image zh-lightbox-thumb” width=”1920″ data-original=”https://pic4.zhimg.com/0b5d95f0e7cb45bf16362a246cb6e3f3_r.jpg”>
这两个传感系统整合的数据才能算出你移动了多少?
为什么只有IMU算不出来呢?就像你闭上眼睛不知道自己走了多远一样。
把你蒙上眼睛绑在车上,你光通过加速度也不知道车走了多远吧?
但是这个也只是相对速度。
而我说的以上,一秒钟要算100次,实时的。
而这个实时运算只要达到60帧人就会感觉流畅而不晕。
但是因为人的视场角有210°。
所以它用了160°的广角鱼眼镜头。
想象门口的门后的角落,因为对比度很高而很容易被识别出来。
在整个motion tracking中,相机寻找和识别着那些特征的『地貌』
更广角的镜头就能找到更多的细节,从而增加可靠性和精准度。
<img src=”https://pic4.zhimg.com/1d64087ab3465da23f75d2ed0aa24333_b.jpg” data-rawwidth=”781″ data-rawheight=”589″ class=”origin_image zh-lightbox-thumb” width=”781″ data-original=”https://pic4.zhimg.com/1d64087ab3465da23f75d2ed0aa24333_r.jpg”>而方向追踪+位置追踪就实现了六自由度。而方向追踪+位置追踪就实现了六自由度。
<img src=”https://pic3.zhimg.com/44dc78045286eed44ae62727b246757e_b.jpg” data-rawwidth=”619″ data-rawheight=”698″ class=”origin_image zh-lightbox-thumb” width=”619″ data-original=”https://pic3.zhimg.com/44dc78045286eed44ae62727b246757e_r.jpg”>
被追踪的像素有它相应的坐标系。
它tracking的是基于原点(0,0,0)的相对位置。
<img src=”https://pic3.zhimg.com/1f953cd7efc15c700e75a4497f732902_b.jpg” data-rawwidth=”451″ data-rawheight=”692″ class=”origin_image zh-lightbox-thumb” width=”451″ data-original=”https://pic3.zhimg.com/1f953cd7efc15c700e75a4497f732902_r.jpg”>
Frames of reference
我们向另外一个人说:『前面那个箱子离我们3米』
那就不够specify。
『那3米是从哪里到哪里呢?它的原点在哪呢?』
所有的运动都是相对于你的起始点。
什么是起始点呢?
就是你点开这个应用,连接到tango的服务成功之后。
你开始使用的那一瞬间,就开始记录帧。
那一帧为base frame,这一帧上的像素作为参考坐标系的原点。
之后的运动都是相对于这个点。
当你对比这两帧图像的变化。
就能算出这段时间内设备产生的位移和旋转。
而这个虚拟中的原点和设备之间有个对应,可能是设备的几何中心或是重心。
<img src=”https://pic4.zhimg.com/a029493416b471df41668208ea5549bf_b.jpg” data-rawwidth=”802″ data-rawheight=”606″ class=”origin_image zh-lightbox-thumb” width=”802″ data-original=”https://pic4.zhimg.com/a029493416b471df41668208ea5549bf_r.jpg”>
tango在现实中的移动在这里用叫viewing frustum的四棱锥代替,而这个四棱锥可以代表VR中的两个,Virtual camera(即用户在VR中头部的眼睛,或者用户看到的视角)
把现实中的动作映射进虚拟空间,这本质也是VR交互中的『输入』。而tango起到了一个中介的作用,把现实世界中用户的动作翻译给虚拟空间。
<img src=”https://pic2.zhimg.com/af9ce18ca85572f71da0f620292a02b1_b.png” data-rawwidth=”1920″ data-rawheight=”1162″ class=”origin_image zh-lightbox-thumb” width=”1920″ data-original=”https://pic2.zhimg.com/af9ce18ca85572f71da0f620292a02b1_r.png”><img src=”https://pic1.zhimg.com/4bcef9a4ae5ebad3fa324603083780b0_b.png” data-rawwidth=”1920″ data-rawheight=”1020″ class=”origin_image zh-lightbox-thumb” width=”1920″ data-original=”https://pic1.zhimg.com/4bcef9a4ae5ebad3fa324603083780b0_r.png”>
<img src=”https://pic3.zhimg.com/4659149f9b1e002e3dfd3ec62b5e1cda_b.png” data-rawwidth=”1920″ data-rawheight=”1020″ class=”origin_image zh-lightbox-thumb” width=”1920″ data-original=”https://pic3.zhimg.com/4659149f9b1e002e3dfd3ec62b5e1cda_r.png”>
但是position tracking也不是是万能的。
大多数时候现实和虚拟的映射关系是1:1,但是因为不受限,如果你设计100米的大道,那么用户就要走100米,如果你设计8000米的海底,那么用户真得打个洞8000米。哪怕你设计10米的花园小径,用户可能因为在现实中因为被墙壁或者门挡住而无法前往。
所以,这里提出了两点需求:1.给用户选择它们可以到达的区域;2.让用户可以缩放VR空间。
Project Tango Explorer
<img src=”https://pic1.zhimg.com/e27183fb866365a8d3653e3ef1ad4a30_b.png” data-rawwidth=”300″ data-rawheight=”300″ class=”content_image” width=”300″>这个应用演示了tango的几大基本功能。这个应用演示了tango的几大基本功能。
可视化设备在3D中的运动。
学习和载入区域描述文件,也就是别的tango走过的地方,它读一遍就读到了那个tango的记忆。
<img src=”https://pic4.zhimg.com/b2dbb7415c99e56850ddd9c36bfe69f3_b.png” data-rawwidth=”1440″ data-rawheight=”900″ class=”origin_image zh-lightbox-thumb” width=”1440″ data-original=”https://pic4.zhimg.com/b2dbb7415c99e56850ddd9c36bfe69f3_r.png”>你可以看到这个四棱锥。当你移动的时候,它显示出它的六自由度信息。你可以看到这个四棱锥。当你移动的时候,它显示出它的六自由度信息。
<img src=”https://pic4.zhimg.com/40ff0f81be95c6b7cb4244a386a1d92f_b.png” data-rawwidth=”1440″ data-rawheight=”900″ class=”origin_image zh-lightbox-thumb” width=”1440″ data-original=”https://pic4.zhimg.com/40ff0f81be95c6b7cb4244a386a1d92f_r.png”><img src=”https://pic3.zhimg.com/08054eaf248ce2ecc060edc7c6b679aa_b.png” data-rawwidth=”1440″ data-rawheight=”900″ class=”origin_image zh-lightbox-thumb” width=”1440″ data-original=”https://pic3.zhimg.com/08054eaf248ce2ecc060edc7c6b679aa_r.png”>左边的这些点我们叫point cloud 。
左边的这些点我们叫point cloud 。
<img src=”https://pic3.zhimg.com/00d2456914ccb63901d85c1c490d1c42_b.jpg” data-rawwidth=”1280″ data-rawheight=”720″ class=”origin_image zh-lightbox-thumb” width=”1280″ data-original=”https://pic3.zhimg.com/00d2456914ccb63901d85c1c490d1c42_r.jpg”><img src=”https://pic1.zhimg.com/d0f2f61eb138323006d75b7e789f2530_b.jpg” data-rawwidth=”1280″ data-rawheight=”720″ class=”origin_image zh-lightbox-thumb” width=”1280″ data-original=”https://pic1.zhimg.com/d0f2f61eb138323006d75b7e789f2530_r.jpg”>
<img src=”https://pic2.zhimg.com/248fcd04ebc9508787cf82d90ed09e25_b.jpg” data-rawwidth=”1280″ data-rawheight=”720″ class=”origin_image zh-lightbox-thumb” width=”1280″ data-original=”https://pic2.zhimg.com/248fcd04ebc9508787cf82d90ed09e25_r.jpg”>
<img src=”https://pic2.zhimg.com/2d156ca80a71979fa57aa3da43837781_b.jpg” data-rawwidth=”1280″ data-rawheight=”720″ class=”origin_image zh-lightbox-thumb” width=”1280″ data-original=”https://pic2.zhimg.com/2d156ca80a71979fa57aa3da43837781_r.jpg”>
<img src=”https://pic3.zhimg.com/9462a081001841224ea74a97da1eb7f2_b.jpg” data-rawwidth=”1280″ data-rawheight=”720″ class=”origin_image zh-lightbox-thumb” width=”1280″ data-original=”https://pic3.zhimg.com/9462a081001841224ea74a97da1eb7f2_r.jpg”>
<img src=”https://pic3.zhimg.com/9c4f963fc6061c7fd5e7085fa1c0d0ba_b.jpg” data-rawwidth=”1280″ data-rawheight=”720″ class=”origin_image zh-lightbox-thumb” width=”1280″ data-original=”https://pic3.zhimg.com/9c4f963fc6061c7fd5e7085fa1c0d0ba_r.jpg”>
<img src=”https://pic1.zhimg.com/8ad4745f99b8c7a5cc16d5e7c5f70714_b.jpg” data-rawwidth=”1280″ data-rawheight=”720″ class=”origin_image zh-lightbox-thumb” width=”1280″ data-original=”https://pic1.zhimg.com/8ad4745f99b8c7a5cc16d5e7c5f70714_r.jpg”>
<img src=”https://pic1.zhimg.com/c50925576a800625ac2c946c680e8ffc_b.jpg” data-rawwidth=”1280″ data-rawheight=”720″ class=”origin_image zh-lightbox-thumb” width=”1280″ data-original=”https://pic1.zhimg.com/c50925576a800625ac2c946c680e8ffc_r.jpg”>
<img src=”https://pic1.zhimg.com/e866080ab12a3ff117b172ef56194774_b.jpg” data-rawwidth=”1280″ data-rawheight=”720″ class=”origin_image zh-lightbox-thumb” width=”1280″ data-original=”https://pic1.zhimg.com/e866080ab12a3ff117b172ef56194774_r.jpg”>
<img src=”https://pic2.zhimg.com/8dd7013a54383499ff8941bde3511295_b.jpg” data-rawwidth=”1280″ data-rawheight=”720″ class=”origin_image zh-lightbox-thumb” width=”1280″ data-original=”https://pic2.zhimg.com/8dd7013a54383499ff8941bde3511295_r.jpg”>
<img src=”https://pic3.zhimg.com/ad787265df4bc6704c3d24cd1bd5723e_b.jpg” data-rawwidth=”1280″ data-rawheight=”720″ class=”origin_image zh-lightbox-thumb” width=”1280″ data-original=”https://pic3.zhimg.com/ad787265df4bc6704c3d24cd1bd5723e_r.jpg”>
<img src=”https://pic1.zhimg.com/3e56d9be6f0b781318ef9031da06a7c4_b.jpg” data-rawwidth=”1280″ data-rawheight=”720″ class=”origin_image zh-lightbox-thumb” width=”1280″ data-original=”https://pic1.zhimg.com/3e56d9be6f0b781318ef9031da06a7c4_r.jpg”>
<img src=”https://pic4.zhimg.com/675adcd4de155f7071a160dcbf337817_b.jpg” data-rawwidth=”1280″ data-rawheight=”720″ class=”origin_image zh-lightbox-thumb” width=”1280″ data-original=”https://pic4.zhimg.com/675adcd4de155f7071a160dcbf337817_r.jpg”>
记录列车在轨道上的行驶路径。
<img src=”https://pic3.zhimg.com/14f1eed9a612eef8cea1357a3ddcffa6_b.jpg” data-rawwidth=”1280″ data-rawheight=”720″ class=”origin_image zh-lightbox-thumb” width=”1280″ data-original=”https://pic3.zhimg.com/14f1eed9a612eef8cea1357a3ddcffa6_r.jpg”><img src=”https://pic2.zhimg.com/76680436e1cf8746635b2a3d45620159_b.jpg” data-rawwidth=”1280″ data-rawheight=”720″ class=”origin_image zh-lightbox-thumb” width=”1280″ data-original=”https://pic2.zhimg.com/76680436e1cf8746635b2a3d45620159_r.jpg”>