苹果的iPhone磁力计校准是否正常工作?

13
我目前正在开发一款iPhone应用程序(在iPhone 5,iOS 7,Xcode 5上),需要非常准确地确定当前的姿态。 CMDeviceMotion的“姿态”不能满足这些要求,因为苹果的传感器融合算法似乎过于依赖陀螺仪,而其漂移速度相当快(根据我的经验)。这就是为什么我决定读取裸传感器数据,并稍后通过自己的传感器融合算法将其组合起来。
在请求磁力计数据时,有两种可能性:
1. 通过CMMotionManager中的CMMagnetometerData。 2. 通过CMDeviceMotion中的CMCalibratedMagneticField,关于这一点,苹果表示:
“此属性返回的CMCalibratedMagneticField为您提供了设备周围的总磁场,不带有设备偏差。与CMMagnetometer类的magneticField属性不同,这些值反映了地球磁场加上周围磁场,减去设备偏差。”
原则上(2.)正是我想要的。

如果磁力计数据被正确校准,那么有一个非常简单的测试。为了简单起见,可以限制自己在二维平面内。当设备放在背面时,组合 B_x^2 + B_y^2 必须保持不变,与设备指向的方向无关。它必须恰好等于地球磁场的水平分量(假设设备附近没有其他场)。因此,在将设备放在背面的情况下进行 360 度旋转时,测得的数据 B_y/B_x 应该显示一个圆形。详情请参见 这里

现在重点是:CMCalibratedMagneticField 的数据并不呈圆形!

Plot

有人能解释一下吗?或者有人知道CMCalibratedMagneticField是如何产生的吗?当设备进行“八字形”运动时,磁强计是否按照上面的链接进行校准?这个运动有什么作用呢?

顺便问一句,为什么要进行“八字形”运动而不是将设备围绕其三个轴翻转,这样就可以像链接中描述的那样进行校准了吗?

我会非常感激任何关于这个问题的澄清...谢谢!

1个回答

2

iOS 7中的磁力计存在问题,其误差为+-7º。请尝试使用7.1测试版。

编辑

磁力计随时间零漂,但在突然位置变化时相当不准确。另一方面,加速度计和陀螺仪可以快速调整以适应突然变化,但作为惯性传感器,它们会随着时间的推移失去准确性。

因此,当CMCalibratedMagneticField尝试补偿您的旋转运动时,它会使用陀螺仪和加速度计的数据。这时,加速度计和陀螺仪的+-7º误差就会产生,并使您的圆形轨迹偏离。查看此答案和此维基百科文章获取更多信息。

关于八字图案:

两者的功能相同,都将设备的“北”定向在每个方向上,以期消除磁场干扰。沿所有三个轴翻转设备效果更好,但操作较困难,并且用户理解不易。

希望这可以帮到你。


非常感谢您的回答!这些信息是否有可用的参考资料? - user2980195
我错了,错误已在iOS 7.0.3中修复。参考:http://support.apple.com/kb/DL1691 - Pranav
但这仅涉及加速度计,不涉及磁力计,对吗? - user2980195
你能确认磁力计现在是否正常工作吗? - michaelsnowden

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接