1,ARKit、Tango、Hololens技术对比算法
2,开发人员如何使用ARKit浏览器
明天小编会更新第三篇网络
1,AR以及其余技术的将来,学习
2,追踪技术的将来优化
,这是小编的一个iOS交流群 659170228,欢迎你们的入驻,一块儿交流学习!
Tango 、 HoloLens、 Vuforia 等 SDK 怎么样?设计
Tango 只是一个品牌名,而不是真正的产品。Tango 包括硬件参考设计(RGB,鱼眼镜头,深度相机和CPU / GPU规格),还参与 VIO(运动跟踪),稀疏映射(区域学习)和密集 3D 重建(深度感知)等软件。orm
HoloLens 具备彻底相同的软件栈,另外包括一些 ASIC(微软称之为全息处理单元)优化 CPU / GPU 卸载处理并减少电耗。cdn
Vuforia 与 ARKit 几乎是同样的,只是 Vuforia 的硬件是独立的。视频
上述 SDK 均使用相同的 VIO 系统,并且,Tango 和 ARKit 使用的均为 FlyBy 最初发布的代码库!HoloLens 和 Tango 都不使用深度相机进行追踪,那么究竟是什么技术设备让 ARKit 大放异彩呢?server
答案是 ARKit 并不比 HoloLens 好,我甚至认为 HoloLens 的跟踪系统是市场上最好的,但 HoLolens 的硬件普及并不广。微软可能会在 Windows 系统的智能手机中安装 HoloLens 跟踪系统,但我相信出于商业缘由,微软不会这样作:
由于这样可能会增长生产和时间成本,为一款销量或许不多的手机校准传感器。并且,微软版本的 ARKit 也可能没法说服开发者放弃使用 iOS 或 Android 系统。12 个月前,Google 本就能够轻松交付可以在 Android 系统上运行的 Tango 手机,但 Google 没有这样作。若是 Google 早早将 Tango 发货 ,那么 ARKit 的问世也只是紧跟趋势,而非重大突破。
我认为,Google 公司不想为每家 OEM 都进行特定的传感器校准过程,并且每家 OEM 厂商生产的 Tango 版本都不同,Google 也不想在一些较大的 OEM 厂商(三星、华为等)中选择。因此,Google 为 OEM 厂商提供了硬件的参考设计,OEM 厂商能够自行选择“使用,或者不使用”。(固然,事情并不是这么简单,这是 OEM 厂商反馈给个人关键点。)
随着 Android 智能手机硬件商品化,相机和传感器堆栈是 Android 手机最后实现差别化的地方,因此 OEM 厂商没法知足 Google 的要求。Google 认为,深度相机是手机的一部分,可是深度相机增长了手机成本,这也是 OEM 厂商拒绝 Google 的另外一个缘由!
自从 ARKit 发布以来,市场已经发生了变化。OEM 厂商要么寻找 Tango 的替代系统,要么接受 Google 的硬件参考设计,而后实现平台控制。这也是有意思的变化。
总的来讲,ARKit 更好的缘由在于:
苹果公司能够负担得起将 VIO 算法紧密耦合到传感器上,并花费不少时间来校准 VIO 系统,以减小计算空间位置时产生的偏差。值得注意的是,大型 OEM 厂商有一些替代方案。能够选择其余的追踪方案,像 ORB Slam、OpenCV 等,但几乎都是光学追踪器,都配有单个 RGB、立体声、深度相机,有些使用稀疏点云,有些使用密集点云。有许多创业公司正在研发追踪系统,研究加强像素也是一个很好的方向,但任何 VIO 系统最终的竞争都会集中到硬件模型和校准上。
接下来咱们来谈谈,ARkit中的几个重要技术以及几个注意事项
这其中的学习难度较大,比从网络到移动或从移动到 VR 更有难度。你须要完全从新思考应用程序的如何运行以及用户体验(UX)的意义是什么。我如今看到不少 ARKit 的 demo,四年前看到它们是基于 Vuforia 建立,再往前四年就是 Layar (2010 年荷兰公司 SPRXmobile 推出的全球第一款 AR 手机浏览器)。这几年来,我 看过了几乎全部类型的 AR APPs 的例子,我很乐意为你们提供支持和反馈。
我经常鼓励开发人员敢于构建新奇的 APP。一些蠢蠢的 APP 一上线便大获成功,但经过 AR 硬件开发让用户是满意的案例也十分具备挑战。
固然,受限于iOS设备的硬件,当前的ARkit还不能作到完美。无论怎么样,当前的iOS设备还只能实现单母SLM。所以在实际的开发和使用中要注意一下事项:
1,在设计AR产品体验时,必定要保证现场的光照条件
ARkit的Worldtracking涉及到图像分析,其前提是摄像头能够捕捉到清晰的图像。所以,若是现场的光照条件很差而致使摄像头没法捕捉到图像的细节,那么最终的用户体验确定是糟糕的。
2,使用跟踪质量信息向用户提供反馈
ARkit世界跟踪功能的另外一大前提是实时监测设备的运动信息。过量或过于剧烈的运动将致使图像模糊,从而没法追踪不一样视频帧的特征点,致使跟踪质量降低。ARCamera能够提供跟踪状态信息,所以建议开发者设计相应的UI,向用户反馈此类信息,避免过量或过于剧烈的运动。
3,容许ARkit得到足够的时间来检测平面,而在检测完成后最好禁用平面检测功能
在实际体检的时候,平面检测可能会耗费比较长的时间。并且当某个平面首次被检测时,其位置和范围信息每每是不许确的。随着平面在场景中出现的时间足够长,ARkit将会优化相关的位置和范围信息。可是一旦咱们获取到了使人满意的信息,就应该关闭平面检测功能,不然ARkit将持续变动平面描点的位置,范围和坐标信息。
世界追踪系统是如何工做的?
苹果文档中对世界追踪过程是这么解释的:ARKit 使用视觉惯性测距技术,对摄像头采集到的图像序列进行计算机视觉分析,而且与设备的运动传感器信息相结合。ARKit 会识别出每一帧图像中的特征点,而且根据特征点在连续的图像帧之间的位置变化,而后与运动传感器提供的信息进行比较,最终获得高精度的设备位置和偏转信息。
咱们经过一个 gif 图来理解上面这段话:
追踪质量:
世界追踪须要必定的条件才能达到较好的效果,若是达不到所需的条件要求,那么世界追踪的质量会下降,甚至会没法追踪。较好的世界追踪质量主要有如下三个依赖条件:
运动传感器不能中止工做。若是运动传感器中止了工做,那么就没法拿到设备的运动信息。根据咱们以前提到的世界追踪的工做原理,毫无疑问,追踪质量会降低甚至没法工做。
真实世界的场景须要有必定特征点可追踪。世界追踪须要不断分析和追踪捕捉到的图像序列中特征点,若是图像是一面白墙,那么特征点很是少,那么追踪质量就会降低。
设备移动速度不能过快。若是设备移动太快,那么 ARKit 没法分析出不一样图像帧之中的特征点的对应关系,也会致使追踪质量降低。
追踪状态
世界追踪有三种状态,咱们能够经过 camera.trackingState 获取当前的追踪状态。
Not Available:世界追踪正在初始化,还未开始工做。
Normal: 正常工做状态。
Limited:限制状态,当追踪质量受到影响时,追踪状态可能会变为 Limited 状态。
与 TrackingState 关联的一个信息是 ARCamera.TrackingState.Reason,这是一个枚举类型:
case excessiveMotion:设备移动过快,没法正常追踪。
case initializing:正在初始化。
case insufficientFeatures:特征过少,没法正常追踪。
case none:正常工做。
咱们能够经过 ARSessionObserver 协议去获取追踪状态的变化,比较简单,能够直接查看接口文档,这里不作深刻介绍。到这里,ARKit 中有关于世界追踪的知识基本介绍完了,世界追踪算是 ARKit 中核心功能了
归根究竟是统计学问题
AR 系统没有“可行”或者“不可行”一说。 大部分状况下,AR 系统能够很好的完成工做。AR 系统力求变得“更好”,也是推进统计学发展的事情。
故而,不要彻底相信 AR APP 的演示,特别是发布于 YouTube 上,显示出惊人的效果的 AR APP。在精心安排的环境中所表现的效果与现实生活中普通用户所能得到的效果之间,每每存在很大差距。可是智能手机或 VR 应用的演示一般并不存在这种问题。因此,观众经常被愚弄。
在上面的图像中,有一个网格,表示相机中的数字图像传感器。每一个格子都是一个像素点。为了稳定追踪,在假设设备彻底静止的状况下,每一个像素应该在现实世界中的有一个相匹配的对应点。然而,右侧图像显示光子不是那么的听话,各类光子会随意落到任何地方,每一个像素点是光子的总数。场景中的光线变化(太阳光穿透云层,荧光灯闪烁等)也会改变传感器中的光子组成,如今传感器要对应现实世界的不一样像素点。那么,这样的状况下视觉追踪系统就认为用户移动了!
因此,各类 ARKit demo 中光点闪烁时,系统必须肯定哪些点是“可靠”的。系统对这些点进行三角测量来计算用户的空间位置,求平均数后获得对实际位置的最佳估计数。所以,为确保错误的统计彻底被移除,便须要研发更精确的系统。这就须要相机硬件堆栈(多个镜片和涂层、快门和图像传感器等)、IMU 硬件和软件算法之间的严密集成和校准。
下面是两个校准方法
光学校准
上图中,一个虚拟物体茶杯被放在了现实世界的桌子上。
当周围环境光线较好时,摄像机捕捉到的图像光照强度也较好,此时,咱们放在桌子上的茶杯看起来就比较贴近于现实效果,如上图最左边的图。可是当周围光线较暗时,摄像机捕捉到的图像也较暗,如上图中间的图,此时茶杯的亮度就显得跟现实世界格格不入。
针对这种状况,ARKit 提供了光学校准,开启光学校准后,咱们能够拿到当前图像的光照强度,从而可以以更天然的光照强度去渲染虚拟物体,如上图最右边的图。
光学校准基于当前捕捉到的图像的曝光等信息,给出一个估计的光照强度值(单位为 lumen,光强单位)。默认的光照强度为 1000lumen,当现实世界较亮时,咱们能够拿到一个高于 1000lumen 的值,相反,当现实世界光照较暗时,咱们会拿到一个低于 1000lumen 的值。
ARKit 的光学校准默认是开启的,固然也能够经过下述方式手动配置:
configuration.isLightEstimationEnabled = true
获取光学校准的光照强度也很简单,只须要拿到当前的 ARFrame,经过如下代码便可获取估计的光照强度:
let intensity = frame.lightEstimate?.ambientIntensity
惯性校准
对于 IMU 来讲,测量加速度比测量距离或速率更加剧要。IMU 的读取错误随着时间的推移不断累积,产生偏差的速度很是快!校准和建模的目标是确保距离的测量在每秒钟 X 等分时间下的精度足够高。理想状况下,这个时间段要足够长,以减小当镜头被遮盖或场景中发生其余状况时,致使摄像机丢失对几帧画面的追踪。
使用 IMU 测量距离称为航位推算。这基本算是一个猜想,对 IMU 收集的数据进行建模,肯定积累错误的方式,而后编写过滤器来减少偏差。想象一下,若是你被要求迈出一步,而后猜想迈出的步子有多大。只猜想迈出一步的距离会产生很高的偏差。可是,若是你反复迈出千步并猜想每一步的距离,所产生的偏差便会很是小。由于你对于踏出哪只脚、地板的种类、鞋子的款式、移动速度的快慢、身体状态的好坏等等熟知,那么你最终的猜想便会很是准确。基本的 IMU 校准和建模即是这一原理。
数据有不少偏差来源。机器臂一般以彻底相同的方式重复地移动设备,捕获 IMU 的输出并写入滤波器,直到来自 IMU 的输出与来自机器臂的移动精确匹配。为进一步减少额外的偏差,Google、微软甚至在国际空间站(ISS)及“零重力飞机”在微型重力环境下进行校准。
实际上,达到真正的精准度,比嘴上说说难的多。OEM 厂商必须对全部设备进行校准,即便许多设备有不一样的 IMU(例如,Galaxy 7 可能有来自 Invensense 和 Bosch 的 IMU,固然 Bosch 不适用于 Invensense)。固然,这是苹果相对于 Android OEM 厂商的另外一个优点所在。