我目前正在开发一款iPhone应用程序(在iPhone 5,iOS 7,Xcode 5上),需要非常准确地确定当前的姿态。 CMDeviceMotion的“姿态”不能满足这些要求,因为苹果的传感器融合算法似乎过于依赖陀螺仪,而其漂移速度相当快(根据我的经验)。这就是为什么我决定读取裸传感器数据,并稍后通过自己的传感器融合算法将其组合起来。
在请求磁力计数据时,有两种可能性:
1. 通过CMMotionManager中的CMMagnetometerData。 2. 通过CMDeviceMotion中的CMCalibratedMagneticField,关于这一点,苹果表示:
“此属性返回的CMCalibratedMagneticField为您提供了设备周围的总磁场,不带有设备偏差。与CMMagnetometer类的magneticField属性不同,这些值反映了地球磁场加上周围磁场,减去设备偏差。”
原则上(2.)正是我想要的。
在请求磁力计数据时,有两种可能性:
1. 通过CMMotionManager中的CMMagnetometerData。 2. 通过CMDeviceMotion中的CMCalibratedMagneticField,关于这一点,苹果表示:
“此属性返回的CMCalibratedMagneticField为您提供了设备周围的总磁场,不带有设备偏差。与CMMagnetometer类的magneticField属性不同,这些值反映了地球磁场加上周围磁场,减去设备偏差。”
原则上(2.)正是我想要的。
如果磁力计数据被正确校准,那么有一个非常简单的测试。为了简单起见,可以限制自己在二维平面内。当设备放在背面时,组合 B_x^2 + B_y^2 必须保持不变,与设备指向的方向无关。它必须恰好等于地球磁场的水平分量(假设设备附近没有其他场)。因此,在将设备放在背面的情况下进行 360 度旋转时,测得的数据 B_y/B_x 应该显示一个圆形。详情请参见 这里。
现在重点是:CMCalibratedMagneticField 的数据并不呈圆形!
有人能解释一下吗?或者有人知道CMCalibratedMagneticField是如何产生的吗?当设备进行“八字形”运动时,磁强计是否按照上面的链接进行校准?这个运动有什么作用呢?
顺便问一句,为什么要进行“八字形”运动而不是将设备围绕其三个轴翻转,这样就可以像链接中描述的那样进行校准了吗?
我会非常感激任何关于这个问题的澄清...谢谢!