如何将原始xyz磁力计数据转换为航向?

Cyp*_*236 3 c++ embedded magnetometer compass

我正在使用带有简单3轴磁力计的嵌入式设备。我目前在微特斯拉中显示XYZ值,但是如何将其转换为指南针方向?我曾尝试在Google上查找它,但我发现的所有内容似乎都非常复杂/解释得很差。

如果可能的话,我想知道如何进行倾斜补偿和不倾斜补偿。

在某种程度上有帮助的情况下,我目前在平面上获得的X,Y,Z值分别为70、0.8和34.1。

附注:如果这有帮助,请参见我用于磁力计的代码片段:

mSensor.enable();

while(true){
    wait(1);
    mSensor.getAxis(mData);
    lcd.cls();
    lcd.locate(0,3);
    lcd.printf("X=%4.1f micro-Tesla\n\rY=%4.1f micro-Tesla\n\rZ=%4.1f micro-Tesla", mData.x, mData.y, mData.z);
Run Code Online (Sandbox Code Playgroud)

ala*_*ain 5

没有倾斜的补偿,它并不太复杂:

angle = atan2(Y, X);
Run Code Online (Sandbox Code Playgroud)

这实际上与将笛卡尔坐标[X,Y]中的向量转换为极坐标[length,angle]中的向量而无需长度相同。

对于倾斜补偿版本,您需要首先将3D矢量[X,Y,Z]投影到平面[X2,Y2]上,然后使用与以前相同的公式。但要做到这一点,您将需要一个加速度计来知道倾斜量。