[Tango] Basic Knowledge
Project Tango类设备能够给开发者在哪些领域带来机会。
- 室内导航*:室内GPS信号的缺失,使得Project Tango设备会成为室内导航重要应用场景之一。有了它,你就不会在不熟悉的室内商场、机场迷路。三维场景的室内导航,为盲人提供了更大的便利。【 路径规划算法浅谈】
- 游戏:虚拟现实游戏和新型交互游戏前景可期。有人指出,Project Tango设备与美国宇航局勇气号探测器并无太大区别。此类设备可以通过扫描现实世界,让信息与虚拟世界相融合,这也使得我们能够随时随地玩虚拟现实或现实增强游戏。若结合头盔或Goolge Glass,更能增强游戏的沉浸感,从而获得置身于真实世界的感觉。上文也提到,已经有厂商为此类设备开发专用引擎。另外Project Tango类设备从某种意义来说还可以是另外一种Kinect,这也使得我们还能在移动设备上使用手势玩游戏。
- 图形处理:由于绝大部多数的照片和视频是二维的,因此,抛除专业软件不谈,大多普通用户接触到的各种图片处理软件,基本是在二维角度进行修改。而当能够处理纵横信息的设备出现后,3D图形处理需求随之出现,能够修改纵横信息,让背景或角度处理的更加自然、真实的新的图片处理软件机会从而诞生。
- 3D扫描软件和3D打印机流行:3D家庭打印机已经面世多年,价格也不算昂贵,但为什么没能流行?原因主要还是3D扫描打印存在局限性,大多数人打印物品只能用现有的打印模板或通过专业绘图软件。但Project Tango类设备的出现,极可能为3D打印带来了完美输入端,遇到喜欢的事物,只要扫描下即可。
- 商品购物软件:正如上文所说,该设备提供了空间扫描能力,因此你在买家具前,只要对着想摆放的房间拍一下,就能在看家具时知道是否合适。这一功能甚至可以帮助用户网上买合身的衣服,只要扫描出自己身体的信息,就能知道衣服是否合适。
- Project Tano类设备还能让信息呈现更加自然:如果说互联网的出现,让我们能够近距离看这个世界,那么Project Tano类设备则让我们能更加真实地看这个世界。一旦此类产品成为消费级设备,富含各种物体的“纵横”信息,在保证准确率的前提下,也必能让信息的呈现更加自然、真实。
Google Project Tango 发展: link
Project Tango --> ATAP (All Things Are Possible,ATAP是Google收购Motorola(后来又卖给了联想)后保留的一个重要部门),更要说起Johnny Lee。
- 07年12月John神在YouTube上传了一系列视频,记录了用Wii遥控手柄追踪人的手指,通过改装后的Wii遥控手柄和投影仪制造出多点触摸电子白板,还有用Wii遥控手柄追踪人的头部位置,与此同时,游戏画面也为了适应观众的视角而发生改变。从这几个实验中,我们可以看到当下Leap Motion、Oculus Rift等下一代人机交互方式的影子。
- 之后他加入了微软的Project Natal (该项目的成果是风靡全球的Kinect),
- 后来跳槽到Google X,
- 再之后加入Motorola ATAP(All Things Are Possible),最终带领团队在2014年6月5日启动Project Tango。
三块技术:
- 运动追踪(Motion Tracking),
- 深度感知(Depth Perception)
- 区域学习(Area Learning)。
我们可以通过John神的职业道路,由简入繁来看看Project Tango里面的黑科技是如何一步一步实现的。
运动追踪
单目视觉技术的升级版Feature Tracking (Google称为特征捕捉)。特征捕捉如何理解呢? 再回到John神的例子里,我们不再固定接收器的位置了,反而是拿着接收器(这里我们不再叫它接收器了,叫采集设备或相机)移动;而对面只有两个光点的发射器也变成一个一个的光点贴在John神家里屋子的各个角落。
当我们移动相机时不断地一帧一帧进行拍摄,因为拍摄到的光点的相对位置在不断变化(这里“变化”是指拍摄到的两帧之间同一个光点的相对位置变化),通过计算我们可以得到相机的移动距离。简单来说Tango设备在不断循环的一个过程就是:拍摄——识别特征点(个人估计是SIFT点)——匹配特征点——筛去错误匹配——坐标换算。当然Project Tango的运动追踪不仅如此,他还能通过一个内置的6轴惯性传感器(加速度计和陀螺仪)来捕捉相机的加速度和运动方向。
当融合了以上两类传感器的数据之后Project Tango就“完美”(其实还有瑕疵)实现了三维运动追踪。
区域学习
为什么说还有瑕疵的?因为运动追踪只是单纯得到了相机移动的轨迹,然而对于相机所处的场景是零认知。所以一旦设备被关掉,它之前的运动轨迹就会被“忘掉”。最大的问题还是运动追踪中所累积的误差,或者叫漂移,在长距离使用后真实位置会和运算位置有很大差异。
为解决这个问题,John神团队为Tango设备设定了一种学习模式。这应该是他在Google X里面无人驾驶汽车研究成果的冰山一角。这种学习模式理解起来就简单很多了,为了让Tango设备具有一定记忆,而不再像一个被蒙着眼睛的人一样需要靠数自己走了多少步来计算距离,Project Tango可以让用户预先录入某个场景(这里要特别提醒的是,录入的数据不光包括了运动追踪里面所识别的特征点,还包含了场景本身),当用户重回这个场景的时候Tango设备会自动用录入的数据来纠正运动追踪的数据,这个纠正的过程中录入场景里的那些特征点会被当作观测点,一旦发现与当下特征点匹配的观测点,系统便会修正当下的追踪数据。这就是Project Tango的第二大技术核心——区域学习。
深度感知
如果说把深度感知作为Project Tango的第三大技术核心,我觉得有点虚,毕竟Google也是采用的第三方的深度传感器。不过对此Google并没有掖着藏着,而是很大方的表明Tango设备可以选择任意一种现今流行的深度感知技术。而对这项技术的顺利应用多半也要归功于John神在Project Natal的经历了。Kinect一代的推出震动了业界,震动了学术界,同时也把结构光(Structured Light)的概念推广了出去。那么他到底是怎么实现深度检测的呢?检测到的“深度”又是什么概念呢?
结构光顾名思义是有特殊结构(模式)的光,比如离散光斑,条纹光,编码结构光,等等。他们被投射到待检测物体或平面上,看上去就好像标尺一样。根据用处不同,投影出来的结构光也可以分为不可见的红外光斑,黑白条纹可见光,单束线性激光,等等。比如Kinect投射出来的就是红外光斑,设想你玩游戏的时候要是一片黑白条纹光打到你身上,这画面感岂不是很怪。
< Kinect 一代的离散光斑 >
发明者以色列PrimeSense公司的专利图了,他们非常聪明地在红外发射器前面加了一个特殊设计的diffuser(光柵、扩散片)可以使红外光线能从不同角度射出。另一个摄像头再去拍摄这些光斑然后进行计算从而得出每一个光斑所在的深度。每种结构光的扫描精度,所对应的算法,以及应用场景都有所不同。例如用于电子产业元器件锡膏检查(SPI/ AOI)一般就是可见的条纹光。
另外几种结构光就不多做介绍了,总之只需要知道他们对深度感知的精准度会远远高于Kinect这种离散光斑类型的结构光(可以达到微米级),并且算法也有很大出入。
< Kinect 二代的TOF >
TOF(Time of Flight飞翔的时间?)一个激光发射器,一个接收器,一个运算光程的芯片组成。通过计算不同的光程来获取深度信息,它也是一种深度传感器。
深度传感器输出“点云” ---- < “点云”的实时拼接 >
一个技术难点,因为Tango设备是在一边移动一边采集的,如何把上一帧采集的“点云”信息和当下帧采集的“点云”进行匹配,并且显示在同一世界坐标中就是难点所在。
Project Tango巧妙的结合运动追踪的轨迹数据达到了对“点云”的实时拼接。要知道“点云”的数量一般在几百或者上千。算法已经不易,运算量更是大的离谱,而Project Tango还把它做进了移动设备里。
Tango设备就是一种SLAM设备,并且Google把它实现在了移动设备端。John神和他的团队靠的不是魔法,而是对于光学传感器和惯性传感器与计算机视觉技术的巧妙结合:
- 利用光学传感器来校正惯性传感器的误差累计或者说“漂移”问题,
- 利用惯性传感器的小尺寸,低成本,以及实时信息输出来降低光学传感器的运算量,
- 再配合上成熟的深度感应器(其实也是光学感应器的一类)从而实现了这个人们眼中的黑科技。
补充:DayDream VR平台 和 Android N
。。。
[Tango] Basic Knowledge的更多相关文章
- NLP related basic knowledge with deep learning methods
NLP related basic knowledge with deep learning methods 2017-06-22 First things first >>> ...
- Python基础知识(Basic knowledge)
Python基础知识(Basic knowledge) 1.认识Python&基础环境搭建 2.Python基础(上) 3.Python基础(中) 4.Python基础(下) 5.Python ...
- [SLAM] 01 "Simultaneous Localization and Mapping" basic knowledge
发信人: leecty (Terry), 信区: ParttimeJobPost标 题: 创业公司招SLAM 算法工程师发信站: 水木社区 (Thu Jun 16 19:18:24 2016), 站内 ...
- 计算机基础知识 一 Basic knowledge of computers One
计算机硬件由CPU(Central Processing Unit).存储器.输入设备.输出设备组成. CPU通常由控制单元(控制器)和算数逻辑单元(运算器)组成. 运算器:负责进行算数运算和逻辑运算 ...
- Android Studio accelerator key(shortcut)& Basic knowledge
shift + F6 重构(选文件,ok->下面的控制台,do refactor option + return 快速修复 Activity@Extra() Intent: @FragmentA ...
- NoSql basic knowledge
The big picture to keep in mind first is: There are lots of articles and resources out there: http:/ ...
- Basic knowledge of javaScript (keep for myself)
1. 函数表达式 JavaScript 函数可以通过一个表达式定义.eg. var x = function (a, b) {return a * b}; so: var x = function ( ...
- Basic knowledge of html (keep for myself)
1. 通常标签 <strong> 替换加粗标签 <b> 来使用, <em> 替换 <i>标签使用. 2. 在 <head>元素中你可以插入脚 ...
- Review: Basic Knowledge about JavaScript 1
JavaScript shanzm
随机推荐
- 使用jquery修改css中带有!important的样式属性
当CSS中含有!important的样式属性时,普通的修改方式是会出现失败的.如下: <div class="test">使用jquery修改css中带有!import ...
- 代码大全 MSIL语言程序设计
.NET平台的编译器会将高级语言(C#,VB.NET,F#)编译成MSIL(微软中间语言)格式.熟悉MSIL语言,可以读懂一些加密程序混淆过的算法,这些算法几乎不能还原成高级语言,但是可以还原成MSI ...
- Entity Framework 6.x Code Frist For Oracle 实践与注意点
Entity Framework 6.x Code Frist For Oracle 实践与注意点 开发环境 Visual Studio.net 2015/2017 Oracle 11g/12c 数据 ...
- 尝试制作了一个Panorama
照片拍的不太好, 效果如下(浏览器需要支持WebGL), 您可以用鼠标拖动浏览: //
- Django 源码小剖: 应用程序入口 WSGIHandler
WSGI 有三个部分, 分别为服务器(server), 应用程序(application) 和中间件(middleware). 已经知道, 服务器方面会调用应用程序来处理请求, 在应用程序中有真正的处 ...
- A cycle was detected in the build path of project
解决Eclipse中Java工程间循环引用而报错的问题 如果我们的项目包含多个工程(project),而它们之间又是循环引用的关系,那么Eclipse在编译时会抛出如下一个错误信息: “A cycle ...
- [GraphQL] Use Arguments in a GraphQL Query
In GraphQL, every field and nested object is able to take in arguments of varying types in order to ...
- 面向.Net程序员的前端优化
背景 作为web开发人员大家大多了解一些网站的性能优化方法,其实大部分方法都不复杂,例如针对前端js和css的压缩来减少请求大小,通过合并来减少请求次数.这里站在.Net后端程序员的角度来看一下如何最 ...
- 【Cocos2d-Js基础教学(7)界面UI更新方法(会用到第三方类库)】
我们游戏中会遇到很多UI更新的时候,大部分时候我们会remove该节点,再重新绘制的方法来进行UI更新. 但是这种更新效率并不高,这里我推荐大家一个第三方的库,来通过注册更新的方式来对UI进行更新管理 ...
- android 抓包 使用 tcpdmp + Wireshark
下载地址tcpdump: http://www.androidtcpdump.com/ 使用su用户, 给/system/可写的权限 mount -o remount,rw -t ...