在启用世界跟踪的情况下运行 ARKit 会话时,Xcode 控制台显示关于(我假设:减少)跟踪性能的日志消息,即使
-
AR Session 处于 Normal 跟踪状态,
-
我在 well-lit 办公室里使用该设备,有很多“功能”来检测,和
TLDR:我想了解可能导致它们的原因,它们有什么影响,以及如何防止它们,或者(当它们发生时对它们进行预测 - 不仅仅是隐藏错误。
[Technique] World tracking performance is being affected by resource constraints [0]
[Technique] World tracking performance is being affected by resource constraints [1]
控制台应用程序显示这些来自库 ARKit 并属于日志记录类别技术。虽然它们听起来像是警告,但 Console 应用程序会将其类型显示为错误。
正如预期的那样,在使用世界跟踪时,控制台应用程序确实会在错误发生时显示大量CoreMotion
日志,但这些行似乎不包含任何错误,警告或其他信息,以帮助我诊断正在发生的事情。
当错误出现在日志中时,没有委托回调,但最终(5 秒或 50 秒之间的任何事情)屏幕将冻结,回调会话失败:
Error Domain=com.apple.arkit.error Code=200 "World tracking failed." UserInfo={NSLocalizedDescription=World tracking failed., NSLocalizedFailureReason=World tracking cannot determine the device's position.}
ARKit source/文件没有提供关于“资源限制”可能导致无法确定设备位置的任何提示,它只是读取:
世界跟踪遇到致命错误。
我已经尝试(没有成功)阻止警告出现:
-
重置会话跟踪:仍然是错误,
-
通过删除所有
ARAnchor
s 重置会话:仍然是错误, -
禁用平面检测(一旦不再需要):仍然是错误,
暂停 AR 会话会使警告静音(有意义,因为这意味着设备会在暂停时停止跟踪其移动),但在恢复会话时,警告会返回。
当关闭会话并 re-creating 它(i.e.解除 VC 并重新创建)时,虽然没有移动相机(或更改了灯光),但问题并不总是 re-occur。
我最好的猜测是闪烁 TL-lights是跟踪性能警告的原因,因为 Apple 的解释世界跟踪如何运作:
... visual-inertial odometry。此过程将来自 iOS 设备的运动感应硬件的信息与设备相机可见场景的计算机视觉分析相结合。 ARKit 识别场景图像中的显着特征,跟踪视频帧中这些特征的位置差异,并将该信息与运动感测数据进行比较。
(iPhone 6S,iOS 11 beta 4,后台没有其他应用程序运行)
问题:
-
[0]
和[1]
有什么区别? -
什么可能导致这些错误?
-
当
ARSession
没有失败时,他们对他们有什么影响?我假设我们会看到“跳跃”模型,因为帧更新提供的世界坐标不准确 - NB。在 resetting/stoppingARAnchor
之后跟踪仍然发生的错误。 -
我们是否知道 AR 会话即将失败,还是意外? (同样,在跟踪状态变为“有限”后,
ARSession
不会立即失败) -
有没有办法解决这个问题,e.g. 释放这些提到的“资源限制” - 甚至可以防止它们发生?
4 回答
我认为这是 xcode 9.1 bug。如果你使用 SceneKit:找到你为 ARSCNView 或子类设置.backgroundColor =“你的颜色”的地方。评论此行和清理项目。
仅允许纵向设备方向为我解决此错误。
这个错误发生在我身上,因为我手动在故事板上添加了一个视图控制器,并为其添加了
ARSKView
。这将它作为子项添加到UIView
,默认情况下是UIViewController
中的子视图。因此,为了支持横向和纵向,我不得不添加Auto-layout 约束,这由于某种原因引发了这个错误。当我查看库存 AR 项目时,
ARSKView
是视图控制器的直接子项,并且它支持开箱即用的所有视图大小和方向,而没有 auto-layout 约束。当我这样设置时,错误就消失了。我认为这是一种包,因为只有在我尝试使用约束时才会出现这个问题。
如果我禁用,例如,下面的约束我的代码可以正常工作。