4、磁力计校准:硬铁与软铁干扰、三维椭球拟合校准、地磁倾角与偏角修正
各位同学,欢迎来到第四讲。
磁力计这东西,说简单也简单,说复杂也复杂。简单在哪?它就是个测量磁场强度的传感器。复杂在哪?你把它往无人机上一装,周围全是干扰源——电机、电调、大电流导线,甚至机架本身的铁磁性材料。我当年第一次做飞控原型时,磁力计数据飘得跟喝醉了似的,航向角误差能到30度。后来才明白,不是传感器坏了,是没做校准。
这一讲,我们就来彻底搞定磁力计校准。核心就三件事:硬铁与软铁干扰的区分、三维椭球拟合校准、地磁倾角与偏角修正。
4.1 硬铁干扰与软铁干扰
先说说干扰的来源。你想想看,无人机上哪些东西会影响磁场?
- 硬铁干扰:来自永磁体或带磁性的金属。比如电机转子、扬声器磁铁、甚至某些螺丝。特点是——它产生的磁场是恒定偏移,不随无人机姿态变化而变化。说白了,就是给地磁场加了一个固定的偏置向量。
- 软铁干扰:来自能被磁化的材料。比如机架中的铁、镍等。特点是——它本身不产生磁场,但会扭曲和放大周围磁场。随着无人机旋转,软铁干扰会改变磁力计看到的磁场形状。
我个人习惯用一个比喻来理解:硬铁干扰就像你口袋里揣了块磁铁,无论你朝哪个方向站,它都往一个方向拉指针。软铁干扰则像你站在一个铁笼子里,笼子会改变地磁场的走向,你转个身,磁场方向就变了。
关键区别:
- 硬铁干扰 → 导致测量球心偏移(从原点移到某点)
- 软铁干扰 → 导致测量球体变形为椭球(不再是正球体)
嗯,这里要注意:实际应用中,两种干扰往往同时存在。所以校准必须同时处理。
4.2 三维椭球拟合校准
为什么要做椭球拟合?
理想情况下,无人机在空中旋转一圈,磁力计三轴数据应该落在一个球面上,球心在原点。但硬铁干扰把球心推走了,软铁干扰把球体压扁了。最终你得到的是一个偏心椭球。
校准的目标就是:把这个偏心椭球,还原成一个球心在原点的标准球体。
我在项目中遇到过一种情况:某次测试,磁力计数据看起来挺正常,但航向角就是不准。后来一查,是软铁干扰导致椭球的长轴和短轴差了15%。如果不做椭球拟合,直接当球体处理,误差根本消不掉。
具体怎么做?数学上,椭球拟合就是求解一个二次型方程:
// 椭球方程:Ax² + By² + Cz² + 2Dxy + 2Exz + 2Fyz + 2Gx + 2Hy + 2Iz = 1
// 其中 (x, y, z) 是磁力计原始读数
// 我们需要拟合出参数 A 到 I
// 常用方法:最小二乘法
// 采集 N 组数据 (xi, yi, zi),构建矩阵方程
// 求解后得到椭球中心偏移 (ox, oy, oz) 和缩放矩阵 S
// 校准后的值:
// calibrated = S * (raw - center)
实际工程中,我建议使用两步法:
- 粗校准:先采集数据,用球体拟合快速估算硬铁偏移。这一步可以在地面完成,让无人机绕各个轴缓慢旋转。
- 精校准:在粗校准基础上,用椭球拟合处理软铁干扰。这一步通常需要飞行中采集数据,因为空中姿态更丰富。
我的经验:采集数据时,一定要覆盖所有姿态。别只转水平面,上下翻转、侧倾都要做。否则拟合出来的椭球在缺失方向上是瞎猜的。我曾经偷懒只转了水平面,结果一爬升航向就偏了8度。
4.3 地磁倾角与偏角修正
校准完传感器,是不是就能直接用磁力计算航向了?
还差一步。地磁场本身不是水平的——它有倾角和偏角。
- 地磁偏角:磁北与真北之间的夹角。不同地区不一样,比如北京大约是西偏6度,上海是西偏4度。这个值可以从世界地磁模型(WMM)查到。
- 地磁倾角:地磁场方向与水平面的夹角。在赤道附近接近0度,在两极接近90度。比如北京大约是60度向下。
你想想看,如果直接用磁力计的水平分量算航向,而忽略了倾角,那在俯仰或横滚时,航向误差会非常大。为什么?因为磁力计测的是三维向量,当无人机倾斜时,垂直分量会泄漏到水平分量中。
修正方法其实不复杂:
// 假设我们已经得到校准后的磁力计读数 (mx, my, mz)
// 以及当前的姿态角:横滚 roll,俯仰 pitch
// 第一步:将磁力计向量旋转到水平坐标系
// 使用旋转矩阵,先绕X轴转 -roll,再绕Y轴转 -pitch
float cos_roll = cos(-roll);
float sin_roll = sin(-roll);
float cos_pitch = cos(-pitch);
float sin_pitch = sin(-pitch);
float mx_h = mx * cos_pitch + mz * sin_pitch;
float my_h = mx * sin_roll * sin_pitch + my * cos_roll - mz * sin_roll * cos_pitch;
// 第二步:计算磁航向
float heading = atan2(-my_h, mx_h); // 注意坐标系定义
// 第三步:加上地磁偏角修正
heading += declination; // declination 从查表或WMM模型获得
避坑指南:我曾经犯过一个低级错误——把倾角修正和偏角修正搞反了。倾角修正是在姿态解算时做的,偏角修正是最后加一个固定偏移。千万别混。另外,地磁偏角不是一成不变的,每年大约变化0.1度左右。如果你做高精度应用,建议定期更新WMM模型。
4.4 校准流程总结
好了,我们把整个流程串起来:
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | 采集原始数据 | 旋转无人机,覆盖所有姿态,至少采集200组数据 |
| 2 | 椭球拟合 | 求解椭球参数,得到中心偏移和缩放矩阵 |
| 3 | 应用校准 | 对每个原始读数:calibrated = S * (raw - center) |
| 4 | 姿态解算中的倾角修正 | 将校准后的向量旋转到水平坐标系 |
| 5 | 偏角修正 | 在最终航向角上加上当地地磁偏角 |
我个人习惯在飞控启动时做一次快速校准检查。如果椭球中心偏移超过某个阈值(比如200mGauss),就提示用户重新校准。嗯,这个阈值要根据你的硬件平台来定,我一般取传感器量程的10%。
最后说一句:磁力计校准不是一劳永逸的。换了电机、改了布线、甚至换了机架材料,都可能改变干扰特性。每次硬件变动后,重新跑一遍校准流程,是最稳妥的做法。
下一讲,我们会把磁力计和IMU融合起来,讲讲姿态估计中的传感器融合算法。到时候你会发现,校准做得越好,融合效果越稳。