写在前面

本系列打算讲讲个人对AR行业和AR中的SLAM算法的一点浅显的看法。才疏学浅,文中必然有很多疏漏和不足,还望能和大家多多讨论。今天先讲讲我对AR的一些认识。

AR的一点理解

AR是什么

AR是人类的第三只眼,让人类在现实世界中看到虚拟物体并与之交互。

VR是人类做梦的一种载体。

AR能做什么

AR有能力将二维交互变成三维交互,能让虚拟物体看起来像真的一样。举几个简单的场景。

  • 你可以拥有一只虚拟宠物。你可以从各个方向观察一个虚拟小猫,绕着它转动。你会发现,走近看会显得大一些,离远了看着会变小。愿意的话,还可以挠挠它,和它玩耍。
  • 你将拥有一个虚拟电视。它可以固定在任何地方(即使你到处走动),也可以随意移动。
  • 你在和家人远程通话时能在自己房间看到家人的全息投影。
  • 你将房间变成虚拟密室。
  • 当然,你可以在任何地方唤醒任何APP。

我觉得,如果未来AR能够发展出更多的外延,那么在消费领域会有机会取代手机 ,然后并在若干年后沦为卖广告赚钱的工具 。而在工业领域,AR也有机会蹦跶几下 ,然后被机器人取代

AR怎么实现

目前AR需要通过外部设备来实现。比如在手机上,通过获取摄像头图像并在上面叠加虚拟物体。而专业的AR设备可以将虚拟物体成像在眼睛前面或投射入眼球。

AR需要什么

要实现前面提到的三维交互,AR设备需要具备下面三个功能

  • 自我定位。指定位出自身在空间中的位置。这样才能根据预设的虚拟物体的位置在设备上渲染虚拟物体。
  • 环境感知。主要指感知到周围环境的三维几何信息,这样才能让虚拟物体和真实世界发生自然交互。
  • 交互。要理解来自周边环境中的输入,比如人类的语音、手势,并给出反馈。要将虚拟物体合适的影像通过设备反馈给人类。

定位和环境感知用的就是传说的SLAM技术。

AR的现在

硬件方面,微软憋大招研发出了HoloLens,甩了所有竞争对手两条街。Google有Project Tango,但其定位不甚明确。还有很多号称在某一方面或者全面超越HoloLens的东东。

软件方面,微软在围绕Windows 10构建生态。国内外都有一些还不错的SDK,但在嵌入式平台上还没有完全实现SLAM,离实用还有一点距离。而且,目前几乎没有好用的内容生产工具。

AR的技术路线

好吧,终于进入正题了。仔细观察的话,发现AR的发展和VR有点类似。目前分成两个比较明显的派系:手机派和眼镜派。手机派代表现在,眼镜派却未必能代表未来。

手机AR

手机AR侧重于将虚拟物体叠加在手机摄像头图像上呈现给用户,主要依赖自我定位功能,暂时不涉及到环境感知和过多的交互。鉴于目前智能手机的普及程度,手机AR会是未来一两年的主体。这是一个有需求也有技术的市场。基于AR的营销对普通消费者还是有一定吸引力的。大厂们都在布局和试水。其中又分为

基于摄像头的AR

第一种是marker AR,基于特定图片的图像识别和追踪,一种是指定的图片,一种是现场拍摄的图片。代表作Vuforia。网易阴阳师也很有趣。
第二种AR不需要特定图片,主要基于物体识别和追踪,比如人脸,手,身体等,并让虚拟物体和人脸保持一定的相对位置即可。这类AR可以不用估计手机设备的定位。个人比较喜欢Snapchat,虽然很简单,但创意十足。

基于陀螺仪的AR

借助陀螺仪和电子罗盘得到手机在三维空间的旋转角度,但不能得到手机的位置。简单的测试方法是,将手机前后移动时,虚拟物体的大小将保持不变(于是看上去虚拟物体在平移,不甚和谐)。很多VR盒子也是这个原理追踪头部的转动。

基于SLAM的AR

目前都在加班加点。感谢Raul,感谢Leutenegger。

Tango

联想和Google联合出品了搭载Tango模组的Phab 2 Pro手机,包含一个全局快门鱼眼摄像头,一个消费级IMU和一个深度摄像头,在硬件配置基本满足SLAM的需求,因此很受开发者们欢迎。总之,一个穷人版的HoloLens,富农版的手机。希望主流手机们能早日升级成上述设备,再配个有一定距离的双摄就完美了。

然而,手机运算能力的不足会限制SLAM算法的复杂度。摄像头、CPU和GPU同时高强度工作,电池会消耗很快。毕竟,手机不是为此类应用设计的。手机硬件不足会降低算法的精度和鲁棒性。比如单目的尺度不确定性、卷帘快门、摄像头和IMU的数据同步等等。现阶段,可以从应用倒推算法,以算法促进应用。毕竟并不是所有应用都需要高精度的算法。

AR眼镜

AR眼镜相比于手机,在体验上可以有质的飞越。用户可以透过眼镜看到带景深效果的虚拟物体(通过左右眼合像),而不是一个偏平的屏幕。AR眼镜通过更高规格的传感器和更强大的计算能力,同时支持实时精确定位、场景重建、语音交互、手势识别等复杂功能。

业界这一两年,有些产品看起来越来越像HoloLens,有些产品怎么看起来还是更像Google glass。说好的对标HoloLens呢!

HoloLens

个人意见,作为一款初代AR设备,Hololens已经可以打80分了,领先其它产品两年以上。

  • 算法:实时定位、场景重建都有非常好的工程化实现,局部定位精度很高。手势可用。
  • 软件:Windows 10原生支持,应用开发相对成熟
  • 硬件:定制HPU,强大的计算能力,硬件加速算法
  • 功耗:电池使用两小时,没有明显发热的感觉,软硬件肯定做了大量优化
  • 显示:视场角确实太小,很影响体验,市面上也没有太好的解决方案。渲染的问题我没太感觉到。
  • 外设:无线对体验很重要。玩RoboRaid(打虫子)时明显感觉到,头盔上还带个尾巴是没法用的。

想要做到便携(无线),至少要把一套完整的SLAM算法跑在设备上,有实时的双目(+imu)的slam,有低频但后台运行的稠密场景重建(Kinect fusion),还有复杂的三维网格生成和后处理,没有强大的计算能力支撑是不可能。强大的计算能力意味着过高的功耗,这又要求复杂的电源管理,强大的电池容量和过大的体积。想要运行那么多传感器同时降低功耗,就要有顶尖的软硬件架构设计。哪些功能是必备,需要多少资源,哪些模块应该在什么时候运行,不同模块之间如何交互,如何降低延迟(特别是场景重建)等等。 最后,所有这些都要集成进一个头戴设备里。 所以我觉得微软的壁垒在整体架构设计而不是单一模块。

据HoloLens开发人员介绍,HoloLens的HPU上搭载了24个Tensilica的DSP,其运算能力超过每秒一千亿次[链接]。单块DSP集中处理某类任务处理(应该是基于硬件加速)。Atom SoC主要用来运行Windows 10 和显示。算法的运行速度大约为纯软件的200倍。HoloLens目前预留了一半左右的计算能力,并没有用足HPU,后续还有很大的想象空间。未来嵌入深度学习模组不是梦啊。 傍上了黑科技深度学习,SLAM也许就能落到实处了。

其它厂商

大部分厂商目前还是以高通Snapdragon 820 为主开发。对于手机来讲,820勉强能应付,实现定位功能(vSLAM或者VIO)。对于AR眼镜来说,不仅传感器数目和功耗会高,算法的种类和复杂度更是明显提升,特别是场景重建对于算力的要求非常高。820 SoC 上有一颗Hexagon 680 DSP ,可用来做算法加速,特别是特征点提取等前端功能。ARM架构还可用NEON技术来加速一些简单重复计算。Movidius、NU3000等芯片估计也快进入计划了。但总体而言,还处在开发定位功能的过程中,软硬件的架构都没有完善。

算法方面,随着这两年SLAM蓬勃发展,各家也积累了很多工程经验。相信不久的将来,定位功能应该能达到HoloLens目前的水平甚至更好,也可以支持多场景下的使用。然而,在场景重建方面,由于之前的工作大多基于高性能GPU在PC上实现,想要移植到移动平台上,还有好长的路要走。硬件软件上都有太多的坑要趟了。 然而微软已经做好了!就他家积累最多,还不开源! (插个小广告,之后可能会写一点这方面的东西)

当然,HoloLens并不是完美的。硬件层面上,视场太小、重量偏重、体积太大、成本过高都不是容易解决的问题。软件方面,交互方式创新,手势、语音识别,数据共享,全息成像等等,还有很多值得做的事情。

个人觉得HoloLens最大的遗憾,是它没有解决AR类设备的核心问题:市场定位。很cool,然后呢?3000美元不是玩具,如果不能给用户生产价值,那就无法真正进入消费级市场。

最后

最后,让我们双手合十,一起感谢TUM、ETHZ、UZH、Universidad de Zaragoza和UCL等,以及开源大佬们,给了我们一条活路。

AR中的SLAM(一)的更多相关文章

  1. AR中的SLAM(二)

    写在前面 本文想讨论一下AR的架构和SLAM在其中的作用. AR AR的框架可以简单划分为感知和交互两部分. 感知部分主要负责信息的收集和处理.信息主要通过不同的传感器收集,包括图像.设备加速度.距离 ...

  2. Yii AR中处理多表关联的relations配置

    关系型 Active Record官方文档中指出: 两张表之间的关联是根据外键来的,但是这种外键关联虽然在数据容错方面有益处,但是在性能上是个损伤,所以,一般是不定义外键的. 这种情况下,他们之间的关 ...

  3. 再谈AR中的图像识别算法

    之前在<浅谈移动平台创新玩法>简单的猜测了easyar中使用的图像识别算法,基于图片指纹的哈希算法的图片检索 .后再阿里引商大神的指点下,意识到图片检测只适用于静态图片的识别,只能做AR脱 ...

  4. 机器人自主移动的秘密:实际应用中,SLAM究竟是如何实现的?(二)

    博客转载自:https://www.leiphone.com/news/201612/FRzmoEI8Iud6CmT2.html 雷锋网(公众号:雷锋网)按:本文作者SLAMTEC(思岚科技公号sla ...

  5. 2016总结&2017计划

    2016总结 总体而言,上半年比较勤快,下半年偷懒了.下半年仔细看了Barfoot的书<state estimation for robotics>,收获很大. 2017计划 目前打算写以 ...

  6. Credit Memo和Debit Memo在AR以及AP中的概念比较

    AR和AP中都有Credit Memo和Debit Memo的概念, 但是其含义和用法完全不一样,比较难懂,现在整理如下:AR中的CreditMemo和DebitMemo是和客户打交道:AR中的Cre ...

  7. 如果在Yii中,使用AR查询,不直接写sql,则在使用的时候会报错

    如果在Yii中,使用AR查询,不直接写sql,则在使用的时候会报错 Student::find() ->select("id,name,from_unixtime(create_tim ...

  8. SLAM的现在与未来

    http://geek.csdn.net/news/detail/202128 作者:高翔,张涛,刘毅,颜沁睿. 编者按:本文节选自图书<视觉SLAM十四讲:从理论到实践>,系统介绍了视觉 ...

  9. 三维重建7:Visual SLAM算法笔记

    VSLAM研究了几十年,新的东西不是很多,三维重建的VSLAM方法可以用一篇文章总结一下. 此文是一个好的视觉SLAM综述,对视觉SLAM总结比较全面,是SLAM那本书的很好的补充.介绍了基于滤波器的 ...

随机推荐

  1. 从码农升为PM(节约成本)

    做为一个码农的潜规则,用户怎么要求怎么写,不论过程只论是否符合要求以及减少bug的存在,虽然bug随时会出现,这就是码农,一直以来都说码农分很多种但个人认为就是一种,原因是码农不懂的换位思考,不懂的在 ...

  2. Flowable BPMN 简单使用

    1.Flowable是什么? Flowable是一个使用Java编写的轻量级业务流程引擎.Flowable流程引擎可用于部署BPMN 2.0流程定义(用于定义流程的行业XML标准), 创建这些流程定义 ...

  3. 转:android studio 一直卡在Gradle:Build Running的解决办法

    在使用AS开发安卓应用程序的时候经常会遇到Gradle build running一直在运行甚至卡死的情况,解决方法如下: 方法1: 1.在C:\User\<用户名>\.gradle 目录 ...

  4. How React Works (一)首次渲染

    How React Works (一)首次渲染 一.前言 本文将会通过一个简单的例子,结合React源码(v 16.4.2)来说明 React 是如何工作的,并且帮助读者理解 ReactElement ...

  5. WebService-01-使用jdk发布第一个WebService服务并调用

    Webservice是SOAP+XML,SOAP是基于Http的,Http底层是Socket,先回顾一下Socket: Server: public class Server { public sta ...

  6. wp 自定义分页函数

    function kerui_pagination($query_string){ global $posts_per_page, $paged; $my_query = new WP_Query($ ...

  7. es6中let,const区别与其用法

    ECMAScript 是什么? 首先,我们都知道JavaScript由三部分组成:ECMAScript,DOM,BOM: 其中的ECMAScript是Javascript的语法规范. ECMAScri ...

  8. Maven 学习笔记(一)

    什么是 maven? 对于已经使用过 maven 的用户来说 maven 就是一个架构工具,使用它可以将代码构建成一个可发布的工具.当然也有人会说maven是一个项目管理的工具.当然各有各的说法,那么 ...

  9. springboot-25-springboot 集成 ActiveMq

    消息的发布有2种形式, 队列式(点对点) 和主题式(pub/sub) 模式, 队列式发布后, 接收者从队列中获取消息后, 消息就会消失, 但任意消费者都可以从队列中接受消息, 消息只能被接受一次 主题 ...

  10. 编程开发(C/C++&Java&Python&JavaScript&Go&PHP&Ruby&Perl&R&Erlang)

    使用Docker快速部署主流编程语言的开发.编译环境及其常用框架,包括C.C++.Java.Python.JavaScript.Go.PHP.Ruby.Perl.R.Erlang等. 在今后采用编程语 ...