版权声明:Davidwang原创文章,严禁用于任何商业途径,授权后方可转载。

  ARSession整合运动传感器数据与计算机视觉处理数据跟踪用户设备姿态,为得到更好的跟踪质量,ARSession需要持续的运动传感器数据和视觉计算数据。在启动ARSession后,ARKit需要一点时间来收集足够多的视觉特征点信息,在这个过程中,ARSession是不可用的。在AR应用运行过程中,由于一些异常情况(如摄像头被覆盖),ARSession的跟踪状态也会发生变化,可以使用ARSessionObserver代理方法和ARCamera类的属性捕捉到这些状态变化信息,在需要时进行必要的处理(如显示UI信息)。

(一)ARSession生命周期

  ARSession的基本生命周期如下图所示,在刚启动ARSession时,ARKit还未收集到足够多的特征点和运动传感器数据信息,无法计算设备的姿态,这时的跟踪状态是不可用状态。提供给帧(frame)的状态信息是ARCamera.TrackingState.notAvailable。

  在经过几帧之后,跟踪状态会变为受限状态ARCamera.TrackingState.limited(),这个状态表明设备姿态已可用但精确可能会有问题,同时,ARKit会提供状态受限的原因,在上图中的原因是ARCamera.TrackingState.Reason.initializing,说明设备正在进行初始化。
  再经过一段时间后,跟踪状态会变为正常状态ARCamera.TrackingState.normal,这时说明ARKit已准备好,所有的功能都可用了。

(二)提供跟踪质量的反馈

  在AR应用运行过程中,由于环境的变化或者其他异常情况,ARKit的跟踪状态会发生变化,如下图所示。

  在ARKit状态受限时,基于环境映射的功能将不可用,如平面检测、射线检测、场景几何等。在AR应用运行过程中,由于用户环境变化或者其他异常情况,ARKit可能在任何时间进入到跟踪受限状态,如当用户将摄像头对准一面白墙或者房间中的灯突然关闭,这时ARKit就会进入到跟踪受限状态,且受限原因为:ARCamera.TrackingState.Reason.insufficientFeatures。
我们可以通过使用ARCamera.TrackingState.Reason枚举获取到跟踪状态受限的原因,然后引导用户进行下一步操作,以便恢复到正常跟踪状态(ARCamera.TrackingState.normal)。

(三)中断恢复

  在AR应用运行过程中,ARSession也有可能会被迫中断,如在使用AR应用的过程中突然来电话,这时AR应用将被切换到后台。当ARSession被中断后,虚拟元素与现实世界将失去关联。在ARKit中,ARSessionDelegate协议定义了3个可选(optional)方法,如下表所示,利用这个3方法可以获知ARSession中断状态,并定义中断后执行的操作。

名称 描述
sessionWasInterrupted(_ session: ARSession) 通知代理ARSession暂时执行图像处理和设备跟踪
sessionInterruptionEnded(_ session: ARSession) 通知代理ARSession已重新开始执行图像处理和设备跟踪
sessionShouldAttemptRelocalization(_ session: ARSession) -> Bool 询问代理是否执行重定位操作

  在中断发生后,ARKit会通过ARSessionDelegate协议的sessionShouldAttemptRelocalization()方法询问用户是否尝试恢复AR体验,ARKit尝试恢复世界跟踪的过程称为重定位(Relocalization),重定位如果成功,虚拟元素与现实世界的关联关系会恢复到中断前的状态,包括虚拟元素的姿态及虚拟元素与现实世界之间的相互关系,如果重定位失败,则虚拟元素与现实世界的原有关联关系被破坏。
  ARSessionDelegate协议的sessionShouldAttemptRelocalization()方法是个可选方法,因此,该方法执行时有以下几种可能性:

  (1)如果开发者没有执行sessionShouldAttemptRelocalization()方法,ARKit将自动尝试重定位,如果在指定时间内未能重定位成功,则重启ARSession;

  (2)如果开发者执行了sessionShouldAttemptRelocalization()方法并返回false,ARKit立即重启ARSession而不尝试重定位;

  (3)如果开发者执行了sessionShouldAttemptRelocalization()方法并返回ture,ARKit执行重定位操作,如果重定位失败,ARKit也不会自动重启ARSession(即AR应用会卡在重定位状态),所以,在执行sessionShouldAttemptRelocalization()方法后,开发人员需要自行负责处理重定位失败后的操作,通常在重定位失败后,可以选择手动重启ARSession,方法是调用ARSession.run(_:options:)方法,并设置options为resetTracking。

  在重定位过程中,ARSession的运动跟踪状态保持为受限状态,而受限的原因为ARCamera.TrackingState.Reason.relocalizing。重定位成功的前提条件是使用者必须返回到ARSession中断前的环境中,如果使用者已经离开,则重定位永远也不会成功(环境无法匹配),重定位失败后,ARSession会一直处在ARCamera.TrackingState.Reason.relocalizing导致的受限状态中。整个过程如下图所示。

  需要注意的是:重定位是一件容易让使用者困惑的操作,特别是对不熟悉AR应用、没有AR应用使用经验的使用者而言,重定位会让他们感到迷茫,所以在进行重定位时,应当通过UI或者其他视觉信息告之使用者,并引导使用者完成重定位操作。

ARSession状态ARCamera.TrackingState枚举如下表所示。

枚举项 描述
notAvailable 跟踪不可用,设备姿态未知
limited 跟踪可用,但质量无法保证
normal 设备姿态跟踪正常,功能可用

当跟踪状态为受限时的理由(Reason)ARCamera.TrackingState.Reason枚举如下表所示。

枚举项 描述
initializing 设备跟踪正在进行初始化操作
relocalizing ARSession正在进行重定位
excessiveMotion 设备移动过快
insufficientFeatures 从设备摄像头采集的图像中特征点太少

ARKit之路-ARSession生命周期管理与跟踪质量相关推荐

  1. PPT 下载 | 神策数据孙文亮:客户全生命周期管理从方法到实践全解析

    在以"场景赋能·驱动有数"为主题的神策 2018 数据驱动大会现场,神策数据技术经理孙文亮发表了名为<客户全生命周期管理从方法到实践>的主题演讲. 温馨提示:点击文末阅 ...

  2. Android 插件化原理解析——Activity生命周期管理

    之前的 Android插件化原理解析 系列文章揭开了Hook机制的神秘面纱,现在我们手握倚天屠龙,那么如何通过这种技术完成插件化方案呢?具体来说,插件中的Activity,Service等组件如何在A ...

  3. 特斯拉自动驾驶汽车事故分析与汽车信息安全生命周期管理

    2018年01月22号,特斯拉Model S在公路上撞上了前方的消防车,幸运的是无人伤亡.根据司机描述,当时他在事故中启动了自动驾驶模式.大多数人知道特斯拉可以说是目前世界上最先进的已经具备L2.特定 ...

  4. 设备全生命周期管理第一股凌雄科技上市,京东、腾讯等长期看好

    "设备全生命周期管理第一股"凌雄科技(小熊U租)于昨日正式在港交所挂牌上市.本次上市,凌雄科技的IPO发行价为7.60港元/股,募集资金净额约为3.372亿港元,上市时的总市值达到 ...

  5. Activity生命周期管理

    之前的 Android插件化原理解析 系列文章揭开了Hook机制的神秘面纱,现在我们手握倚天屠龙,那么如何通过这种技术完成插件化方案呢?具体来说,插件中的Activity,Service等组件如何在A ...

  6. Elasticsearch索引生命周期管理方案

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 一.前言 在 Elasticsearch 的日常中,有很多 ...

  7. 容器,对象生命周期管理的基石

    2019独角兽企业重金招聘Python工程师标准>>> 郑重申明:包括本文在内的很多技术文章,大多出自山外高人,而非Fans. Fans暂时没有能力写作优秀的技术文章,Fans只是转 ...

  8. npm scripts的生命周期管理

    2019独角兽企业重金招聘Python工程师标准>>> 我们平时阅读一些开源项目,可能会发现有些项目的package.json里的scripts区域定义的脚本很复杂,令人眼花缭乱. ...

  9. 敏捷SOA成功秘诀(三):生命周期管理

    本节主要介绍SOA如何逐渐融入敏捷的生命周期.在这里,我们将研究一下应用生命周期管理(ALM). 正如著名市场研究机构Forrester的Cary Schwaber所说的那样,最新的ALM平台将会改善 ...

最新文章

  1. elasticsearch 分片_Elasticsearch最佳实践之分片使用优化
  2. 一文带你了解被 BATJ 问烂的 TopK 问题
  3. 测试你的前端代码 - part3(端到端测试)
  4. 从这3个方面,帮你大幅度提升用户的搜索体验
  5. C#通过COM组件操作IE浏览器(四):实用代码总结
  6. linux 虚拟机挂载本地,CentOS 在VMWare中挂载本地yum源
  7. Keepalived配置文件详解
  8. python入门之玩转列表我的菜单_我的Python成长之路---第一天---Python基础(作业2:三级菜单)---2015年12月26日(雾霾)...
  9. mysql查询默认排序规则_深究 mysql 默认排序, order by 的顺序【收藏】
  10. 朝鲜国家黑客被指利用 LinkedIn 攻击欧洲航空公司和军队企业
  11. paas-openshift
  12. Mac程序开机启动项优化
  13. comsol通直流电_基于COMSOL仿真的高压直流交联聚乙烯(XLPE)电缆附件设计
  14. php中文数组,php数组的定义
  15. 基于北洋PT站表结构分析以及ORM重写
  16. ArcGIS中去除Z或M值的方法
  17. Codevs 4246 奶牛的身高
  18. Dell服务器进入双系统按键,dell进bios按什么键 戴尔进bios的方法
  19. 3D游戏与编程——UI系统
  20. 【GANs】Deep Convolution Generative Adversarial Network

热门文章

  1. 雷军:当CEO是因为被格式化了电脑
  2. 通用验证系统commons-validator
  3. 企业管理中,商业智能BI主要做哪些事情?
  4. edx 4G Network Essentials 4 - Nodes of the control plane (HSS, MME)
  5. 计算机学习计划表作文,计算机学习计划作文三篇范本
  6. GIF动图制作网站!
  7. Access denied for user ''@'localhost' to database 'mysql' 解决办法
  8. TPC/IP 协议头部说明
  9. C#MDI窗体实现多窗口效果
  10. AHB2APB桥接器设计(2)——同步桥设计的介绍