本文原文作者为Matt Miesnieks,目前担任6D.ai的CEO,Super Ventures合伙人, AR领域资深投资人。由亮风台(hiscene)编译。
在ARCore发布前不久,Matt Miesnieks曾发表过一篇ARKit、Vuforia、Tango和HoloLens的比较分析,并得出ARKit是更好的选择这一结论。然而,8月29日,Google发布了ARCore,正面对抗ARKit,对此,他作了进一步分析,下面就让我们看看,这件AR行业的大事,对于开发者和消费者来说,意味着什么呢?
ARCore只是轻量级的Tango么?
一位开发者戏称:“我觉得ARCore SDK,就像是他们随便地把Tango SDK改了个名字,注释掉深度相机那块代码,改了一种编译标志。”应该不止这些,但也不会太多,比如支持ARCore的新的Web浏览器对开发者来说很友好,但它们属于相互独立的核心SDK。
大概很多人都想知道为什么12个月之前,一切都已准备好的时候,Google没有发布Tango VIO(无需深度相机),但现在才发布出来。
不论如何,这是一个好消息,意味着ARCore是非常成熟的,而且经过了充分的软件测试(尽管苹果有Metaio和Flyby的收购基础,但ARCore还是比ARKit至少多两年的实践测试);另外,谷歌已经为Tango安排好了全面的功能蓝图,其中有不少无需依赖3D深度相机的功能,都在ARCore中找到了它们的位置。
如果在普通的智能手机上添加深度相机,你就等同于拥有了Tango手机。现在谷歌有一个更简单的路径,可以通过OEM旗舰机,推广SDK,ARCore就会随着手机而被推广开来。
关于标定
这就是有趣之所在了……Matt Miesnieks我之前有说过苹果ARKit能够如此稳定的三种标定方法:
- 相机的光学几何校正(简单)
- 相机的光度标定(难)
- IMU误差消除(非常难)
另外,传感器的时钟同步是更重要的。
标定不是非黑即白的问题,需要统计、并做更多的迭代以减少误差,才能让用例更加稳定。系统标定得越好,位置估计误差就会越不容易出现。
正如苹果的ARKit,谷歌也做了以下几件事:
- 首先,谷歌对所支持的设备选择十分谨慎。起初,只有Samsung S8和Pixel。谷歌工程师已经在这些平台进行过传感器标定的优化,以适配于DayDream的Inside-Out追踪(从三自由度向六自由度)。不久前,谷歌工程师在韩国对Samsung传感器进行标定和调谐,希望下一代手机可以支持Daydream。所以我们才有了标定好且符合时钟同步的相机与IMU的两款设备。
Google在今年早些时候的Google IO大会上宣布inside-out 6自由度跟踪支持Daydream
今年,Google为融合Tango和Daydream SDK做了大量工作,据说11月份这项工作就会结束,所以8月底,很多底层工作应该会完成,意味着Tango/ARCore VIO系统可以利用Daydream传感器融合的工作成果。
最后,标定的真正好处可以从系统表现看出来。ARKit和ARCore在用户发现误差之前,都可以追踪得非常好。在AR应用中,目前还是以内容直观可见的形式为主,不像室内导航那样,存在长时间长距离的端对端测试。所以,从AR应用角度来看,标定带来的差异几乎是无法被检测的。但是开发者们正在扩大SDK应用的界限,谷歌预计会在工厂中做更紧密的标定,并上市一批新一代的设备。
Vibrator被用于在工厂中标定加速度计,AR软件堆栈更无须担心过多误差的问题了。
最大的IMU OEM曾提到,为了节省成本,他们的智能机IMU在工厂中只是在单一温度下进行标定。这意味着IMU硬件在某一指定的温度下,误差被调节到最低。但当手机发热的时候,IMU就不会那样准确。虽然这是十分普遍的现象,但是对于VIO来说,一旦设备发热,标定结果不可信,算法结果会产生漂移。当然,OEM也可以在客户要求下,在多种温度下标定传感器。
这一点,谷歌比不上苹果。虽然这只是一个很小的误差,但是意味着谷歌ARCore VIO代码会随着设备不同而发生变化。苹果的软硬件垂直集成帮助它更快地应对这类挑战,而Android需要对整个生态系统进行过滤。
光照
ARCore和ARKit提供了场景中的光照实时估计,所以开发者们可以迅速调整模拟光照,以便适应真实世界。
ARKit和ARCore可以对场景光进行简单的估计,不管是真实世界环境光还是尖锐的聚光灯。ARKit为开发者提供了强度和色温选项,而ARCore提供了单像素强度值(Android Studio API)或shader(Unity API)。这两种方法在早期Demo中有相似的结果,而Google的Demo看起来更好一些,可能是因为开发者们对Tango用得更熟。
不过,谷歌在今年的Google I/O大会中已经表示,对虚拟阴影在真实世界光照下调整的功能即将和开发者们见面。这是一个很大的进步,会让AR更加真实。
建图
Mapping,即SLAM中的‘M’,也叫建图,是ARCore相对于ARKit的显著优势领域之一。
它意味着可以将3D真实世界的环境信息存在内存中,供追踪器(VIO系统中的重要部分)进行设备的定位。设备就可以知道自己在环境中所处的位置。为了帮助大家理解,举个例子,蒙着眼睛把你放到一个陌生城市的市中心,只给你一张地图,你可以通过地图了解到自己的位置。
最简单形式的SLAM建图是一些离散的3D点云数据,它们代表了光学特征点的位置(例如桌角)。在这些数据中还隐藏着一些元数据,通过特征点在多帧中相同位置出现的次数,表明点的可信度(例如走来走去的狗,可信度就很低,因为每张图拍到的结果都不同)。一些图包括了“关键帧”,也就是每隔几秒存储的视频或照片的单帧,可以帮助追踪器更好地将真实世界与图进行匹配。另外,一些图使用密集点云,更可信但是需要GPU和更多内存。ARCore和ARKit都使用了离散点云图(可能没有关键帧)。
离散点云图就像右上图所示。左上图显示了点云和真实世界是如何匹配的(颜色代表点的可信度)。左下图是原始图像,右下图是强度图,可以被用到多种SLAM系统中(但并没有用到ARKit或ARCore中)。
那么这是如何工作的呢?当您加载ARCore/ARKit App时,跟踪器会检测之前是否有加载好的图,如果没有就会通过立体计算,自定义一个新的地图,也就是说我们拥有了相机视角下的一个小范围3D图。当你开始四处运动,相机捕捉到新的一幅图,并加载到3D图中,让它变得更大。ARKit在建图的时候使用了“sliding window”,也就是说它只会在图中保存最近的时间和距离数据,旧的数据会被自动忽视,而ARCore会管理更大的地图,也就是说系统会更加稳定。
所以使用ARCore,即使跟丢了也会恢复得很好。
ARCore相对于ARKit的独有之处
谁都未能想到,ARCore在ARKit发布后,拥有如此迅速的反应时间。相对于ARKit来说,ARCore其实有不少优势:
1.功能方面:有一些ARKit并未提到的功能优势
2.开发者经验:ARCore在Tango和Daydream上积累几年丰富的开发者经验,相对于ARKit仅仅几个月来说,是更加成熟的。
3.OEM:有足够的OEM厂商提供强大的支持
4.宣传:一段比较走心的宣传短片
ARCore的开发者们真的可以行动起来了么?
如果你喜欢Android,你有一个Samsung S8或Pixel,那么别犹豫,直接去开发吧。如果你喜欢iPhone,也不要担心是否需要换成ARCore。ARKit / ARCore SDK目前还是1.0版,功能还非常基础(VIO,平面检测,基础照明),将在未来几年内获得更多的功能(3D场景理解,遮挡,多人联网,内容持久性等)。对开发商和消费者来说,这将是一个不断的学习曲线。所以现在只需要坚持向着自己认为对的路子走就好。
ARCore与ARKit究竟谁更好?
作为技术解决方案,它们的能力非常接近。ARKit在集成和跟踪方面具有一定的技术优势; ARCore在建图和重定位方面具有一些优势。可是这两个优点大多是专业的计算机视觉工程师才能看到的。
苹果有一个清晰的市场宣传优势,拥有庞大的设备基础,可以立即升级到包含ARKit的最新iOS系统。苹果的用户一般更愿意花钱,所以从中期来看,AR Apps应该可以在ARKit上更好地获利。 Android的优势在于规模化,但Android生态系统需要至少12个月才能将所有的部分整合在一起,并在大多数新设备中获得硬件支持的ARCore。
ARCore在管理Tango R&D的架构上有很好的优势,其中大部分已经进行了用户/市场测试。现在基础已经比较到位,期待系统在未来12-24个月内快速发展,将变得更有趣。
ARKit或ARCore?主要还是看开发者的个人偏好和目标。这两个系统都有自己的优点和缺点,但重要的是两者都能够为消费者提供足够的消费体验,开发者请脑洞大开,尽情享受这个过程吧!
ARCore开发传送门:https://developers.google.com/ar/
ARKit开发传送门:https://developer.apple.com/arkit/