[注意:这个问题是在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轴分别指向东,向上和南方。)
答案 0 :(得分:1)
我意识到这是一个旧线程,但是即使使用ARKit 2版本,并且我正在将iOS 12,Xcode 10.1与iPhone 8配合使用,但世界来源仍然不一致。在某些情况下,蓝线应指向南方,实际上是指向东方或西方。
我确实使用位置管理器标题尝试过桑德的建议,但仍不能100%保证我从正确的方向入手。
还有其他建议吗?
答案 1 :(得分:0)
偶尔会出现随机世界原点,其中Y轴不与重力对齐,但可能倾斜45度。这是在Xcode 9.1(测试版)和iOS 11.0.3上。如果我重置会话,它会正确地重新检测Y轴。 (我正在使用gravityAndHeading)。
至于标题,我在一个新的市中心多层金属/砖/灰泥建筑。室内磁北检测几乎是不可能的。我已经使用许多不同的设备进行了广泛的测试。 (我在做无人机导航)。由于极低的磁场,症状是漂浮的北方。所以有时它会起作用,但在几秒钟内甚至可以改变+ -90度。
看起来你正在室内进行测试,有一些砖墙......
答案 2 :(得分:0)
我遇到了同样的问题。
我的建议是使用CLLocationManager
的委托方法来获得真北的解决方法
func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading)
在我的实验中显示出更稳定和正确的结果,尽管有时它们与.gravityAndHeading
的北方一样错误。
答案 3 :(得分:0)
此应用不需要其他设置。您的代码确定。
如您从.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。有很多技巧。