CMDeviceMotion的磁场属性不正确?

时间:2012-03-26 15:45:04

标签: ios objective-c core-motion magnetometer

我一直在尝试使用CMDeviceMotion,特别是使用startDeviceMotionUpdatesUsingReferenceFrame。磁场的值对我来说似乎不正确。

例如,如果我这样做:

CMDeviceMotion *manager = [[CMDeviceMotion alloc] init];
manager.deviceMotionUpdateInterval = 0.1;
[manager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXArbitraryCorrectedZVertical toQueue:queue withHandler:^(CMDeviceMotion *motion, NSError *error) {
    CMMagneticField fld = motion.magneticField.field;
    NSLog( @"%5.1f %5.1f %5.1f", fld.x, fld.y, fld.z );
    [self handleDeviceMotion:manager.deviceMotion];
}];       

它显示的磁场矢量大小约为50,但几乎与重力对齐。也就是说,当设备平放在桌子上时,x和y接近零,z接近-50,与旋转设备的方式无关。

对于地球的磁场,50的大小是正确的(根据Wikipedia应该在25到65微特斯拉之间),但向量的方向似乎都是错误的。我想知道是否:

  • 这是我所在地(瑞典斯德哥尔摩)或
  • 所特有的
  • magneticField属性显示没有地球场的剩余磁场,或
  • 这是错误

您对magnetField属性有类似的经历吗?

1 个答案:

答案 0 :(得分:2)

好的,这个谜团已经解决了。

我现在使用了一个参考框架CMAttitudeReferenceFrameXTrueNorthZVertical,它给出了我之前使用的... XArbirtraryCorrectedZVertical的类似结果。然后我计算了磁场矢量相对于重力的位置,通过使用给定的姿态将其旋转回referenceFrame。

事实证明,磁场非常稳定地指向真北以东5度,但与地面的角度约为73度。根据{{​​3}}的情况,根据我在瑞典的位置的预期, 完全