9

[注意:这个问题是针对 iOS11/High Sierra 预发布期间的 ARKit 测试版编写的。仅出于历史兴趣而保留]

当我将 设置为 时,我看到世界原点的位置和方向ARWorldTrackingSessionConfiguration.worldAlignment不稳定.gravityAndHeading

场景打开后原点位置稳定。但轴通常绕 Y 轴旋转 180 度或 90 度。

我还缺少其他设置吗?我正在运行 2017 iPad(原版,而不是 Pro)和 Xcode 9 beta 2。我在这台 iPad 上测试了一些指南针应用程序,它们给了我正确的结果,所以我相信硬件工作正常。

override func viewDidLoad() {
    super.viewDidLoad()
    
    // Set the view's delegate
    sceneView.delegate = self
    
    // Show statistics such as fps and timing information
    sceneView.showsStatistics = true
    
    // Create a new scene
    let scene = SCNScene()

    // debug options
    let debugOptions: SCNDebugOptions = [ARSCNDebugOptions.showFeaturePoints,ARSCNDebugOptions.showWorldOrigin]
    sceneView.debugOptions = debugOptions

    // Set the scene to the view
    sceneView.scene = scene
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    
    // Create a session configuration
    let configuration = ARWorldTrackingSessionConfiguration()
    configuration.worldAlignment = .gravityAndHeading
    configuration.planeDetection = .horizontal

    // Run the view's session
    sceneView.session.run(configuration)
}

这是一些样本(在所有样本中,我都朝南)。

正 X 和 Z 点西和北(不正确,180 度异相):

在此处输入图像描述

正 X 和 Z 点东南东南和西南西南(接近正确):

在此处输入图像描述

正 X 和 Z 指向东和南(正确),但原点偏移了几米:

在此处输入图像描述

正 X 和 Z 点南和西(90 度异相):

在此处输入图像描述

.gravityAndHeading文档中:

y 轴与设备的运动感应硬件检测到的重力方向相匹配;即向量 (0,-1,0) 指向下方。

x 轴和 z 轴与定位服务测量的经度和纬度方向相匹配。向量 (0,0,-1) 指向真北,向量 (-1,0,0) 指向西。(即,正 x 轴、y 轴和 z 轴分别指向东、上和南。)

4

4 回答 4

2

我意识到这是一个旧线程,但是即使发布了 ARKit 2 并且我使用 iOS 12、Xcode 10.1 和 iPhone 8,我仍然得到不一致的世界起源。在某些情况下,蓝线应该指向南方,它实际上指向东方或西方。

我确实通过使用位置管理器标题尝试了 Sander 的建议,但这仍然不能 100% 保证我一开始就获得了正确的方向。

有人有其他建议吗?

于 2018-12-13T16:39:48.303 回答
0

此应用无需额外设置。你的代码没问题。

正如您从 .gravityAndHeading 文档中引用的那样——经度和纬度方向由 .gravityAndHeading 测量Location Services。Xcode 9 beta 中肯定有一个bug 。Location Services一年前我偶然发现了同样的问题。

但是现在,当我使用 Xcode 10 的官方版本时,一切正常。我在不同的地方(室内和室外)对其进行了一百多次测试。与真正的罗盘值的偏差是+2/-2度。

在 iOS 12 (16A366) 的 iPhone X (MQA82LL) 上测试。

macOS Mojave 10.14 (18A391)、Xcode 10.0 (10A255)。

另外,请阅读这篇有用且内容丰富的文章:请求始终授权。有很多提示。

在此处输入图像描述

于 2018-10-07T19:22:38.267 回答
0

我遇到了同样的问题。我的建议是使用CLLocationManager委托方法获得真北的解决方法

func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading)

在我的实验中显示了更稳定和正确的结果,尽管有时它们与.gravityAndHeading's north 一样错误。

于 2017-10-26T14:11:55.947 回答
0

我偶尔会得到随机世界原点,其中 Y 轴与重力不对齐,但可能倾斜 45 度。这是在 Xcode 9.1(测试版)和 iOS 11.0.3 上。如果我重置会话,它会正确重新检测 Y 轴。(我正在使用gravityAndHeading)。

至于航向,我在一个新的市中心多层金属/砖/灰泥建筑中。室内磁北探测几乎是不可能的。我已经用许多不同的设备对此进行了广泛的测试。(我在做无人机导航)。由于极低的磁场,症状是漂浮的北方。所以有时它会起作用,但甚至可以在几秒钟内改变 +-90 度。

看起来你正在室内进行测试,有一些砖墙......

于 2017-10-25T14:40:01.140 回答