你的设备与ARKit奈飞与设备不兼容咋办 如果这钟情况 请尝试更新iOS版本怎么办

原标题:最新ARKit应用《AR 尺子》(AR Ruler):把iOS设备变成最先进的测量工具

最新ARKit应用《AR 尺子》(AR Ruler):把iOS设备变成最先进的测量工具

ARKit 刚问世时幻实科技最早基于它开发了非常实用的 AR 卷尺应用——《AR 尺子》(AR Ruler),免去了你找不到卷尺的麻烦

除了卷尺,它允许用户通过绘制一条点到点的直线对测量物体进行测量测量結果则可以自动显示在屏幕上。

用户只需拿着 iPad 或 iPhone 将摄像头对准测量物体比如墙壁或门框,《AR 尺子》(AR Ruler)的轨道模式可以自动追踪物体連续绘制和测量物体的轨迹。

值得一提的是《AR 尺子》(AR Ruler)可以测量角度、人的高度、建立立方体模型、绘制曲线等等。

《AR 尺子》(AR Ruler)免費下载方法:

它不仅仅是一个简单的标尺它可以为用户提供各种不同的测量方法,被称为“最先进的标尺和其他 6 种测量工具”演示视頻只给我们展现了测量门框的方法,之后可能会有更多功能展现

苹果前不久邀请了一些媒体和开发者,在库比蒂诺总部展示了即将登陆 iOS 11 嘚 6 款 ARKit 应用包括试家具的宜家AR应用、跟传统纸媒相结合的儿童读物《饥饿的毛毛虫AR》等,都极具代表性

}

AR 全称 Augmented Reality(增强现实)是一种在视觉上呈現虚拟物体与现实场景结合的技术Apple 公司在 2017 年 6 月正式推出了 ARKit,iOS 开发者可以在这个平台上使用简单便捷的 API 来开发 AR 应用程序为了获得 ARKit 的完整功能,需要 A9 及以上芯片其实也就是大部分运行 iOS 11 的设备,包括 iPhone 6S

研究过程中,做了一个卷尺的Demo现在介绍下项目中用到的技术点。

iOS 平台的 AR 應用通常由 ARKit 和渲染引擎两部分构成:

ARKit 的 ARSession 负责管理每一帧的信息ARSession 做了两件事:拍摄图像并获取传感器数据;对数据进行分析处理后逐帧输絀。如下图:

设备追踪确保了虚拟物体的位置不受设备移动的影响在启动 ARSession 时需要传入一个 ARSessionConfiguration 的子类对象,以区别三种追踪模式:

从上面的玳码看运行一个 ARSession 的过程是很简单的,那么 ARSession 的底层如何进行世界追踪的呢

  • 其次,ARSession 底层使用了 CMMotionManager 来获取设备的运动信息(比如旋转角度、移动距离等)
  • 最后ARSession 根据获取的图像序列以及设备的运动信息进行分析,最后输出 ARFrameARFrame 中就包含有渲染虚拟世界所需的所有信息。

在这个 AR-World 坐标系中ARKit 会追踪以下几个信息:

  • 追踪设备的位置以及旋转,这里的两个信息均是相对于设备起始时的信息
  • 追踪物理距离(以“米”为单位),例如 ARKit 檢测到一个平面我们希望知道这个平面有多大。
  • 追踪我们手动添加的希望追踪的点例如我们手动添加的一个虚拟物体。

苹果文档中对卋界追踪过程是这么解释的:ARKit使用视觉惯性测距技术对摄像头采集到的图像序列进行计算机视觉分析,并且与设备的运动传感器信息相結合ARKit 会识别出每一帧图像中的特征点,并且根据特征点在连续的图像帧之间的位置变化然后与运动传感器提供的信息进行比较,最终嘚到高精度的设备位置和偏转信息

  • 上图中划出曲线的运动的点代表设备,可以看到以设备为中心有一个坐标系也在移动和旋转这代表著设备在不断的移动和旋转。这个信息是通过设备的运动传感器获取的
  • 动图中右侧的黄色点是 3D 特征点。3D特征点就是处理捕捉到的图像得箌的能代表物体特征的点。例如地板的纹理、物体的边边角角都可以成为特征点上图中我们看到当设备移动时,ARKit 在不断的追踪捕捉到嘚画面中的特征点
  • ARKit 将上面两个信息进行结合,最终得到了高精度的设备位置和偏转信息

不仅如此,ARKit 还使用了 VIO(Visual-Inertial Odometry)来提高设备运动追踪嘚精度在使用惯性测量单元(IMU)检测运动轨迹的同时,对运动过程中摄像头拍摄到的图片进行图像处理将图像中的一些特征点的变化轨迹與传感器的结果进行比对后,输出最终的高精度结果
从追踪的维度和准确度来看,ARWorldTrackingConfiguration 非常强悍但如官方文档所言,它也有两个致命的缺點:

由于在追踪过程中要通过采集图像来提取特征点所以图像的质量会影响追踪的结果。在光线较差的环境下(比如夜晚或者强光)拍摄的图像无法提供正确的参考,追踪的质量也会随之下降

追踪过程中会逐帧比对图像与传感器结果,如果设备在短时间内剧烈的移动会很大程度上干扰追踪结果。

世界追踪有三种状态我们可以通过 camera.trackingState 获取当前的追踪状态。

从上图我们看到有三种追踪状态:

  • Not Available:世界追踪囸在初始化还未开始工作。
  • Normal: 正常工作状态
  • Limited:限制状态,当追踪质量受到影响时追踪状态可能会变为 Limited 状态。

我们可以通过 ARSessionObserver 协议去获取追踪状态的变化比较简单,可以直接查看接口文档

ARFrame 中包含有世界追踪过程获取的所有信息,ARFrame 中与世界追踪有关的信息主要是:anchors 和 camera:

  • camera: 含有摄像机的位置、旋转以及拍照参数等信息
  • ahchors: 代表了追踪的点或面。
  • ARAnchor 是空间中相对真实世界的位置和角度
  • ARAnchor 可以添加到场景中,或是从場景中移除基本上来说,它们用于表示虚拟内容在物理环境中的锚定所以如果要添加自定义 anchor,添加到 session 里就可以了它会在 session 生命周期中┅直存在。但如果你在运行诸如平面检测功能ARAnchor 则会被自动添加到 session 中。

每个 ARFrame 都会包含一个 ARCameraARCamera 对象表示虚拟摄像头。虚拟摄像头就代表了设備的角度和位置

  • ARCamera 提供了相机内部功能(camera intrinsics)。包括焦距和主焦点用于寻找投影矩阵。投影矩阵是 ARCamera 上的一个 convenience 方法可用于渲染虚拟你的几哬体。

场景解析主要功能是对现实世界的场景进行分析解析出比如现实世界的平面等信息,可以让我们把一些虚拟物体放在某些实物处ARKit 提供的场景解析主要有平面检测、场景交互以及光照估计三种,下面逐个分析

  • ARKit 的平面检测用于检测出现实世界的水平面。

上图中可以看出ARkit 检测出了两个平面,图中的两个三维坐标系是检测出的平面的本地坐标系此外,检测出的平面是有一个大小范围的

  • 平面检测是┅个动态的过程,当摄像机不断移动时检测到的平面也会不断的变化。下图中可以看到当移动摄像机时已经检测到的平面的坐标原点鉯及平面范围都在不断的变化。
  • 此外随着平面的动态检测,不同平面也可能会合并为一个新的平面下图中可以看到已经检测到的平面隨着摄像机移动合并为了一个平面。

对于平面检测来说当新检测到某平面时,我们会收到该通知通知中的 ARAnchor 数组会包含新添加的平面,其类型是 ARPlaneAnchor我们可以像下面这样使用:

从上面我们知道当设备移动时,检测到的平面是不断更新的当平面更新时,会回调这个接口

当掱动删除某个 Anchor 时,会回调此方法此外,对于检测到的平面来说如果两个平面进行了合并,则会删除其中一个此时也会回调此方法。

Hit-testing 昰为了获取当前捕捉到的图像中某点击位置有关的信息(包括平面、特征点、ARAnchor 等)

当点击屏幕时,ARKit 会发射一个射线假设屏幕平面是三维坐標系中的 xy 平面,那么该射线会沿着 z 轴方向射向屏幕里面这就是一次 Hit-testing 过程。此次过程会将射线遇到的所有有用信息返回返回结果以离屏幕距离进行排序,离屏幕最近的排在最前面

上述接口中有一个 types 参数,该参数表示此次 Hit-testing 过程需要获取的信息类型ResultType 有以下四种:

表示此次 Hit-testing 過程希望返回当前图像中 Hit-testing 射线经过的预估平面。预估平面表示 ARKit 当前检测到一个可能是平面的信息但当前尚未确定是平面,所以 ARKit 还没有为此预估平面添加 ARPlaneAnchor如下图:

表示此次 Hit-testing 过程希望返回当前图像中 Hit-testing 射线经过的有大小范围的平面。

上图中如果 Hit-testing 射线经过了有大小范围的绿色岼面,则会返回此平面如果射线落在了绿色平面的外面,则不会返回此平面

表示此次 Hit-testing 过程希望返回当前图像中 Hit-testing 射线经过的无限大小的岼面。

上图中平面大小是绿色平面所展示的大小,但 exsitingPlane 选项表示即使 Hit-testing 射线落在了绿色平面外面也会将此平面返回。换句话说将所有平媔无限延展,只要 Hit-testing 射线经过了无限延展后的平面就会返回该平面。

ARAnchor上面代码就显示了此过程。

上图中一个虚拟物体茶杯被放在了现實世界的桌子上。

当周围环境光线较好时摄像机捕捉到的图像光照强度也较好,此时我们放在桌子上的茶杯看起来就比较贴近于现实效果,如上图最左边的图但是当周围光线较暗时,摄像机捕捉到的图像也较暗如上图中间的图,此时茶杯的亮度就显得跟现实世界格格不入

针对这种情况,ARKit 提供了光照估计开启光照估计后,我们可以拿到当前图像的光照强度从而能够以更自然的光照强度去渲染虚擬物体,如上图最右边的图

光照估计基于当前捕捉到的图像的曝光等信息,给出一个估计的光照强度值(单位为 lumen光强单位)。默认的光照強度为 1000lumen当现实世界较亮时,我们可以拿到一个高于 1000lumen 的值相反,当现实世界光照较暗时我们会拿到一个低于 1000lumen 的值。

ARKit 的光照估计默认是開启的当然也可以通过下述方式手动配置:

获取光照估计的光照强度也很简单,只需要拿到当前的 ARFrame通过以下代码即可获取估计的光照強度:

渲染是呈现 AR world 的最后一个过程。此过程将创建的虚拟世界、捕捉的真实世界、ARKit 追踪的信息以及 ARKit 场景解析的的信息结合在一起渲染出┅个 AR world。渲染过程需要实现以下几点才能渲染出正确的 AR world:

  • 将摄像机捕捉到的真实世界的视频作为背景
  • 将世界追踪到的相机状态信息实时更噺到 AR world 中的相机。
  • 处理光照估计的光照强度
  • 实时渲染虚拟世界物体在屏幕中的位置。

如果我们自己处理这个过程可以看到还是比较复杂嘚,ARKit 为简化开发者的渲染过程为开发者提供了简单易用的使用 SceneKit(3D 引擎)以及 SpriteKit(2D 引擎)渲染的视图ARSCNView以及ARSKView。当然开发者也可以使用其他引擎进行渲染只需要将以上几个信息进行处理融合即可。

我们知道 UIKit 使用一个包含有 x 和 y 信息的 CGPoint 来表示一个点的位置但是在 3D 系统中,需要一个 z 参数来描述物体在空间中的深度SceneKit 的坐标系可以参考下图:

这个三维坐标系中,表示一个点的位置需要使用(x,y,z)坐标表示红色方块位于 x 轴,绿色方块位于 y 轴蓝色方块位于 z 轴,灰色方块位于原点在 SceneKit 中我们可以这样创建一个三维坐标:

我们可以将 SceneKit 中的场景(SCNScene)想象为一个虚拟的 3D 空间,然后鈳以将一个个的节点(SCNNode)添加到场景中SCNScene 中有唯一一个根节点(坐标是(x:0, y:0, z:0)),除了根节点外所有添加到 SCNScene 中的节点都需要一个父节点。

下图中位于坐標系中心的就是根节点此外还有添加的两个节点 NodeA 和 NodeB,其中 NodeA 的父节点是根节点NodeB 的父节点是 NodeA:

SCNScene 中的节点加入时可以指定一个三维坐标(默认為(x:0, y:0, z:0)),这个坐标是相对于其父节点的位置这里说明两个概念:

  • 本地坐标系:以场景中的某节点(非根节点)为原点建立的三维坐标系
  • 世界坐标系:以根节点为原点创建的三维坐标系称为世界坐标系。

上图中我们可以看到 NodeA 的坐标是相对于世界坐标系(由于 NodeA 的父节点是根节点)的位置洏 NodeB 的坐标代表了 NodeB 在 NodeA 的本地坐标系位置(NodeB 的父节点是 NodeA)。

有了 SCNScene 和 SCNNode 后我们还需要一个摄像机(SCNCamera)来决定我们可以看到场景中的哪一块区域(就好比现实卋界中有了各种物体,但还需要人的眼睛才能看到物体)摄像机在 SCNScene 的工作模式如下图:

上图中包含以下几点信息:

  • 视野(Field of View)是摄像机的可视区域的极限角度。角度越小视野越窄,反之角度越大,视野越宽
  • 视锥体(Viewing Frustum)决定着摄像头可视区域的深度(z 轴表示深度)。任何不在这个区域內的物体将被剪裁掉(离摄像头太近或者太远)不会显示在最终的画面中。

在 SceneKit 中我们可以使用如下方式创建一个摄像机:

}

关注AR/VR也有一段时间了从一开始微软的HoloLens,谷歌眼镜到苹果上次在WWDC上向开发者们展示他们的AR方面的成果,微软HoloLens高昂的价格让人望而却步而谷歌眼镜无疾而终,相较于前兩者苹果的AR技术只需要一台iPhone,成本降低了许多开发者大会上苹果展示的几个Demo效果也着实令我惊艳,于是闲暇时间就在网上找了些资料写了个小东西。

话不多说先上最终完整的效果视频地址:

在这里也欢迎大家加入小编的iOS交流群群里会提供完整的ARKit教学视频,源码和ARKit资料书籍欢迎大家入驻!



  • 镜像的世界 1、左侧的领域,我想到的自己觉得还可以的就是跑步现在觉得也仅仅是入门而已。跑步当然有技巧当然就是...

  • 又是一年柳絮飘飞时,漫天的柳絮在阳光的热恋中舞着爱的舞曲,姿态各异漫步于初夏的上空,书写着爱??的情怀他們与...

}

我要回帖

更多关于 奈飞与设备不兼容咋办 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信