我目前正在开发一个iPhone应用程序(在iPhone 5,iOS 7,Xcode 5上),该应用程序需要非常准确地确定当前的态度。 CMDeviceMotion的“态度”不能满足这些要求,因为苹果的传感器融合算法似乎过于依赖陀螺仪,陀螺仪漂移得很快(以我的经验)。这就是为什么我决定读出裸传感器数据,后来我想自己将其合并到传感器融合算法中。

当询问磁力计数据时,有两种可能性:

通过CMMotionManager中的CMMagnetometerData生成


  • Apple通过CMDeviceMotion中的CMCalibratedMagneticField传递
  • ,苹果对此表示



  • 原则上(2.)正是我想要的。

    有一个非常简单的测试,可以正确校准磁力计数据。为简单起见,可以将自己限制在两个维度上。当设备躺在其背面时,组合B_x ^ 2 + B_y ^ 2必须恒定,而与设备指向的方向无关。它必须刚好等于地球磁场的水平分量(假设设备附近没有其他磁场)。因此,当对设备背面的设备进行360度旋转时,B_x上的测量数据B_y应该显示一个圆圈。有关详细信息,请参见here

    现在,要点:CMCalibratedMagneticField的数据不会成圈!

    有人对此有解释吗?还是有人知道CMCalibratedMagneticField是如何产生的?执行设备的“八字形”运动时,磁力计是否已按照link from above进行了校准,或者该运动有什么用处?

    顺便提一句。为什么进行“八字形”运动,而不是围绕设备的三个轴翻转设备,这将允许进行link from above中所述的校准?

    对于这个问题的任何澄清,我将非常高兴...谢谢!

    最佳答案

    iOS 7中的磁力计存在问题,其误差为+-7º。尝试使用7.1 beta版。

    编辑

    磁力计具有随时间推移的零漂移,但是对于位置的突然变化而言是非常不准确的。另一方面,加速度计和陀螺仪可快速调整以应对突然的变化,但作为惯性传感器,它们会在一段时间内失去准确性。

    因此,当CMCalibratedMagneticField尝试补偿您的旋转运动时,它会使用来自陀螺仪和加速度计的数据。这是加速度计和陀螺仪的+-7º误差逐渐蔓延并使您的圆偏离轨道的时候。有关更多信息,请检查此answer和此wikipedia article

    关于八位数字:
    两者都做同样的事情,它们将设备的“北”朝向各个方向,以消除电磁干扰。沿所有三个轴翻转设备会更好,但是执行起来比较困难,并且用户不容易理解。

    希望这可以帮助。

    09-07 14:12