我目前正在为iOS进行航向估计,并且正在使用CoreLocation记录trueHeadingmagneticHeading,并且还记录了原始磁力计数据和校准的磁力计数据。

我观察到在默认参考系CMAttitudeReferenceFrameXArbitraryZVertical中,校准磁数据的总值为0。难道我做错了什么?

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

H = -atan2(my,mx)其中mx,my和H是磁力计的x分量,磁力计的y分量,H是航向。

当我应用上述公式时,估计的航向与CoreLocation中的MagneticHeading或TrueHeading都不匹配。

那么如何获得标题?

最佳答案

我来帮你

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

这是演示如何在iO处获取传感器数据的代码段:

[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

关于ios - iOS默认引用系上的真航向估计,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32614098/

10-10 23:15