ARSessionConfiguration.WorldAlignment = .gravityAndHeading 的不稳定世界原点/对齐
Posted
技术标签:
【中文标题】ARSessionConfiguration.WorldAlignment = .gravityAndHeading 的不稳定世界原点/对齐【英文标题】:erratic world origin/alignment for ARSessionConfiguration.WorldAlignment = .gravityAndHeading 【发布时间】:2017-07-04 03:37:15 【问题描述】:[注意:这个问题是在 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
documentation:
y 轴与设备的运动感应硬件检测到的重力方向相匹配;即向量(0,-1,0)指向下方。
x 轴和 z 轴与位置服务测量的经度和纬度方向相匹配。向量 (0,0,-1) 指向真北,向量 (-1,0,0) 指向西。 (也就是说,正 x 轴、y 轴和 z 轴分别指向东、上和南。)
【问题讨论】:
这看起来像是一个写得很好的(并且以其他方式记录的)错误报告。 Have you filed one? 还有,整洁的时钟。 也坚持这一点。有谁能在这方面取得进展? 【参考方案1】:我意识到这是一个旧线程,但是即使发布了 ARKit 2 并且我使用 ios 12、Xcode 10.1 和 iPhone 8,我仍然得到不一致的世界起源。在某些情况下,蓝线应该指向南方,它实际上指向东方或西方。
我确实通过使用位置管理器标题尝试了 Sander 的建议,但仍然不能 100% 保证我一开始就获得了正确的方向。
还有其他建议吗?
【讨论】:
我认为你最好提出一个全新的问题(也许参考这个问题)。我们早已过了 Xcode 9 测试版,您可能会遇到一个完全不同的问题。【参考方案2】:我偶尔会得到随机世界原点,其中 Y 轴未与重力对齐,但可能倾斜 45 度。这是在 Xcode 9.1(测试版)和 iOS 11.0.3 上。如果我重置会话,它会正确重新检测 Y 轴。 (我正在使用gravityAndHeading)。
至于标题,我在一个新的市中心多层金属/砖/灰泥建筑中。室内磁北探测几乎是不可能的。我已经用许多不同的设备对此进行了广泛的测试。 (我在做无人机导航)。由于极低的磁场,症状是漂浮的北方。所以有时它会起作用,但甚至可以在几秒钟内改变 +-90 度。
看起来您正在室内进行测试,有一些砖墙......
【讨论】:
【参考方案3】:我遇到了同样的问题。
我的建议是使用CLLocationManager
的委托方法来获得真正的北方
func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading)
在我的实验中显示了更稳定和正确的结果,尽管有时它们与 .gravityAndHeading
的北一样错误。
【讨论】:
【参考方案4】:此应用无需额外设置。你的代码没问题。
正如您从 .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)。
另外,请阅读这篇有用且内容丰富的文章:Requesting Always Authorization。有很多技巧。
【讨论】:
以上是关于ARSessionConfiguration.WorldAlignment = .gravityAndHeading 的不稳定世界原点/对齐的主要内容,如果未能解决你的问题,请参考以下文章