我正在使用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秒。
就在几秒钟后,指南针变得狂野,角度开始跳跃。大多数情况下,它在两个方向上从起始位置漂浮在10-20度左右。应该有一个奇怪的结果。在30-60秒之后,每隔一段时间,南、北就会互换或向东和向西显示。
在WWDC 2011上,有一次会议讨论了他们如何用另一个传感器计算每个传感器来补偿这个问题。在CoreMotion的配置中,我是否遗漏了什么,导致我遇到了大量的准确航向结果的问题?
我现在在建筑物内外的3个设备(2个iPhone 4s和iPhone 4)上测试了指南针。我在田野,小城市和大城市。这种情况时有发生。苹果的样本指南针应用程序在我的测试中几乎是准确的,准确率为90%。不幸的是,它不是由苹果公司开源的。
感谢您的阅读。
发布于 2012-02-09 05:12:33
通过CoreLocation使用CoreMotion将会得到你想要的东西。
默认情况下,手持设备将执行图8的校准,要禁用此功能,请按如下所示覆盖locationManagerShouldDisplayHeadingCalibration::
- (BOOL)locationManagerShouldDisplayHeadingCalibration: (CLLocationManager *)manager {
return NO;
}从你问题中的代码中看不出你是否在调用startUpdateHeading。如果不是,请执行以下操作:
if( [CLLocationManager locationServicesEnabled] && [CLLocationManager headingAvailable]) {
[myLocationManager startUpdatingLocation];
[myLocationManager startUpdatingHeading];
}如果你不打开标题过滤器,你可能会得到疯狂的结果,我建议你这样做。在此之后,当调用didUpdateHeading时,您只需在位置管理器委托中获得标题更改。
另请注意,如果手机处于横向模式,则需要将方向调整适当的度数(+/-90度),因为方向始终在纵向参考框架中。
https://stackoverflow.com/questions/9160716
复制相似问题