作者/Author:Matt Miesnieks,CEO of 6D.ai。
2017年,谷歌宣布了其与苹果公司ARKit的对标的AR产品:ARCore。 显然这对于AR行业来说是个好消息,但它对开发者和消费者意味着什么呢?
1. ARCore是Google Tango的轻量化版本吗?
一位开发人员半开玩笑跟我说:“我只是看了看ARCore SDK,他们真的只是改了下Tango SDK的名字,把SDK中关于Tango深度摄像头的代码注释掉了,并更改了编译器的标志”。我怀疑它还不仅仅是这些,但这并不是什么坏事。例如,支持ARCore的新Web浏览器非常适合开发人员,但它们与核心SDK分开。我一直想搞清楚,为什么谷歌在此之前12个月没有发布过Tango VIO版本(不需要深度相机),毕竟他们已经准备好了所有的东西。原来是放在ARCore这里了。
这是一个好消息,因为这意味着ARCore是一款非常成熟且经过良好测试的软件(它在谷歌内部的开发至少比ARkit在苹果内部还要长2年,虽然购买Metaio&Flyby帮助苹果赶了上来),并且早就排好了一个丰富的功能开发路线图,并非所有功能都依赖于3D深度数据(早先Tango项目需要依赖3D相机),现在将进入ARCore。
如果你将深度相机传感器硬件添加到运行ARCore的手机上,你就会有一个Tango手机。现在,谷歌能够在OEM厂商的旗舰手机上发布它,从而更容易获得SDK的广泛采用。没有人会为了糟糕的AR应用体验,而放弃一个好用的Android手机。现在人们会购买他们本来就会购买的手机,而且ARCore将免费提供。
Tango最初主要专注于跟踪3D空间中手机的运动。 许多最初的想法都是针对室内空间映射。
从命名上看,Tango一直被描述为“总是知道它自己位置的手机”。 对我而言,它将手机定位为跟谷歌地图更加一致的东西,而AR则是一种事后的回归。放弃Tango,使用新名称ARCore,给人的感觉则是:它始终都是AR。
2. 传感器校准的对比
苹果为了让ARKit功能稳定,采用了三种传感器校准功能:相机的几何校准(简单)和光学校准(比较难),以及IMU错误消除校准(非常难);其时钟同步传感器更为重要。
传感器校准不是二进制的“已经校准”或“没有校准”这两种情况。它是一个统计数据,采取越来越多的步骤来减少误差,以使系统足够稳定。一个系统“校准的越好”,在姿态计算中的误差累积的速度就越慢,误差越不明显。
那么Google ARCore的传感器校准相比苹果的,具体怎么样呢?以下是我认为Google所做的事情:
首先,他们对他们支持的设备非常谨慎。最初只有三星的S8(最畅销的)和Pixel(谷歌自己设计)。这两个设备平台都已经让Google工程师为Daydream VR的Inside-Out跟踪支持传感器校准过了。谷歌有工程师在韩国与三星合作,在下一部手机中校准和调整传感器以完全支持Daydream,将部分校准工作后移到S8并不是不可思议的。
如今,支持ARCore的新机型越来越多,基本都是大型厂商的高配新机型,但支持的前提都是要经过Google的设备校准和认证。
谷歌宣布为Daydream提供由内而外的6dof跟踪支持
前两年,谷歌大部分时间都在努力合并Tango和Daydream SDK。我听说2017年11月是完成它的截止时间。我想在2017年8月下旬,大部分的低级工作都已完成,这意味着Tango/ARCore VIO系统可以利用Daydream传感器集成工作。
最后,传感器校准的真正好处在系统性能的瓶颈之外才变得明显。在用户注意到任何定位漂移之前,ARKit和ARCore都可以很好地跟踪定位很远的距离。我没有看到长时间/长距离进行的任何面对面的定位测试,但这并不重要。开发人员仍然会把AR内容立即放在你面前。哪怕用户可能自由地走很远的距离都没有看到任何AR内容。因此,就AR应用程序的实际使用方式而言,校准的任何差异都几乎无法检测到。当应用开发人员越来越触及到SDK的能力边界时,谷歌打算在市场上推出新一代校准设备,并在工厂完成更加紧密集成的传感器校准。
Google“振动器”,用于在工厂校准加速度计。 一旦校准完成,AR软件堆栈就会减少一个错误来源。
例如,我曾与一家很大的IMU OEM厂商就该主题进行了交谈,他说他们的手机IMU仅在某一个工作温度下进行工厂的校准,以降低成本。这意味着IMU硬件经过调整,在这一温度点下出现的错误最少。
但是当你继续使用手机时,它会变得更热,这将导致IMU的行为与其校准时略有不同,并且会导致错误。这对于绝大多数IMU使用场景来说没有太大的问题,但对于VIO(视觉惯性里程计)来说,一旦设备升温,用于航位推算计算的IMU测量就会变得不可靠,并且跟踪定位会出现漂移。如果要求的话,这个OEM厂商也可以很容易地校准多个温度范围,这意味着Google的ARCore VIO代码又可以减少一项错误来源。
从传感器校准方面来看,软硬一体、垂直整合的苹果可以更快地解决这些挑战,而Google的Android需要等待一段时间以完成设备的更改,才能完成整个生态系统的改造。
3. 环境光照估计的对比
关灯前后对比
ARKit和ARCore都提供了场景中自然光照的简单估计。这是对场景渲染效果的一种估计,无论现实世界是用环境光线平缓地照亮,还是尖锐的聚光灯下。ARKit为开发人员提供光强度和色温的检测,而ARCore提供光照的单个像素强度值(Android Studio API)或着色器(Unity API)。 这两种方法在其早期演示中似乎都得出了类似的效果。
主观上Google的演示看起来要更好一点,但这可能是因为Tango开发人员研究它们的时间比ARKit研究的时间长得多。 然而,谷歌已经展示了即将推出的新功能,这是根据现实世界灯光的运动变化情况,动态调整虚拟物体的阴影和反射的能力。这将更有助于提升用户潜意识的反应,即认为AR内容“真的存在”。
4. 空间地图映射的对比
空间映射是ARCore相比ARKit具有明显优势的一个领域。
这里多介绍一些内容。Mapping(空间映射)是SLAM中的“M”。它指的是设备保存在内存中的一种数据结构,其中包含有关3D真实世界场景的大量信息,这些信息可以用于设备追踪器的本地定位。
本地定位的意思是找出我在地图中的具体位置。举个例子,如果我蒙上你的眼睛,把你放在一个新的城市,给你一份平面地图,你会看看周围的环境,然后看看地图,然后再看看环境,如此往复,直到你弄清楚你在地图上的位置......这就是自身的本地定位。
在其最简单的级别,SLAM地图是表示稀疏点云的3D点的图,其中每个点对应于场景中的光学特征点的坐标(例如,桌子的桌角)。它们通常还有一堆额外的元数据。例如这个点的“可靠性”数据,通过最近在相同坐标中检测到该特征点的帧数来衡量。有些地图包含“关键帧”数据,它们只是一帧帧视频(照片),每隔几秒就存储在地图中,用于帮助设备跟踪器将现实世界与AR地图相匹配。有的地图使用密集点云,它更可靠,但需要消耗更多的GPU算力和内存。ARCore和ARKit都使用稀疏点云映射的方式(没有关键帧)。
稀疏地图映射看起来像右上角的图像。 左上角显示了点与现实世界的匹配程度(颜色用于表示该点的可靠程度)。 左下角是源图像。右下角是强度图,可用于不同类型的SLAM系统。
所以它是如何工作的呢?
当你启动一个ARCore/ARKit应用程序时,设备的追踪器会检查是否有一个预先(下载好的)映射地图加载并准备就绪(在ARCore和ARKit的v1.0中是没有预设映射地图的),所以手机追踪器相机通过立体计算来初始化新的映射地图。这意味着我们现在有一个很好的3D小地图,正好在手机相机的视野中。当你开始四处移动,并且背景场景新的部分移动到视野中时,会向映射地图中添加更多3D点,地图变得更大。
这在过去并不是一个问题,因为设备追踪器性能很差,设备不得不在地图变得太大以至于无法处理之前丢弃掉不常用的地图部分。现在不是这样了,管理地图是SLAM算法中重要的一部分工作。
ARKit为它的地图数据使用了一个“滑动窗口”,这意味着它只在地图中存储了最近一段时间和距离内的一部分地图,而丢弃了所有旧的数据。差不多可以认为不需要在刚刚定位的地方再重新定位场景。
ARCore管理更大的地图,这意味着系统应该更可靠。所以使用ARCore,即使你确实失去了跟踪定位,它也会更好地恢复,你不会受到太大的影响。
ARCore和ARKit都使用一个名为“Anchors(锚点)”的聪明概念,来使地图看起来感觉比它实际覆盖的物理区域范围更大。我最早在Hololens上看到了这个概念,提前了至少一年时间。通常系统会完全无形地自动给用户或应用程序开发人员管理好地图数据。Anchors允许开发人员告诉系统“记住这里的这块地图,不要扔掉它”。
我认为Anchors的物理尺寸大约为1mx1m见方。每当内容放置在某个物理位置之后,开发人员通常会丢弃Anchor。这意味着如果用户随后走开了,那么在Anchors之前,之前AR内容所在的物理位置周围的地图将被丢弃,并且AR内容也将丢失。当使用Anchors时,内容始终保持在应有的位置,最糟糕的用户体验影响不过是AR内容中可能出现的微小故障,即系统重新定位并跳转以校正累积的漂移时出现的微小故障。
空间地图映射的目的是通过以下两种方式帮助设备跟踪器定位:
(1)首先,当我来回移动手机时,地图是从最初的移动位置开始构建的,在回来的路上,实时检测到的新特征点可以与地图中已保存的特征点进行比较。通过姿态计算,选择场景当前和先前采集的视图中最可靠的那部分特征点,来使传感器追踪性能更稳定。
(2)第二种方式是通过本地定位(或恢复)追踪。有时候你会不小心遮住相机,或需要放下手机,移动得太快或者其他随机发生的一些事情,当相机下次看到场景时,设备认为应该看到的最后一次更新的地图,与当前的场景肯定会不一致。它就相当于是被蒙住了眼睛并被放在了一个新的地方。这就是“我失去了追踪”的意思,这是AR开发人员在过去几年中每天都会提到的问题。
此时AR系统可以做两件事:
(1)要么重置所有坐标系,然后重新开始!这就是纯粹的VIO定位系统(根本没有地图)。你所体验的是所有内容都会跳到新位置并保持不变。这不是一个好的用户体验。
(2)另外一种方式,系统可以采用它现在看到的一组3D特征点,并搜索储存的整个地图以尝试找到匹配项,然后将其更新到正确的位置,你就可以继续使用该应用程序,就像没有发生任何事情一样(你可能会在跟踪丢失时看到虚拟内容出现故障,但它会恢复到之前的状态)。
不过这里存在两个问题:
(1)随着Map变大,这个搜索过程变得非常耗费时间和处理器算力,并且这个过程如果花费的时间越长,用户再次移动的可能性越大,这意味着搜索必须重新开始。
(2)手机的当前位置永远不会与手机过去的位置完全匹配,因此这也增加了地图搜索的难度,并增加了重定位工作的计算工作量和时间。所以基本上即使使用Mapping映射,如果你离地图太远,你也会搞砸,系统还是需要重置并重新启动!
此图像中的每一行都是此大型SLAM地图中的街道
请注意,当我们提到“大”地图时,对于移动AR,大致意味着地图覆盖了非常大的房间或非常小的公寓的物理区域。 对于户外AR体验,我们必须考虑以全新的方式进行空间地图映射。
对地图进行强大的重新定位是一个非常难以解决的问题,目前还没有人能解决消费者AR用户体验级别的问题。任何声称提供多玩家支持或持久性AR内容体验的人,都会因新手机(例如玩家2)需要从玩家1创建的或从云端下载的地图进行重新定位的过程而限制其用户体验 。你会发现玩家2必须与玩家1非常接近,并以大致相同的方式握住他们的手机。这体验就让用户感觉很蛋疼了,他们只想坐在你对面的沙发上,打开手机,立即看到你所看到的东西。或者站在距离先前位置几米远的任何地方,就可以看到那里留下的“永久性”的AR内容。
请注意,你还可以尝试使用多人AR应用程序的一些特定解决方法,例如使用Marker(标记),或者对设备2的远程起始位置进行硬编码。从技术上讲,它们可以正常使用,但你仍需要解释如何让用户执行操作,你的用户体验可能会打折扣。要实现多人体验,让你重新定位(即加入别人的地图),除了ARKit/ARCore这种使VIO跟踪“勉强正常工作”的方式,没有其他更神奇的解决方案。
我希望得到任何知道不同定位技术的人的指导,但据我所了解的,稳健的多人重新定位技术目前今还没有人实现,即便在已发表的研究中也没有。这就像VIO这样的技术问题,只有极少数的人可以解决。不过到现在,ARCore和ARKit的新版SDK对多人协同定位和持久性体验的支持上有了进一步的提升了。
5. Android OEM厂商仍有所保留
我感觉ARCore是一个非常仓促的产品发布,基本是重新包装现有的资产,刚开始连一个ARCore的Logo都没有。曾经,OEM厂商对Tango的支持硬件和Android系统绑定有一些保留意见。ARCore消除了相机堆栈硬件商品化问题以及Tango提供给厂商参考设计的物料清单成本问题。看起来Google已经在这里承认了一些战略控制,但老实说,我认为这一切都发生得如此之快,以至于那些保留意见的言论并没有真正发生。
但谷歌坚持要求OEM厂商认为ARCore是谷歌移动服务(GMS)Android平台的一部分,这是OEM厂商不喜欢的。
如果AR真的是“下一代计算平台”,那么Google就有机会重置其在生态系统中的话语权。ARCore确实不仅仅是一些新的GUI小部件、新功能而已。不过也没有达到要颠覆的地步。围绕AR与GMS解耦的对话仍在进行中。
OEM厂商寻找ARCore替代品的最大原因可能是,在最大的中国市场不支持谷歌移动服务。
很多对GMS的抵制是来自于中国这个最大的OEM最大市场。中国的OEM厂家希望有一个全球有效的AR软件解决方案(每个开发人员和AR工具制造商也是这样认为的)。
6. AR开发平台选择
如果你喜欢Android平台,你有三星S8、Pixel、华为或小米的新机型,以及其他ARCore支持的机型,那么就去用ARCore开发吧。如果你喜欢iPhone,那就还是不要费心去换了。
相比平台选择,开发人员应该关注的是,人们愿意使用的AR应用程序到底是怎么样的。学习开发什么AR内容,比学习如何在ARKit或ARCore开发,要难得多。ARKit/ARCore SDK目前都还是早期的几个更新版本。它们还非常基础(VIO、平面检测、光照估计、简单的多人体验、内容持久性),并且在未来几年内将获得更全面的功能(Cloud Anchors、3D场景理解、虚实遮挡等)。这将是开发人员和消费者不断学习的曲线。
所以现在,专注于学习什么是更困难(构建什么AR应用程序内容)的并坚持学习,并补充你对底层技术的了解(如何开发应用AR应用程序:Android,IOS Xcode等)。一旦你掌握了如何开发一个好的AR应用产品,再根据产品的市场范围、AR功能支持、盈利收费模式等方面来确定选择最佳的平台。
瓶子比放瓶子的桌子更重要
7. 结论:ARCore比ARKit更好吗?
我认为作为一种技术解决方案,它们两者的能力非常接近。用户体验方面,目前两者的差别还是很明显的。 ARKit在软硬件集成和更可靠的追踪方面具有一些技术优势。ARCore在环境映射和更可靠的定位恢复方面具有一些优势。不过这两种优势大多只有专业的计算机视觉工程师才能注意到。
Apple拥有明显的Go To Market(走向市场化)优势,拥有大量已支持ARKit的设备,可立即升级到最新的IOS,其中就已包括ARKit。Apple的用户通常会花更多的钱,所以从中期来看,AR Apps应该更好地利用ARKit设计产品商业模式。Android的优势一直是其用户规模。但是Android生态系统需要至少12个月才能完成所有硬件部件的集成并推向市场,以便在大多数新设备中通过硬件支持ARCore,可能还更久。
站在Tango已有研发的肩膀之上,ARCore有一个很好的优势,很多功能可直接部署,其中大部分都至少进行过一些用户/市场测试。这些系统在未来12-24个月内将发展非常快。如今基础已经到位,未来将会很有趣!
我认为市场上AR应用程序使用率的限制因素,将是开发人员通过开发社区弄清楚要构建什么应用内容的能力。AR技术最终肯定会支持构建消费者级别的AR产品。如果你是AR开发人员并且你的团队中没有牛逼的产品经理/交互设计师,我建议你优先雇用一个!
至于ARKit或ARCore哪个更好的问题,现在可以归结为开发者个人的偏好和目标。选择一个,或者两个都采用。两个系统都有自己的优点和缺点,但重要的是两者都能够提供足够好的消费者级别的用户体验,开发人员有广阔的开放空间可供探索。
前期精彩回顾:
ARCore发展到什么程度了?
AR Cloud云平台曙光初现
为什么AR将是建筑业的解决方案?
原文链接:https://medium.com/6d-ai/how-is-arcore-better-than-arkit-5223e6b3e79d
译文经过一定的改编处理。
欢迎转发,建议收藏学习!
扫码关注,万间持续放送!
阅读原文,深入了解应用!
发布于 2019-04-14