14-探究ARKit

作者: 60916fc63567 | 来源:发表于2017-06-28 16:31 被阅读351次

    一、AR、ARKit、Tango的简介

    1.1 何为AR(增强现实)?何为VR(虚拟现实)?

    增强现实技术是一种实时地计算摄影机影像的位置及角度并加上相应图像、视频、3D模型的技术,这种技术的目标是在屏幕上把虚拟世界套在现实世界并进行互动。这种技术1990年提出。随着随身电子产品CPU运算能力的提升,预期增强现实的用途将会越来越广。

    虚拟现实技术是一种可以创建和体验虚拟世界的计算机仿真系统,它利用计算机生成一种模拟环境,是一种多源信息融合的、交互式的三维动态视景和实体行为的系统仿真使用户沉浸到该环境中。

    虚拟现实发展阶段

    虚拟现实技术演变发展史大体上可以分为四个阶段:

    有声形动态的模拟是蕴涵虚拟现实思想的第一阶段(1963年以前);

    虚拟现实萌芽为第二阶段(1963 -1972 );

    虚拟现实概念的产生和理论初步形成为第三阶段(1973 -1989 );

    虚拟现实理论进一步的完善和应用为第四阶段(1990 -2004 );

    飞入寻常百姓家(2016-);

    1.2 科技巨头在AR的布局?

    移动领域,典型代表Google的Tango技术与Apple的ARKit技术

    何为Tango?

    Tango是Google的一个AR增强现实项目,配合其独特的移动设备和SDK可以方便的在应用中使用AR技术。

    Google Project Tango.

    何为ARKit?

    ARKit是Apple 2017 WWDC大会上,Apple宣布在iOS 11中带来了全新的增强现实组件ARKit,该应用适用于iPhone和iPad平台,力求帮助iPhone成为全球最大的AR平台。

    二、Apple ARkit和Google Tango的原理和优劣

    2.1、ARKit与Tango的实现原理

    Google Tango在AR领域的硬件上的方式简单粗暴,利用堆硬件来实现AR技术需要的各个条件。

    Tango手机与普通手机相比,新增一颗鱼眼镜头和一颗红外传感器,这两个原件是实现 Tango 核心技术的关键,Tango核心技术包含运动追踪、深度感知和区域学习。

    运动追踪:鱼眼摄像头的作用为了让拍摄场景配合上用户位置、视野的移动,即动作追踪。当设备在移动的过程中,超广角鱼眼相机不断地一帧一帧进行拍摄,然后手机会对每一帧里的“特征点”相对位置进行分析,计算出鱼眼相机、也就是手机移动的距离、速度和方向。

    深度感知深度感知即是距离感知。通过红外线传感器和双摄立体视觉都能够测出目标点和我们手机之间的距离。并且为了让整个空间的“绘制”能在手机中进行,Tango手机中的“深度感知”其实也需要前面提到的鱼眼摄像头来提供特征点,只通过这些特征点来对实际环境进行动态建模,大大减少了手机计算的压力。

    区域学习:尽管鱼眼超广角视野很广,但是仍然没有办法获取整个空间的信息。所以Tango手机在不断检测新场景的过程中,一旦检测到这个场景中有和之前某个场景中的深度和特征点匹配的点,就会将两个场景结合,最后经过一段时间的学习,所有新场景都会被Tango手机记住并且构成一整套空间。(另外一种解释:移动追踪只会反馈移动设备当前的坐标信息、对于设备“看”到的东西没有任何记忆,区域学习使移动设备能够看到和记住物理空间的关键视觉特征,比如边缘,角落等。区域学习会把看到的保存起来,下次再次“看”到的时候会进行匹配,利用这些数据修正误差(漂移修正),使得轨迹追踪、定位更加准确。

    Tango设备:

    1.Tango平板(2014)

    谷歌Project Tango平板摄像头模块与Kinect很像。双镜头加景深传感器配置,其中一颗镜头400万像素,可提供高感光度拍摄及更快的速度;另一颗则是170度的广角鱼眼镜头,主要追踪物体的动态行为。

    谷歌Project Tango平板170度广角鱼眼镜头,可追踪物体运动轨迹,不过其没有标识型号。

    2.联想Tango手机(2016)

    更多Tango知识点可参考:

    Google Project Tango资料简介(一)

    带你认识Google屌炸天的AR项目——Project Tango

    Apple ARKit,和Google堆硬件的做法完全不同,ARkit可以让所有搭载 iOS 11 的iPhone或ipad设备具备AR能力。Apple的伟大之处在于,iPhone单摄可以做到运动追踪(摄像头没有鱼眼那么广,对于优化的要求很高),但对于深度感知就毫无办法,原因是单摄只能获取平面影像信息。但苹果仍然实现了深度感知功能,令人遗憾的是,在Apple 2017 WWDC大会上并没有介绍其实现原理。

    2、优缺点比较

    依目前的ARkit来看,搭载双摄的iPhone是很有希望实现和Tango手机类似体验的。但目前通过单摄终究是有限制的,ARkit只能进行简单的平面和边界的识别,比如像Pokemon Go或者是在桌面上渲染出一些物体这样的功能,如果要它像Tango手机那样完成整个环境的三维重建就做不到了,比如用于虚拟装修这样复杂的应用。

    与Tango相比,ARkit的缺点在于无法用于复杂场景和功能,优点是单摄手机就能实现AR功能,完全不需要其他硬件来进行配合,这也是为什么苹果能够自信地说ARkit是全世界最大的AR平台。

    三、ARKit初体验

    3-1简单的AR场景

    一个最简单地AR场景实现所需要的技术以及步骤包含如下

    (1).多媒体捕捉现实图像:如摄像头

    (2).三维建模:3D立体模型

    (3).传感器追踪:主要追踪现实世界动态物体的六轴变化,这六轴分别是X、Y、Z轴位移及旋转。其中位移三轴决定物体的方位和大小,旋转三周决定物体显示的区域。下图能够比较好的展示XYZ轴位移及旋转。

    pitch是围绕X轴旋转,也叫做俯仰角;yaw是围绕Y轴旋转,也叫偏航角;roll是围绕Z轴旋转,也叫翻滚角

    具体请参考:pitch yaw roll是什么

    (4).坐标识别及转换:3D模型显示在现实图像中不是单纯的frame坐标点,而是一个三维的矩阵坐标。这基本上也是学习AR最难的部分,好在ARKit帮助我们大大简化了这一过程。

    (5).除此之外,AR还可以与虚拟物体进行一些交互。

    3-2-ARKit概述及特点介绍

    1.ARKit是2017年6月6日,苹果发布iOS11系统所新增框架,它能够帮助我们以最简单快捷的方式实现AR技术功能。

    2.ARKit框架提供了两种AR技术,一种是基于3D场景(SceneKit)实现的增强现实,一种是基于2D场景(SpriteKit)实现的增强现实

    一般主流都是基于3D实现AR技术,ARKit不仅支持3D游戏引擎SceneKit还支持2D游戏引擎SpriktKit,这一点出乎笔者意料之外

    3.要想显示AR效果,必须要依赖于苹果的游戏引擎框架(3D引擎SceneKit,2D引擎SpriktKit),主要原因是游戏引擎才可以加载物体模型。

    虽然ARKit框架中视图对象继承于UIView,但是由于目前ARKit框架本身只包含相机追踪,不能直接加载物体模型,所以只能依赖于游戏引擎加载ARKit

    4.误区解读:ARKit虽然是iOS11新出的框架,但并不是所有的iOS11系统都可以使用,而是必须要是处理器A9及以上才能够使用,苹果从iPhone6s开始使用A9处理器,也就是iPhone6及以前的机型无法使用ARKit

    5.开发环境介绍

    1.Xcode版本:Xcode9及以上

    2.iOS系统:iOS11及以上

    3.iOS设备:处理器A9及以上(6S机型及以上)

    4.MacOS系统:10.12.4及以上(安装Xcode9对Mac系统版本有要求)

    目前只有Bete版本,链接地址:https://developer.apple.com/download/

    3-3-IOS开发一些基本知识

    平时所看到App界面,是用viewController实现的,类似于Android的Activity

    其生命周期如下图所示:

    当你alloc并init了一个ViewController时,这个ViewController应该是还没有创建view的。ViewController的view是使用了lazyInit方式创建,就是说你调用的view属性的getter:[self view]。在getter里会先判断view是否创建,如果没有创建,那么会调用loadView来创建view。loadView完成时会继续调用viewDidLoad。loadView和viewDidLoad的一个区别就是:loadView时还没有view。而viewDidLoad时view以及创建好了。

    当view被添加其他view中之前时,会调用viewWillAppear,而之后会调用viewDidAppear。

    当view从其他view中移出之前时,会调用viewWillDisAppear,而之后会调用viewDidDisappear。

    当view不在使用,而且是disappeared,受到内存警告时,那么viewController会将view释放并将其指向nil。

    3-3-ARKit初体验之3D效果

    1.3-ARKit初体验之3D效果

    1.打开Xcode9bete版本,新建一个工程,选择Augmented Reality APP(Xcode9新增),点击next

    2.在包含技术选项中选择SceneKit

    3.此时,Xcode会自动为我们生成一段极其简洁的AR代码

    4.ARKit工作原理及流程请参考

    ARKit工作原理及流程介绍

    相关文章

      网友评论

      • e691707f33dd:楼主你好,请问ARkit是否支持像tango一样保存区域描述文件?

      本文标题:14-探究ARKit

      本文链接:https://www.haomeiwen.com/subject/feiucxtx.html