首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CoreMotion的指南针方向值错误

CoreMotion的指南针方向值错误
EN

Stack Overflow用户
提问于 2012-02-06 21:22:29
回答 1查看 2.7K关注 0票数 8

我正在使用CoreMotion获取指南针的方向,我注意到指南针的方向有一些问题。

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

代码语言:javascript
复制
// 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秒。

就在几秒钟后,指南针变得狂野,角度开始跳跃。大多数情况下,它在两个方向上从起始位置漂浮在10-20度左右。应该有一个奇怪的结果。在30-60秒之后,每隔一段时间,南、北就会互换或向东和向西显示。

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

我现在在建筑物内外的3个设备(2个iPhone 4s和iPhone 4)上测试了指南针。我在田野,小城市和大城市。这种情况时有发生。苹果的样本指南针应用程序在我的测试中几乎是准确的,准确率为90%。不幸的是,它不是由苹果公司开源的。

感谢您的阅读。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-09 05:12:33

通过CoreLocation使用CoreMotion将会得到你想要的东西。

默认情况下,手持设备将执行图8的校准,要禁用此功能,请按如下所示覆盖locationManagerShouldDisplayHeadingCalibration:

代码语言:javascript
复制
- (BOOL)locationManagerShouldDisplayHeadingCalibration: (CLLocationManager *)manager {
    return NO; 
}

从你问题中的代码中看不出你是否在调用startUpdateHeading。如果不是,请执行以下操作:

代码语言:javascript
复制
if( [CLLocationManager locationServicesEnabled] && [CLLocationManager headingAvailable]) {
    [myLocationManager startUpdatingLocation];
    [myLocationManager startUpdatingHeading];
}

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

另请注意,如果手机处于横向模式,则需要将方向调整适当的度数(+/-90度),因为方向始终在纵向参考框架中。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9160716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档