1. 偏航漂移的根源:为什么纯陀螺仪积分会导致偏航角发散?磁力计如何提供绝对航向参考?
各位同学,欢迎来到《姿态解算进阶》的第一章。
做惯导的人,谁没被偏航漂移折磨过?我记得刚入行那会儿,调试一个四旋翼的悬停模式,明明陀螺仪零偏已经标定得很干净了,可飞了不到两分钟,飞机就开始原地画圈。我当时盯着上位机里的偏航角曲线,眼睁睁看着它从0°慢慢滑到15°、30°……最后直接放飞自我。嗯,这就是我们今天要聊的——偏航漂移。
1.1 陀螺仪积分:一个看似简单却暗藏杀机的过程
先说说陀螺仪是怎么算角度的。说白了,就是积分。
// 伪代码:陀螺仪积分求角度
yaw += gyro_z * dt;
就这么一行代码,对吧?但问题就出在这个“加”字上。
你想想看,每次采样都有误差。哪怕陀螺仪的零偏只有0.01°/s,积分10秒就是0.1°,积分100秒就是1°。飞个10分钟,误差能到6°。这还只是零偏,还没算上噪声、温度漂移、振动干扰。
我在项目中遇到过最夸张的一次,IMU贴在电机旁边,振动直接把陀螺仪的噪声放大了三倍。积分出来的偏航角,五分钟漂了40多度。你说这能忍吗?
核心结论:纯陀螺仪积分是开环系统。误差只累积,不消除。这就是偏航角发散的根源。
1.2 为什么偏航比俯仰、横滚更容易漂?
你可能会问:那俯仰角和横滚角怎么不漂?
好问题。原因在于,俯仰和横滚有重力向量做“锚点”。
加速度计能测到重力方向。哪怕陀螺仪积分有误差,我们也能用加速度计的数据把俯仰和横滚拉回来。这叫“闭环校正”。
但偏航呢?
你平放着IMU,绕Z轴旋转,重力向量在X、Y轴上的分量始终是0。加速度计根本感知不到偏航的变化。说白了,偏航在加速度计眼里是“透明”的。
所以,偏航只能靠陀螺仪自己扛。没有外部参考,它不漂谁漂?
个人经验:我建议在做姿态解算时,先把俯仰和横滚用加速度计+陀螺仪做互补滤波或卡尔曼滤波搞定。偏航单独拿出来,用磁力计做绝对参考。这样各司其职,效果最好。
1.3 磁力计:偏航的“北极星”
磁力计能测什么?地磁场方向。
地球本身就是一个大磁铁。磁力线从南极出发,进入北极。在水平面上,磁力计能告诉你哪个方向是北。
当然,这里说的“北”是磁北,不是真北。两者之间有个磁偏角,不同地区不一样。不过那是后话了,我们先把原理讲清楚。
磁力计输出的是三维向量:[mx, my, mz]。在水平状态下,mx和my就构成了水平磁场向量。通过简单的反正切,就能算出偏航角:
// 水平状态下,磁力计求偏航
yaw_mag = atan2(my, mx);
你看,这是绝对角度。没有累积误差。每次测量都是独立的。这就是磁力计最大的价值——提供绝对航向参考。
关键点:磁力计是“绝对”的,陀螺仪是“相对”的。两者结合,才能既保证动态响应,又消除长期漂移。
1.4 磁力计融合的核心逻辑
那怎么融合呢?我画了一张图,帮你理清思路。
这张图你看懂了吗?
左边是陀螺仪路径:角速度积分得到偏航角。短期精度高,但长期会漂。
右边是磁力计路径:直接解算磁航向。绝对参考,没有累积误差,但容易受干扰。
中间是融合算法。把两者的优点结合起来。具体怎么融合,我们后面的章节会详细讲。
1.5 磁力计不是万能的——避坑指南
我曾经在一个金属架子上测试磁力计,结果偏航角跳了30多度。当时我还以为是算法写错了,排查了半天才发现是架子上的铁磁性材料在作怪。
所以,磁力计虽然能提供绝对航向,但它也有自己的问题:
- 硬铁干扰:电路板上的永磁体、扬声器、电机磁铁,都会产生固定偏移。需要做硬铁校准。
- 软铁干扰:铁磁性材料会扭曲磁场线,导致测量值变形。需要做软铁校准。
- 动态干扰:电机大电流、电源纹波,都会产生瞬态磁场。需要做滤波。
- 倾斜补偿:IMU不是水平的时候,磁力计的三轴分量会混入重力方向的信息。需要结合俯仰和横滚做补偿。
注意:磁力计校准不是可选项,是必选项。不校准直接上融合算法,结果可能比纯陀螺仪积分还差。我见过太多人在这上面栽跟头了。
1.6 本章小结
好了,我们来捋一捋今天的内容:
- 偏航漂移的根源:陀螺仪积分是开环系统,误差只累积不消除。而且偏航没有重力参考,加速度计帮不上忙。
- 磁力计的价值:提供绝对航向参考,没有累积误差。每次测量都是独立的。
- 融合的必要性:陀螺仪短期准,磁力计长期稳。两者互补,才能得到可靠的偏航角。
- 磁力计的局限:容易受硬铁、软铁、动态干扰影响。使用前必须做校准和倾斜补偿。
下一章,我们会深入磁力计的校准方法。硬铁、软铁怎么标定?怎么用最小二乘法拟合椭圆?到时候我会把我在项目中踩过的坑一一告诉你。
个人建议:如果你现在手头有IMU,不妨先试试纯陀螺仪积分,看看偏航能漂多少。然后再把磁力计加进去,感受一下融合前后的差别。实践出真知。
公众号:蓝海资料掘金营,微信deep3321