我一直在尝试使用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微特斯拉之间),但向量的方向似乎都是错误的。我想知道是否:
您对magnetField属性有类似的经历吗?
答案 0 :(得分:2)
我现在使用了一个参考框架CMAttitudeReferenceFrameXTrueNorthZVertical,它给出了我之前使用的... XArbirtraryCorrectedZVertical的类似结果。然后我计算了磁场矢量相对于重力的位置,通过使用给定的姿态将其旋转回referenceFrame。
事实证明,磁场非常稳定地指向真北以东5度,但与地面的角度约为73度。根据{{3}}的情况,根据我在瑞典的位置的预期, 完全 。