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

ARKit setting WorldTrackingConfiguration to gravityAndHeading produces error

我正在尝试在我的 ARWorldTrackingConfiguration.worldAlignment 配置中使用 .gravityAndHeading。但是,我不断收到此错误:

Device orientation error: Error Domain=CMErrorDomain Code=102 "(null)" 2018-03-01 20:08:25.218445+0000 App[759:84092] [Session] Session (0x10ba12ce0): did fail with error: Error Domain=com.apple.arkit.error Code=102 "Required sensor failed." UserInfo={NSLocalizedFailureReason=A sensor failed to deliver the required input., NSUnderlyingError=0x1c0850740 {Error Domain=CMErrorDomain Code=102 "(null)"}, NSLocalizedRecoverySuggestion=Make sure that the application has the required privacy settings., NSLocalizedDescription=Required sensor failed.} Session failed. Changing worldAlignment property.

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

有人遇到过 same/worked 解决方案吗?

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

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

基于其他研究,例如What Does Error Code 102 Mean 看来以下内容可能适用于您的情况:

CMErrorTrueNorthNotAvailable

从上面的 post 来看,一位 Whosebug 用户似乎已通过更改其设备上的以下设置解决了该问题:

设置>隐私>定位服务>系统服务>罗盘校准:

此外,除了上述@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])
}