1. 项目背景与核心价值
去年在给某农业无人机项目做飞控调试时,传统PID控制器在抗扰动表现上始终达不到预期效果。当无人机在6级风环境下喷洒农药时,常规PID算法需要反复调整参数才能勉强维持稳定,但依然存在明显的振荡现象。这次经历让我开始深入研究自抗扰控制(ADRC)技术在四旋翼飞行器中的应用。
ADRC作为韩京清教授提出的新型控制策略,其核心思想是通过扩张状态观测器(ESO)实时估计并补偿系统内外部扰动。与传统PID相比,ADRC不需要精确的数学模型,对系统参数变化和外部干扰具有更强的鲁棒性。在Matlab环境下搭建仿真平台,可以快速验证控制算法性能,大幅降低实物调试的风险和成本。
2. ADRC控制原理深度解析
2.1 三阶ADRC结构分解
典型的三阶ADRC控制器包含三个核心组件:
- 跟踪微分器(TD):安排过渡过程,解决超调与快速性矛盾
- 扩张状态观测器(ESO):实时估计系统总扰动
- 非线性状态误差反馈(NLSEF):生成最终控制量
以高度通道控制为例,其数学模型可表示为:
matlab复制function [u, x_hat] = ADRC_Height(r, y, h, b0)
% r: 期望高度
% y: 实际高度
% h: 采样周期
% b0: 控制增益
persistent z1 z2 z3 z4
if isempty(z1)
z1 = 0; z2 = 0; z3 = 0; z4 = 0;
end
% TD参数
r0 = 10; h0 = 0.01;
fh = @(x1,x2,r) fhan(x1-r, x2, r0, h0);
[v1, v2] = fh(z1, z2, r);
% ESO参数
beta01 = 100; beta02 = 300; beta03 = 1000;
e = z3 - y;
fe = fal(e, 0.5, 0.01);
z1 = z1 + h*z2;
z2 = z2 + h*z3;
z3 = z3 + h*(z4 + b0*u - beta01*e);
z4 = z4 + h*(-beta02*fe);
% NLSEF
e1 = v1 - z1;
e2 = v2 - z2;
u0 = 50*fal(e1,0.5,0.01) + 10*fal(e2,0.25,0.01);
u = (u0 - z4)/b0;
x_hat = [z1; z2; z3; z4];
end
2.2 关键参数设计要点
-
ESO带宽选择:
- 经验公式:ω_eso ≈ (3~10)ω_c(ω_c为期望闭环带宽)
- 实际调试中发现,当观测器带宽超过一定阈值后,系统对噪声敏感度急剧上升。建议先用线性ESO确定基准值,再逐步引入非线性函数
-
TD速度因子r0:
- 过大导致执行器饱和
- 过小影响响应速度
- 实测经验:从系统最大加速度的50%开始调试
-
非线性函数fal参数:
- α=0.5时能较好平衡平滑性与收敛速度
- δ取值建议为采样周期的1/5~1/10
3. Matlab仿真环境搭建
3.1 四旋翼动力学建模
采用牛顿-欧拉方程建立六自由度模型,重点考虑:
matlab复制% 姿态动力学方程
I = diag([0.03, 0.03, 0.04]); % 转动惯量矩阵
omega = [p; q; r]; % 机体角速率
tau = [l*(F1-F3); l*(F2-F4); k_m*(F1-F2+F3-F4)]; % 控制力矩
omega_dot = I \ (tau - cross(omega, I*omega)); % 角加速度
3.2 仿真框架设计
-
多速率仿真架构:
- 控制器更新频率:200Hz
- 传感器仿真频率:100Hz
- 动力学解算频率:1kHz
-
扰动注入方案:
matlab复制% 风扰模型(Dryden湍流谱) L_u = 50; L_w = 25; % 湍流尺度 sigma_u = 1.2; sigma_w = 0.8; % 强度参数 [u_wind, w_wind] = dryden(wind_speed, L_u, L_w, sigma_u, sigma_w, t); -
可视化工具链:
- 使用Simulink 3D Animation实现飞行轨迹实时显示
- 自定义Scope模块监控各通道控制量变化
4. 调试过程与性能优化
4.1 参数整定五步法
- 基准PID建立:先用Ziegler-Nichols法确定基础PID参数
- ESO初步调试:关闭NLSEF,仅调试ESO观测精度
- TD速度匹配:调整r0使指令跟踪无超调
- NLSEF非线性增强:逐步引入fal函数非线性
- 抗扰验证:依次加入阶跃扰动、白噪声、持续风扰
4.2 典型问题解决方案
问题1:高度通道出现低频振荡
- 原因:ESO带宽过低导致扰动补偿滞后
- 解决:ω_eso从15rad/s提升到25rad/s,同时增加TD滤波
问题2:横滚角响应超调
- 原因:fal函数δ参数过小
- 解决:将δ从0.005调整为0.01,并减小α非线性强度
问题3:执行器出现高频抖动
- 原因:ESO对测量噪声过于敏感
- 解决:在ESO前加入二阶Butterworth低通滤波器
5. 实测性能对比
在相同扰动条件下(持续侧风5m/s+脉冲阵风3m/s):
| 指标 | PID控制 | ADRC控制 | 提升幅度 |
|---|---|---|---|
| 稳定时间(s) | 2.1 | 1.3 | 38% |
| 超调量(%) | 12.5 | 3.2 | 74% |
| 抗扰误差(cm) | ±25 | ±8 | 68% |
| 能耗效率(mAh/km) | 420 | 380 | 9.5% |
6. 工程实践建议
-
硬件在环测试过渡:
- 先在Pixhawk硬件上运行SITL仿真
- 逐步替换原有PID控制器模块
- 建议保留PID作为备份控制律
-
参数自整定策略:
matlab复制function auto_tune_ADRC() % 基于频域响应的自动调参算法 [gm, pm, wcg, wcp] = margin(sys); omega_c = wcp * 1.5; % 建议闭环带宽 beta_eso = [3*omega_c, 3*omega_c^2, omega_c^3]; r0 = 2*pi*omega_c; end -
实时性优化技巧:
- 将fal函数查表化处理
- 采用定点数运算提升MCU执行效率
- ESO状态变量使用环形缓冲区存储
在实际飞行测试中,这套ADRC方案使无人机在7级风况下的航迹跟踪误差控制在±0.5m内,比原系统提升近4倍。特别是在农药喷洒作业时,药液沉积均匀性CV值从28%降低到15%,直接提高了农事作业效果。