1. 四旋翼控制实验:当经典PID遇上现代ADRC
四旋翼飞行器的控制算法选择一直是飞控领域的核心课题。传统PID控制器因其结构简单、易于实现的特点,在工业控制领域占据统治地位长达半个多世纪。而新兴的自抗扰控制(ADRC)技术,则以其对系统扰动和模型不确定性的强鲁棒性,正逐步在高端控制场景中崭露头角。
这次实验我搭建了一个完整的四旋翼控制测试平台,通过对比测试PID和ADRC两种控制算法在姿态控制环节的表现。实验过程中发现,当飞行器遭遇突发风扰或负载变化时,ADRC展现出了令人惊艳的抗干扰能力,而传统PID则需要通过复杂的参数整定才能勉强应对。不过ADRC也不是完美无缺——其复杂的参数物理意义和较高的计算量,都是实际工程应用中需要权衡的因素。
2. 实验平台搭建与模型建立
2.1 硬件平台选型
实验采用450轴距的十字型四旋翼机架,核心部件包括:
- STM32F407作为主控芯片(168MHz主频,满足实时控制需求)
- MPU6050六轴传感器(姿态解算核心)
- 920KV无刷电机配1045螺旋桨
- 30A电调支持400Hz PWM刷新率
特别注意:电机与螺旋桨的匹配直接影响控制效果。经实测,这套动力组合在50%油门时能产生约1.2kg拉力,完全满足实验需求。
2.2 数学模型建立
四旋翼动力学模型包含两个核心方程:
姿态动力学方程:
code复制I·ω̇ + ω×(I·ω) = τ - τ_d
其中I为转动惯量矩阵,ω为角速度,τ为控制力矩,τ_d为干扰力矩。
电机推力模型:
code复制F_i = k_f·ω_i²
M_i = k_m·ω_i²
k_f和k_m需要通过实验标定。我们采用悬停实验法测得k_f=3.8e-5 N·s²/rad²。
3. 控制算法实现细节
3.1 PID控制器设计
采用串级PID结构:
- 外环:角度控制(P=2.5, I=0.05, D=0.3)
- 内环:角速率控制(P=0.8, I=0, D=0.12)
c复制// PID核心算法实现
float PID_Update(PID* pid, float error) {
float p_term = pid->kp * error;
pid->integral += error * pid->dt;
float i_term = pid->ki * pid->integral;
float d_term = pid->kd * (error - pid->last_error) / pid->dt;
pid->last_error = error;
return p_term + i_term + d_term;
}
3.2 ADRC控制器设计
ADRC包含三个关键组件:
- 跟踪微分器(TD):安排过渡过程
- 扩张状态观测器(ESO):估计总扰动
- 非线性状态误差反馈(NLSEF)
c复制// 二阶ESO实现示例
void ESO_Update(ESO* eso, float y, float u) {
float e = eso->z1 - y;
eso->z1 += eso->dt * (eso->z2 - eso->beta01*e + eso->b*u);
eso->z2 += eso->dt * (-eso->beta02*e);
eso->z3 += eso->dt * (-eso->beta03*e); // 扰动估计
}
4. 对比实验结果分析
4.1 阶跃响应测试
| 指标 | PID控制 | ADRC控制 |
|---|---|---|
| 上升时间(ms) | 120 | 95 |
| 超调量(%) | 8.2 | 3.5 |
| 稳态误差(deg) | ±0.5 | ±0.2 |
4.2 抗干扰测试
施加2N·m阶跃干扰时:
- PID需要约400ms恢复稳定
- ADRC仅需150ms且无明显超调
5. 参数整定实战技巧
5.1 PID调参经验
-
先调内环(角速率环):
- 从P=0.5开始,每次增加0.2直到出现轻微震荡
- D项取P值的1/5~1/3
- I项最后微调消除静差
-
外环(角度环):
- P值一般为内环的3~5倍
- D值对内环形成阻尼
5.2 ADRC参数整定
采用带宽参数化方法:
code复制ω_c = 2π·f_c // 期望带宽
β01 = 3ω_c, β02 = 3ω_c², β03 = ω_c³
实测表明,f_c取8-12Hz时效果最佳。
6. 实际飞行测试问题排查
问题1:ADRC控制时出现高频抖动
- 原因:ESO带宽过高放大了测量噪声
- 解决:降低β参数,增加软件滤波
问题2:大角度机动时PID失控
- 原因:角速度达到电调限幅(约800deg/s)
- 改进:增加角速度前馈补偿
问题3:电池电压下降导致控制性能劣化
- ADRC方案:ESO自动补偿动力损失
- PID方案:需增加电压补偿系数
经过两周的反复测试,最终得到的控制器在以下场景表现优异:
- 悬停稳定性:ADRC位置误差<±5cm
- 抗风性能:可抵抗6级阵风
- 负载变化:突然增减200g负载几乎无影响
这个实验最让我惊讶的是ADRC对模型不确定性的容忍度——即使故意将转动惯量参数设置偏差30%,控制性能下降也不超过15%。而同等条件下PID会出现明显震荡。不过ADRC的48个参数确实让调试过程充满挑战,需要配合频域分析工具才能高效完成整定。
