AR中的SLAM(一)
写在前面
本系列打算讲讲个人对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等,以及开源大佬们,给了我们一条活路。