一、飞控系统概述:从原理到实战
大家好,我是你们这门课的老朋友。做飞控算法这些年,我踩过的坑比写过的代码还多。今天咱们先不急着敲键盘,把飞控系统的底子打扎实了,后面建模和代码生成才能顺风顺水。
说白了,飞控系统就是让无人机/飞行器能稳定飞行的“大脑”和“小脑”。你想想看,一个四轴在空中,四个电机转速稍有偏差,它就会翻跟头。飞控的任务就是实时感知姿态、计算控制量、驱动电机,让飞机乖乖听话。
1.1 飞行器控制原理:核心是“闭环”
飞行器控制,本质上是一个负反馈闭环。我刚开始做飞控时,总觉得理论太简单,结果第一次试飞就炸机了——原因就是没理解“反馈”的滞后性。
控制回路通常长这样:
期望姿态 → 控制器 → 执行器(电机/舵面) → 飞行器动力学 → 实际姿态
↑ |
└──────── 传感器(IMU/GPS) ←──────────────┘
核心思想就一句话:测出当前状态,算出偏差,用偏差驱动执行器去消除偏差。
这里有个关键点——控制律。PID是最常用的,但实际项目中你会发现,纯PID在强风、大机动时根本不够用。我曾在某款测绘无人机上,因为PID参数没考虑桨叶气流干扰,导致悬停时高度波动±30cm。后来加了前馈和自适应项才搞定。
控制律设计要点:
- 内环(角速率环):响应最快,通常用P或PI控制
- 中环(姿态角环):响应中等,常用PID
- 外环(位置/速度环):响应最慢,需要积分项消除静差
1.2 飞控系统架构:三大件缺一不可
一个完整的飞控系统,我习惯把它拆成三块:传感器、控制器、执行器。这三者配合不好,代码写得再漂亮也白搭。
1.2.1 传感器——飞控的“眼睛”和“耳朵”
传感器负责感知飞行器状态。常用的有:
| 传感器类型 | 测量物理量 | 典型型号 | 我踩过的坑 |
|---|---|---|---|
| IMU(惯性测量单元) | 加速度、角速度 | MPU6050, ICM-20689 | 温度漂移导致姿态发散,必须做温补 |
| 磁力计 | 地磁场方向 | HMC5883L, IST8310 | 电机磁场干扰严重,需要校准 |
| 气压计 | 高度 | BMP280, MS5611 | 风噪和气流扰动,低空不准 |
| GPS/RTK | 位置、速度 | Ublox M8N, ZED-F9P | 高楼遮挡时丢星,必须融合 |
嗯,这里要注意:单一传感器不可靠。我见过有人只用GPS做高度控制,结果飞机在桥下飞时直接撞地。所以飞控里一定要做多传感器融合,比如用卡尔曼滤波把IMU和气压计的数据揉在一起。
1.2.2 控制器——飞控的“大脑”
控制器就是运行飞控算法的MCU或MPU。选型时我一般看三点:
- 算力:姿态解算+控制律+导航,至少需要100MIPS以上
- 外设:SPI/I2C接传感器,PWM/DShot接电调,UART接GPS/数传
- 实时性:控制周期通常1kHz,中断响应要快
常用的有STM32F4/F7系列、NXP的RT系列。我个人习惯用STM32F407,性价比高,资料多。但如果你要做高级视觉导航,得上FPGA或树莓派级别的处理器。
1.2.3 执行器——飞控的“手脚”
执行器把控制信号变成物理动作。多旋翼用的是电调+电机+桨叶,固定翼还有舵机。
这里有个避坑指南:我曾经因为电调PWM频率设置不对,导致电机响应滞后,飞机在姿态模式下疯狂震荡。后来查了电调手册,发现它只支持50-500Hz的PWM,而我设成了1000Hz。所以执行器的响应带宽一定要和控制器匹配。
小技巧:在Simulink里建模时,可以把执行器建模成一阶惯性环节+限幅器。这样仿真结果更贴近实际。我一般用时间常数τ=0.01~0.05s来模拟电机响应。
1.3 飞控算法核心任务:三驾马车
飞控算法说复杂也复杂,说简单也简单。核心就三个任务:姿态解算、控制律、导航。这三者环环相扣,缺一不可。
1.3.1 姿态解算——知道飞机“朝哪”
姿态解算就是利用IMU数据,算出飞机的横滚角、俯仰角、偏航角。常用的方法有:
- 互补滤波:简单、计算量小,适合低算力MCU
- Mahony滤波:基于四元数,比互补滤波更稳定
- 卡尔曼滤波:精度高,但调参麻烦,计算量大
我个人在项目中用得最多的是Mahony滤波。为什么?因为它兼顾了精度和计算效率。我曾经在STM32F103上跑卡尔曼滤波,结果CPU占用率飙到80%,控制周期都保证不了。换成Mahony后,CPU占用降到30%,姿态精度也够用。
注意:姿态解算的更新频率至少要400Hz以上,否则控制律会“看到”过时的姿态,导致震荡。我见过有人用100Hz解算,结果飞机像喝醉了一样晃来晃去。
1.3.2 控制律——让飞机“听话”
控制律是飞控的核心。它根据期望姿态和实际姿态的偏差,计算出控制量。最经典的是串级PID:
// 伪代码示例:串级PID控制
// 外环:角度环
angle_error = desired_angle - actual_angle;
angle_PID_out = PID_angle(angle_error);
// 内环:角速率环
rate_error = angle_PID_out - actual_rate;
rate_PID_out = PID_rate(rate_error);
// 输出到电机混控
motor_output = mix(rate_PID_out);
这里有个关键点:内环的响应速度要比外环快5~10倍。我一般把内环频率设在1kHz,外环设在100~200Hz。这样内环能快速抑制扰动,外环负责跟踪期望。
1.3.3 导航——知道飞机“去哪”
导航算法负责让飞机从A点飞到B点。它需要融合GPS、光流、视觉等数据,生成位置和速度指令。
导航的核心是路径规划和轨迹跟踪。简单场景用L1制导律或纯追踪就够了。复杂场景(比如避障)要用RRT*或MPC。
我记得有一次做植保无人机,要求按规划航线喷洒农药。结果因为GPS精度不够,飞机偏航了2米,把邻居家的菜地喷了。后来加了RTK定位和磁力计校准,才把误差控制在10cm以内。
1.4 知识体系总览
下面这张图是我自己画的飞控算法知识体系,涵盖了从传感器到执行器的完整链路。你可以把它当作学习地图:
从这张图你能看到,整个飞控系统是一个从传感器到执行器的闭环。姿态解算是基础,控制律是核心,导航是上层应用。三者缺一不可,而且必须紧密配合。
1.5 本章小结
好了,这一章我们聊了飞控系统的三大块:
- 控制原理:负反馈闭环,内环快外环慢
- 系统架构:传感器、控制器、执行器,选型和匹配很重要
- 核心算法:姿态解算、控制律、导航,三驾马车并驾齐驱
下一章,我们会深入MATLAB/Simulink环境搭建,手把手教你配置飞控仿真模型。到时候我会分享一些我常用的Simulink小技巧,让你少走弯路。
课后思考:如果你现在要设计一款飞控,你会选择哪种姿态解算算法?为什么?欢迎在评论区和我讨论。