ARKit将WorldTrackingConfiguration设置为gravityAndHeading会产生错误

时间:2018-03-01 20:33:14

标签: swift arkit

我正在尝试在.gravityAndHeading配置中使用ARWorldTrackingConfiguration.worldAlignment。但是,我一直收到这个错误:

  

设备方向错误:错误域= CMErrorDomain代码= 102"(null)"   2018-03-01 20:08:25.218445 + 0000 App [759:84092] [Session] Session(0x10ba12ce0):确实失败并出现错误:Error Domain = com.apple.arkit.error Code = 102" Required sensor失败&#34。 UserInfo = {NSLocalizedFailureReason =传感器未能提供所需的输入。,NSUnderlyingError = 0x1c0850740 {错误域= CMErrorDomain代码= 102"(null)"},NSLocalizedRecoverySuggestion =确保应用程序具有所需的隐私settings。,NSLocalizedDescription =必需的传感器失败。}   会话失败。更改worldAlignment属性。

文档说要确保Info.plist包含相关的隐私要求 - 我已经添加了相机,位置,动作等但无济于事。

任何人都有同样的经历/解决方案吗?

我正在使用此特定设置,因为我需要将节点映射到物理世界,而不仅仅是用户的相对位置。

2 个答案:

答案 0 :(得分:2)

您是否已将这些密钥添加到info.plist

enter image description here

基于其他研究,例如What Does Error Code 102 Mean以下情况似乎适用于您的情况:

  

<强> CMErrorTrueNorthNotAvailable

从上面的帖子中,一个StackOverFlow用户似乎已通过更改其设备上的以下设置解决了该问题:

设置&gt;隐私&gt;位置服务&gt;系统服务&gt;指南针校准:

enter image description here

答案 1 :(得分:1)

除了以上@JoshRobbins的答案之外,我还有一个新iPhone,并注意到默认情况下它已关闭,因此应用程序崩溃了。最终用户不知道他必须进入设置并打开罗盘校准。以下绕过:

let configuration = ARWorldTrackingConfiguration()

func session(_ session: ARSession, didFailWithError error: Error) {

    switch error.code {
    case 102:
        configuration.worldAlignment = .gravity
        restartSession()
    default:
        configuration.worldAlignment = .gravityAndHeading
        restartSession()
    }
}

@objc func restartSession() {

    self.sceneView.session.pause()

    self.sceneView.session.run(configuration, options: [
        .resetTracking,
        .removeExistingAnchors])
}