iOS默认参考框架上的真实和磁性航向估计

时间:2015-09-16 16:34:09

标签: ios core-location accelerometer magnetometer sensor-fusion

我目前正致力于iOS的标题估算,我正在使用CoreLocation录制trueHeadingmagneticHeading,我还记录了原始磁力计数据以及校准的磁力计数据。

我观察到,在默认参考框架CMAttitudeReferenceFrameXArbitraryZVertical中,对于校准磁数据,我总是得到0。我做错了吗?

另外,在一些论文中,我找到了一个用磁力计计算航向的公式。公式如下:

H = -atan2(my,mx)其中mx,my和H是磁力计的x分量,磁力计的y分量,H正在前进。

当我应用上面的公式时,估计的标题与MagneticHeading或CoreLocation的TrueHeading不匹配。

那么我如何获得标题?

1 个答案:

答案 0 :(得分:0)

让我试着帮助你。

  

我观察到在默认参考框架中,   CMAttitudeReferenceFrameXArbitraryZVertical,我总是得到0   校准磁数据。难道我做错了什么?   是。你不应该得到零结果。

以下是代码片段,演示了如何在iOs上获取传感器数据:

[motionManager startDeviceMotionUpdatesUsingReferenceFrame: CMAttitudeReferenceFrameXMagneticNorthZVertical
                                                            toQueue: sensorsQueue
                                                            withHandler:^ (CMDeviceMotion motionData, NSError error)

   {
     if(error != NULL){
       DLog(@"sensors error info: %@",[error localizedDescription]);
     }
     else
     {
       sensorEntryM.type      = SENSOR_ENTRY_MAGNETOMETER;
       sensorEntryM.values[0] = motionData.magneticField.field.x;
       sensorEntryM.values[1] = motionData.magneticField.field.y;
       sensorEntryM.values[2] = motionData.magneticField.field.z;
       sensorEntryM.values[3] = motionData.magneticField.accuracy;

     }
   }];

但请注意,传感器测量是在与设备紧密连​​接的机身框架中获得的。为了获得航向角,您应该将车身框架转换为全局ENU框架。 值得注意的是你的公式

  

H = -atan2(my,mx)

仅适用于ENU帧的测量。 要找到这样的变换或旋转矩阵,您应该知道设备的俯仰角和滚动角。 有关详细信息,请参阅此答案。

您还可以通过详细说明探索好Sensor Fusion manual