我目前正在开发一个 iPhone 应用程序(在 iPhone 5、iOS 7、Xcode 5 上),它需要非常准确地确定当前的态度。CMDeviceMotion 的“态度”并不能满足这些要求,因为苹果的传感器融合算法似乎过于依赖漂移相当快的陀螺仪(根据我的经验)。这就是为什么我决定读出裸露的传感器数据,然后我想自己将其结合到传感器融合算法中。
当询问磁力计数据时,有两种可能性:
通过 CMMotionManager 中的 CMMagnetometerData
通过 CMDeviceMotion 中的 CMCalibratedMagneticField,Apple 说
此属性返回的 CMCalibratedMagneticField 为您提供了设备附近的总磁场,没有设备偏差。与 CMMagnetometer 类的磁场属性不同,这些值反映了地球磁场加上周围磁场,减去设备偏置。
原则上(2.)正是我想要的。
如果磁力计数据正确校准,则有一个非常简单的测试。为简单起见,可以将自己限制在两个维度上。当设备仰卧时,B_x^2 + B_y^2 的组合必须是常数,与设备指向的方向无关。它必须正好等于地球磁场的水平分量(假设设备附近没有其他磁场)。因此,当将位于其背面的设备进行 360 度转动时,B_x 上的测量数据 B_y 应该显示一个圆圈。有关详细信息,请参见此处。
现在重点:CMCalibratedMagneticField 的数据不会导致圆圈!
有人对此有解释吗?或者有谁知道,CMCalibratedMagneticField 是如何产生的?在执行设备的“八字形”运动时,磁力计是否从上方链接的意义上进行校准,或者该运动有什么好处?
顺便提一句。为什么“八形”运动而不是围绕它的三个轴翻转设备,这将允许按照上面链接中的描述进行校准?
对于这个问题的任何澄清,我将非常高兴......谢谢!