gpt4 book ai didi

iphone - CoreMotion 的罗盘航向值错误

转载 作者:行者123 更新时间:2023-12-03 18:36:24 24 4
gpt4 key购买 nike

我正在使用 CoreMotion 获取罗盘航向,我注意到罗盘航向存在一些问题。

首先我初始化了 CoreMotion。我得到了一个 CMMotionManager 对象 locationManager,它是 CMMotionManager 的一个实例。

// initialize CoreMotion
motionManager = [CMMotionManager new];
[motionManager setDeviceMotionUpdateInterval:1.0/30.0];
[motionManager setShowsDeviceMovementDisplay:YES];
[self.motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXTrueNorthZVertical];

位置数据每 1/30.0 秒更新一次。

出于调试目的,我有一个 UILabel,它向我显示在每个更新间隔更新的当前罗盘标题。当应用程序启动时,我总是必须执行神奇的 8 来校准指南针。

校准指南针后,南北航向在近 2-5 秒内都是正确的。

几秒钟后,指南针变得疯狂,角度也在跳跃。大多数情况下,它会从起始位置向两个方向 float 10-20 度左右。足以产生奇怪的结果。30-60 秒后,南和北时不时地互换或显示到东和西。

在 WWDC 2011 上,有一次 session 讨论了他们如何使用另一个传感器计算每个传感器来弥补这一问题。我在 CoreMotion 的配置中是否遗漏了什么,导致我在准确的航向结果方面遇到了巨大的问题?

我现在使用 3 台设备(2 个 iPhone 4s 和 iPhone 4)在建筑物内外测试了指南针。我去过田野、小城市和大城市。这种事经常发生。在我的测试中,Apple 的示例指南针应用程序几乎准确,准确度为 90%。不幸的是它没有被苹果开源。

感谢您的阅读。

最佳答案

使用 CoreMotion通过 CoreLocation 将为您提供所需的信息。

默认情况下,手机将执行数字 8 校准,要禁用此功能,请重写 locationManagerShouldDisplayHeadingCalibration:,如下所示:

- (BOOL)locationManagerShouldDisplayHeadingCalibration: (CLLocationManager *)manager {
return NO;
}

从您问题中的代码中不清楚您是否正在调用 startUpdateHeading。如果没有,请这样做:

if( [CLLocationManager locationServicesEnabled] && [CLLocationManager headingAvailable]) {
[myLocationManager startUpdatingLocation];
[myLocationManager startUpdatingHeading];
}

如果您不打开标题过滤器,您可能会得到疯狂的结果,我建议您这样做。之后,当调用 didUpdateHeading 时,您只需在位置管理器委托(delegate)中获取标题更改即可。

另请注意,如果手机处于横向模式,您需要将航向调整适当的度数 (+/- 90),因为航向始终位于纵向引用系中。

关于iphone - CoreMotion 的罗盘航向值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9160716/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com