0

我一直在试验 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 在地球磁场的大小上是正确的(根据维基百科,应该在 25 到 65 微特斯拉之间),但矢量的方向似乎完全错误。我想知道是否:

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

你对磁场属性有类似的经历吗?

4

1 回答 1

2

好了,谜团解开了。

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

事实证明,磁场相当稳定地指向真北以东 5 度,但与地面的夹角约为 73 度。根据这张地图,这完全符合我在瑞典的位置的预期。

于 2012-03-28T09:46:07.217 回答