飞控系统基础:PX4/ArduPilot飞控架构概览、传感器融合与控制环路
大家好,我是你们的飞控调试讲师。今天咱们聊聊飞控系统的骨架——架构、传感器融合和控制环路。这部分内容,说白了就是无人机的大脑、眼睛和肌肉反射。
我个人习惯把飞控系统拆成三个层面来看:硬件抽象层(传感器怎么读数据)、中间层(数据怎么融合成状态)、应用层(状态怎么变成电机转速)。你想想看,悬停不稳,八成是这三个层面中某个环节出了问题。
PX4 vs ArduPilot:两种主流架构的差异
先说说两个主流开源飞控。PX4和ArduPilot,就像Linux和Windows——各有拥趸,各有绝活。
| 对比维度 | PX4 | ArduPilot |
|---|---|---|
| 架构风格 | 微内核 + 模块化 | 宏内核 + 任务调度 |
| 传感器融合 | EKF2/3(扩展卡尔曼滤波) | EKF3(类似,但参数更多) |
| 控制环路 | 位置-速度-姿态-角速率 四环 | 位置-速度-姿态-角速率 四环 |
| 调试工具 | QGroundControl + MAVLink | Mission Planner + MAVLink |
| 典型应用 | 科研、竞速、VTOL | 航拍、测绘、农业 |
我在项目中遇到过不少新手,上来就问“哪个更好?”其实没有绝对的好坏。PX4的模块化设计,让我在调试新传感器时能单独替换模块,不用动整个系统。而ArduPilot的宏内核,参数多到让人眼花缭乱,但调好了确实稳。
传感器融合:IMU、GPS、光流是怎么“商量”的
传感器融合,说白了就是让多个“瞎子”互相纠正,得出一个靠谱的结论。
IMU(惯性测量单元):包含加速度计和陀螺仪。加速度计测重力方向,陀螺仪测旋转角速度。但加速度计怕振动,陀螺仪有零漂。所以需要融合。
GPS:提供绝对位置和速度。但GPS更新频率低(5-10Hz),而且高楼遮挡时信号会跳变。
光流:通过摄像头图像计算水平移动速度。室内无GPS时,光流就是救星。但光流怕纹理少的地面(比如纯白地板),也怕光照变化。
为什么会这样?因为每种传感器都有“死穴”。IMU短期准但长期漂,GPS长期准但短期跳,光流在特定场景下准但通用性差。
核心逻辑:飞控内部用扩展卡尔曼滤波(EKF)把这些数据揉在一起。EKF会根据每个传感器的“置信度”(噪声协方差)动态调整权重。比如GPS信号差时,EKF会自动降低GPS的权重,更多依赖IMU和光流。
我曾经调试一架室内无人机,悬停时总是慢慢往一个方向飘。查了半天,发现是光流传感器的安装角度偏了0.5度。嗯,这种“软故障”最难查,因为EKF不会报错,只会默默把偏差吸收进状态估计里。
控制环路:内环角速率、外环姿态、位置
控制环路是飞控的“肌肉反射”。我习惯把它想象成三层嵌套的PID环:
- 最内层:角速率环(100-200Hz)——控制电机转速,让飞机不转圈
- 中间层:姿态环(50-100Hz)——控制飞机倾斜角度,让飞机保持水平
- 最外层:位置环(10-20Hz)——控制飞机位置,让飞机悬停在一个点
你想想看,如果内环没调好,外环再怎么调也是白费力气。就像你让一个喝醉的人走直线——他连站都站不稳,怎么可能走直?
下面这张图是我自己画的飞控系统架构图,帮你理清各模块的关系:
从这张图你能看到,数据从传感器流入融合层,变成状态估计,然后进入控制环路层层计算,最后输出给电机。每个环节的延迟和精度都会影响最终悬停效果。
实际调试中的经验之谈
我个人习惯在调试悬停参数时,先看内环角速率环的响应。怎么判断?用手轻轻拨动飞机,看它回正的速度和超调量。如果回正太慢,增大P值;如果来回晃动,减小P值或增大D值。
嗯,这里要注意:内环调好后,再动外环。很多人一上来就调位置环的P值,结果飞机像“点头”一样前后晃动——其实是内环没锁住。
核心公式(简化版):
角速率环输出 = P * (目标角速率 - 实际角速率) + I * 积分项 + D * 微分项
姿态环输出 = P * (目标角度 - 实际角度) + I * 积分项
位置环输出 = P * (目标位置 - 实际位置) + I * 积分项
注意:外环的输出是内环的目标值。比如位置环输出的是目标速度,速度环输出的是目标角度,姿态环输出的是目标角速率。
我曾经遇到一个案例:一架四轴在悬停时,高度保持得很好,但水平方向总是缓慢漂移。检查了所有传感器校准,都没问题。最后发现是GPS的航向角(Yaw)有5度的偏差——因为磁力计受到了电机电流的干扰。解决办法是做了硬铁校准,并在EKF参数里适当降低了磁力计的权重。
好了,这一章的内容就到这里。记住:飞控系统是一个整体,传感器融合是“眼睛”,控制环路是“肌肉”,而架构是“骨架”。三者缺一不可。
公众号:蓝海资料掘金营,微信deep3321