ARKit(2)  ARCore 和 ARKit平台特点比对

曾与一家最大的 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,构建地图,是 ARCore 相对于 ARKit 的显著优势领域之一。

它意味着可以将 3D 真实世界的环境信息存在内存中视觉信息中的三维重建,供追踪器(VIO系统中的重要部分)进行设备的定位。设备就可以知道自己在环境中所处的位置。为了帮助大家理解,举个例子,蒙着眼睛把你放到一个陌生城市的市中心,只给你一张地图,你可以通过地图了解到自己的位置。

最简单形式的 SLAM 建图是一些离散的 3D 点云数据,它们代表了光学特征点的位置(例如桌角)。在这些数据中还隐藏着一些元数据,通过特征点在多帧中相同位置出现的次数,表明点的可信度(例如走来走去的狗,可信度就很低,因为每张图拍到的结果都不同)。

一些图包括了“关键帧”,也就是每隔几秒存储的视频或照片的单帧,可以帮助追踪器更好地将真实世界与图进行匹配。另外,一些图使用密集点云,更可信但是需要 GPU 和更多内存。ARCore 和 ARKit 都使用了离散点云图(可能没有关键帧)。

离散点云图就像右上图所示。左上图显示了点云和真实世界是如何匹配的(颜色代表点的可信度)。左下图是原始图像,右下图是强度(灰度)图,可以被用到多种 SLAM 系统中(但并没有用到 ARKit 或 ARCore 中)。

那么这是如何工作的呢?当你加载 ARCore/ARKit App 时,跟踪器会检测之前是否有加载好的图,如果没有就会通过立体计算,自定义一个新的地图,也就是说我们拥有了相机视角下的一个小范围3D图。当你开始四处运动,相机捕捉到新的一幅图,更多的 3D 点云加入到地图中,地图越变越大。

如果地图变得太大而无法控制,追踪则会变得糟糕,以至于追踪出现漂移。不过,这也不再是个大问题,控制地图是 SLAM 研究正在做的一部分(还有深度学习和 CNN AI)。

ARKit 在建图的时候使用了“sliding window”,也就是说它只会在图中保存最近的时间和距离数据,旧的数据会被自动忽视,而 ARCore 会管理更大的地图,也就是说系统会更加稳定。所以使用ARCore,即使追踪跟丢了也会恢复得很好。

ARCore 和 ARKit 都采用了一种被称为“锚点”(Anchors)的概念,让我们感觉地图似乎覆盖了更大的物理面积。我第一次看到这个概念是在 HoloLens 上。正常情况下,系统会完全控制地图,而用户或应用开发者并不知道这点。锚点使开发者告诉系统“记住周围的地图,不要将其丢弃”。

我觉得锚点的某一合理物理范围大概有 1 平方米,这其中有我自己猜测的部分,也有可能会根据系统看到的光学特征发生多种变化。但当用户重新范围物理位置时,该范围足以让系统重新实现定位。

不管何时,内容被放置在一个物理位置时,开发者通常会丢下一个锚点。如果没有锚点,用户来回走动时,物理位置周围构建的地图(内容所呈现的地方)将会丢失,内容也将丢失。而加上锚点后,内容将永远固定在那里,也不排除因为积累的漂移,系统需要矫正重新定位时,糟糕的 UX (用户体验)会对内容产生影响。

构建地图的目的是以两种方式来帮助追踪:

第一,当我前后移动手机,地图从一开始移动便建立,手机往回移动时,新的特征点可被实时检测。

在位置计算中,通过对当前和先前场景的特征点收集,这使追踪也更加稳定。

第二,构建地图可帮助定位追踪或是恢复追踪。有时你会遮挡摄像头,手机掉落,或是移动的太快,或是不稳定因素发生,这时摄像头看到的场景与最新更新的地图无法匹配。这就是我们所说的“追踪丢失”这种情况下,系统重定位的两种方法:

F1:重置所有的标定系统,然后重启!这纯粹由测距系统完成(没有地图)。你会看到所有的内容“跳到”新的位置,然后固定在那里。用户体验并不好。

F2:系统可以使用它检测到的 3D 特征,然后搜索整个地图,尝试匹配,随着正确的虚拟位置进行更新。如果你当什么都没发生,一直使用应用,你会发现虚拟内容展示时,追踪不停丢失,但恢复后,追踪又正常。

这里又有两个问题。

首先,随着地图构建的越大,搜索过程会更耗时,过程也会更密集,也就是说要一遍又一遍地开启搜索;

其次,手机当前的位置永远不会精准地与手机过去那一时刻的位置相匹配,所以这也加大了地图搜索的难度,并且还要花费时间和计算去重新定位。基本上,即便有了构建地图,如果你移动的离地图太远,应用就没法定位了,系统需要重置、重启。

图片上的每条线是 SLAM 地图中的街道。在世界上任何地方,使用移动设备实现 AR 功能,都会遇到 SLAM 地图构建问题。记住,现在尽管有机器可读的地图和数据结构,但它们不是那种人们可使用的 3D 街景地图(这也是必须的)。

注意,对移动 AR 来说,我提到的“大”地图大致意思为,可以覆盖较大房间,或小型公寓物理面积的地图。

同时,也意味着,对于室外 AR,我们不得不思考全新构建地图的方式。

针对地图强大的重新定位是非常非常难的问题,而且在消费者体验层面还未解决。如果任何人宣称他们能提供多人 AR 玩法,或是固定性强的 AR 内容,那么不管是由一号玩家创建的地图,还是云端下载的地图,他们的 UX 会受到其他手机(如二号玩家手机)重新定位性能的限制。

你会发现,二号玩家不得不站在距离二号玩家很近的地方,双方几乎以同样的姿势举着手机。但是,二号玩家,或其他玩家只想坐在与你相反方向的沙发上,打开手机,立马看到你眼前看到的事物。或是说,站在距离几米的空间内,看到 AR 内容“固定”在那里。

(这里有一段 Tango实验的视频效果:https://www.youtube.com/watch?v=YulYq5P3heo)

现在已经有应用可以变通地实现多人游戏,如使用标记点,或为二号玩家编写距离应用开始位置的代码。技术上看,这些是可以运行的,但是你要一直为用户解释如何操作,用户体验可能一团糟。所以,并没有什么“简单运行”的魔法。

当然,如果任何人有不同的解决方案,我很想请教一下。不过,就我所知,多玩家实现稳定性极强的重新定位现在还无法实现,也没有发现公布的研究成果。这就像 VIO 的问题一样,只有少部分人可能会解决。我只知道一个还未公布的系统能够支持,2018 年初才会推出。

ARCore 的优势

谁都未能想到,ARCore在ARKit发布后,拥有如此迅速的反应时间。相对于ARKit来说,ARCore其实有不少优势:

功能方面:有一些 ARKit 并未提到的功能优势

开发者经验:ARCore 在 Tango 和 Daydream 上积累几年丰富的开发者经验,相对于 ARKit 仅仅几个月来说,是更加成熟的。

OEM:有足够的 OEM 厂商提供强大的支持

宣传:一段比较走心的宣传短片

OEM 厂商依旧谨慎

我感觉  ARCore 的推出相当匆忙,例如没有 ARCore 的 Logo。我在之前的文章中谈过 OEM 厂商对于 Tango 手机的谨慎。ARCore 消除了摄像头堆栈硬件商品化,以及 Tango 面临的材料成本的问题。看起来,Google 已经考虑到一些战略控制,但是讲真,我感觉一切太快了,这些事情还没真正地实施。

Google 坚持 ARCore 是谷歌移动服务(GMS)的一部分,如果 AR 真的成为“下一个平台”,这是重新划分生态系统势力的一个机会。ARCore 不只是像 GUI 那种功能。所有的初创公司都要考虑 SLAM 的问题。而 AR 是否会脱离 GMS,这可不好说。

OEM 厂商寻找 ARCore 替代品的最大原因可能是,他们巨大的市场(如中国)不欢迎 GMS。

GMS 最大的阻力在于:无法进入中国市场,那里却是 OEM 厂商们最大的市场。厂商们更喜欢一个可以在全球运行的 AR 软件解决方案。

开发者现在可以用 ARCore 开发了吗?

如果你喜欢Android,你有一个 Samsung S8 或 Pixel,那么别犹豫,直接去开发吧。如果你喜欢 iPhone,也不要担心是否需要换成 ARCore。

开发者应当关注的是,打造一个人们关心的 AR 应用要面临巨大的挑战。与学习如何在 ARKit 或 ARCore 上创建内容相比,创建什么样的内容要花费更大的努力。

ARKit / ARCore SDK目前还是1.0版,功能还非常基础(VIO、平面检测、基础照明),将在未来几年内获得更多的功能(3D场景理解、遮挡、多人联网,内容固定性等)。对开发商和消费者来说,这将是一个不断的学习过程。所以现在只需要坚持向着自己认为对的路子走就好。

不要对使用哪个平台想太多,多想想能创建什么样的 AR 内容

ARCore 比 ARKit 更好吗?

作为技术解决方案,它们的能力非常接近。ARKit 在集成和跟踪方面具有一定的技术优势(原因技术是基于特征点的); ARCore 在建图和重定位方面具有一些优势(给予vslam的)。可是这两个优点大多是专业的计算机视觉工程师才能看到的。

苹果有一个清晰的市场宣传优势,拥有庞大的设备基础,可以立即升级到包含 ARKit 的最新 iOS 系统。苹果的用户一般更愿意花钱,所以从中期来看,AR 应用应该可以在 ARKit 上更好地获利。

Android 的优势在于规模化,但 Android 生态系统需要至少 12 个月才能将所有的部分整合在一起,并在大多数新设备中获得硬件支持的 ARCore。

ARCore 由此前 Tango 研发的基础,其中大部分已经进行了用户/市场测试。现在基础已经比较到位,看看这些系统在未来12-24个月内如何快速发展,这会很有趣。

ARKIT/ARCore对比分析(二)相关推荐

  1. ARKIT/ARCore对比分析(一)

    ARKit简介 ARkit是什么? 苹果为什么发布ARkit?(6月5日的苹果WWDC 2017全球开发者大会上,苹果发布了AR开发平台ARkit) 1.概述:ARkit应用平台是苹果的首个 AR 产 ...

  2. 移动三大平台和三大开发模式对比分析

    一:移动三大平台及其对比分析: 1)移动三大平台 2)移动三大平台对比分析 二:三大开发模式及其对比分析: 1)三大开发模式 2)三大开发模式对比分析

  3. 微内核、宏内核、混合内核的对比分析

    - 什么是内核 宏内核 微内核 混合内核 - 相关产品分析 Linux RT-Thread 一.什么是内核     内核是操作系统的核心部分,管理着系统的各种资源,是连接应用程序和硬件的一座桥梁,也是 ...

  4. WebGIS开发及二三维GIS开发框架对比分析

    GIS(地理信息系统)前端开发是GIS应用开发的重要组成部分,随着Web GIS技术的发展,前端开发在地图应用中的作用愈加重要. 本文将介绍GIS前端开发的基本计划以及市面上各种二三维GIS开发框架的 ...

  5. NLP这两年:15个预训练模型对比分析与剖析

    作者 | JayLou 来源 | 知乎 前言 在之前写过的<NLP的游戏规则从此改写?从word2vec, ELMo到BERT>一文中,介绍了从word2vec到ELMo再到BERT的发展 ...

  6. 后BERT时代:15个预训练模型对比分析与关键点探索(附链接)

    来源:知乎 作者:JayLou 本文约7800字,建议阅读10分钟. 本文对ELMo以来的15个代表性的预训练语言模型进行了多维度的对比和分析. 前言 在之前写过的<NLP的游戏规则从此改写?从 ...

  7. 数据库防护技术对比分析

    过去,信息安全工作主要围绕着网络层.主机层等边界防护采取了一系列的安全措施,已建立起相对安全的数据应用环境,但由于技术局限和相关安全产品匮乏等原因,数据库安全建设一直未能得到有效开展,这就造成了数据能 ...

  8. Rose与PowerDesigner:两款建模工具对比分析比较[转]

     Rose与PowerDesigner:两款建模工具对比分析比较收藏 [IT168技术分析] 一. 二者的出身       作为世界最著名的两大CASE工具,Rational Rose和PowerDe ...

  9. 注册中心—常见注册中心组件对比分析

    原文作者:知了V笑 原文地址:微服务技术栈:常见注册中心组件,对比分析 关于注册中心原理,请先阅读微服务注册中心原理 目录 一.Zookeeper组件 二.Eureka组件 三.Consul组件 四. ...

最新文章

  1. php中浮点型的精确度,PHP中的浮点精度和类型
  2. 四十八、面试前,必须搞懂Java中的线程池(下篇)
  3. 麻省理工学院计算机专业2018,麻省理工学院专业排名一览及最强专业推荐(QS世界大学排名)...
  4. Windows API——FindFirstFile——查找文件
  5. 摄像机旋转约束问题及解决
  6. OAuth 1.0a 的 C# 代码实现
  7. 各种小巧的Hello World
  8. python tk combobox设置值为空_在PDMS中使用python直接生成管口方位图(开源分享第二集)...
  9. android fps测试 apk,性能测试 查看Android APP 帧数FPS的方法
  10. 物联网常见的无线传输协议类型
  11. 电子相册如何用c语言制作,电子相册怎样制作?
  12. Linux rm -rf * 文件恢复记
  13. linux查看web密码,fuel7.0 openstack webui 默认密码查看
  14. PJSIP 下载和编译
  15. 2022年武汉市小微企业服务补贴券签约服务机构申报条件、材料和申报方式
  16. itext7学习笔记——第2章
  17. Kaggle之泰坦尼克号(1)
  18. 转:分布式视频编码关键技术及其发展趋势
  19. 【交通标志识别】基于matlab Hog+SVM路标检测与识别【含Matlab源码 1715期】
  20. 虚拟服务器主机选型,如何选择虚拟主机?Windows主机选购指南

热门文章

  1. python查看微信撤回消息_想查看微信好友撤回的消息?Python帮你搞定
  2. 滑坡的剖面图怎么用计算机绘制,cad怎么画滑坡剖面
  3. ggplot2中显示坐标轴_R可视化11|ggplot2-图层图形语法 (3)
  4. linux服务器打包命令,linux 打包命令tar(主要用于服务器之间迁移资源文件)
  5. mysql shharding_mysql 技术内幕 的示例数据库
  6. 基于Struts2框架的名片管理系统
  7. 学习《Linux设备模型浅析之设备篇》笔记(深挖一)
  8. int long java_java long int的区别
  9. C++——String类超详细介绍
  10. 如何学习streamdecoder类_如何学习篇5:强化2种能力——2种学习模式之运动类:隐性学习...