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

时间:2013-12-16 19:36:56

标签: ios iphone calibration magnetometer

我目前正在开发iPhone应用程序(在iPhone 5,iOS 7,Xcode 5上),这需要非常准确地确定当前的态度。 CMDeviceMotion的“态度”并不能满足这些要求,因为Apple的传感器融合算法似乎过分依赖陀螺仪,而陀螺仪的速度相当快(根据我的经验)。这就是我决定读出裸传感器数据的原因,后来我想将它自己组合在一个传感器融合算法中。

当要求磁力计数据时,有两种可能性:

  1. 通过CMMotionManager中的CMMagnetometerData

  2. 通过CMDeviceMotion中的CMCalibratedMagneticField关于Apple所说的

  3.   

    此属性返回的CMCalibratedMagneticField可为您提供设备附近的总磁场,而无需设备偏差。与CMMagnetometer类的magneticField属性不同,这些值反映了地球的磁场加上周围的场,减去了设备偏差。

    原则上(2.)正是我想要的。

    如果磁力计数据正确校准,则测试非常简单。为简单起见,可以将自己限制在两个维度。当设备位于其后面时,组合B_x ^ 2 + B_y ^ 2必须是恒定的,与设备指向的方向无关。它必须等于地球磁场的水平分量(假设设备附近没有其他场)。因此,当执行位于其背面的设备的360度转弯时,B_x上的测量数据B_y应显示圆形。有关详细信息,请参阅here

    现在重点:CMCalibratedMagneticField的数据不会产生圆圈!

    Plot

    有没有人对此有解释?或者有人知道,CMCalibratedMagneticField是如何产生的?当执行设备的“八字形”运动时,磁力计是否在link from above的意义上进行校准,或者运动适合什么?

    顺便说一下。为什么“八字形”机芯并没有将设备翻转到三轴之间,这样可以进行link from above所述的校准?

    对于这个问题的澄清,我会很高兴...谢谢!

1 个答案:

答案 0 :(得分:2)

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

修改

磁力计随着时间的推移具有零漂移,但对于突然的位置变化而言是非常不准确的。另一方面,加速度计和陀螺仪可以快速调整突然变化,但作为惯性传感器,它们会在一段时间内失去准确性。

因此当CMCalibratedMagneticField尝试补偿您的旋转运动时,它会使用来自陀螺仪和加速度计的数据。这是当加速计和陀螺仪的+-7º误差进入并使您的圆偏离轨道时。请查看此answer和此wikipedia article以获取更多信息。

关于8的数字: 两者都做同样的事情,他们在每个方向上定位设备的“北”,以期抵消磁干扰。沿着所有三个轴翻转您的设备将更好地工作,但它更难以执行,并且不易被用户理解。

希望这有帮助。