1. 四旋翼无人机控制系统的核心挑战
四旋翼无人机作为典型的欠驱动系统,其动力学特性呈现强耦合、非线性特征。我在2018年参与农业植保无人机项目时,曾亲眼目睹由于姿态控制精度不足导致药液喷洒不均匀的案例——当时飞行器在3级风况下出现持续振荡,最终作业偏差达到1.5米。这个经历让我深刻认识到双闭环控制的重要性。
传统单环PID控制在动态环境中存在明显局限:
- 姿态环响应滞后导致位置跟踪误差累积
- 外界扰动(如阵风)会通过耦合效应放大系统偏差
- 电机饱和时控制量积分项易引发振荡
2. 系统动力学建模关键步骤
2.1 坐标系定义与转换
建立地面惯性坐标系$O_E-X_EY_EZ_E$和机体坐标系$O_B-X_BY_BZ_B$。通过ZYX欧拉角转换得到旋转矩阵:
$$
R = \begin{bmatrix}
cθcψ & sφsθcψ-cφsψ & cφsθcψ+sφsψ \
cθsψ & sφsθsψ+cφcψ & cφsθsψ-sφcψ \
-sθ & sφcθ & cφcθ
\end{bmatrix}
$$
其中$c=cos$, $s=sin$,φ/θ/ψ分别为滚转/俯仰/偏航角。
注意:当θ=±90°时会出现万向节锁死,实际飞行需限制俯仰角在±85°内
2.2 刚体动力学方程推导
基于牛顿-欧拉方程建立六自由度模型:
$$
\begin{cases}
m\ddot{p} = R\begin{bmatrix}0\0\T\end{bmatrix} - mg\begin{bmatrix}0\0\1\end{bmatrix} - K_d\dot{p} \
I\dot{\omega} + ω×Iω = τ - K_rω
\end{cases}
$$
其中$K_d=diag(0.2,0.2,0.25)$为空气阻力系数,$K_r=diag(0.01,0.01,0.015)$为旋转阻尼。
2.3 电机动力学建模
采用一阶延迟模型:
$$
G_m(s) = \frac{K_m}{τ_ms+1}
$$
实测DJI 2312E电机参数:$K_m=650\ rpm/V$, $τ_m=0.08\ s$
3. 双闭环PID控制器设计
3.1 位置环设计要点
外环采用串级PID结构:
$$
a_{des} = K_{p,p}(p_{des}-p) + K_{i,p}\int(p_{des}-p)dt + K_{d,p}(\dot{p}_{des}-\dot{p})
$$
参数整定经验:
- 先调$K_{p,p}$至系统出现轻微超调
- $K_{i,p}$取$0.1K_{p,p}$抑制稳态误差
- $K_{d,p}$取$0.3K_{p,p}$抑制振荡
3.2 姿态环抗饱和策略
内环采用改进PID算法:
$$
τ = K_p e + K_i \int_{0}^{t} e dt + K_d \frac{de}{dt} - K_w \int_{0}^{t} (τ-τ_{max})dt
$$
其中$K_w$为抗饱和增益,当控制量$τ$超过电机最大输出$τ_{max}$时激活积分补偿。
4. Matlab仿真实现细节
4.1 Simulink模型搭建
构建包含以下子系统的模块化模型:
code复制UAV_Model.slx
├─ Environment (风场扰动模型)
├─ Controller (双闭环PID)
├─ Dynamics (六自由度方程)
└─ Actuators (电机+螺旋桨)
4.2 关键S函数示例
姿态解算采用四元数更新:
matlab复制function [q_new] = QuaternionUpdate(q, ω, dt)
Ω = [0 -ω(1) -ω(2) -ω(3);
ω(1) 0 ω(3) -ω(2);
ω(2) -ω(3) 0 ω(1);
ω(3) ω(2) -ω(1) 0];
q_new = q + 0.5*Ω*q*dt;
q_new = q_new/norm(q_new);
end
4.3 仿真参数配置
matlab复制simParams = struct;
simParams.mass = 1.2; % kg
simParams.Ixx = 0.023; % kg·m²
simParams.prop_ct = 1.5e-5; % 推力系数
simParams.battery_v = 12; % V
5. 典型问题排查手册
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 高度持续下降 | 电池电压补偿未启用 | 在推力计算中加入$T_{comp} = T_{des}*(V_{nom}/V_{real})^2$ |
| 偏航角漂移 | IMU安装偏差 | 校准加速度计零偏,添加$Δψ=0.5°$补偿 |
| 滚转振荡 | 微分增益过大 | 将$K_{d,φ}$降至当前值的60% |
| 悬停位置波动 | 风速观测器未启用 | 添加龙伯格观测器$ \hat{w} = l(p_{meas}-p_{est}) $ |
6. 进阶优化方向
在实际项目中,我们进一步采用了以下策略提升性能:
-
自适应PID:根据飞行阶段动态调整参数
matlab复制function Kp = AdaptiveKp(altitude) if altitude < 2 Kp = 1.2; else Kp = 0.8 + 0.2*exp(-0.5*altitude); end end -
扰动观测器:针对突风设计二阶滤波器
$$
\hat{d} = \frac{2ζω_n s + ω_n^2}{s^2 + 2ζω_n s + ω_n^2} (τ - I\dot{ω})
$$
取$ζ=0.707$, $ω_n=10\ rad/s$ -
控制分配优化:考虑电机效率映射
$$
\min_{Ω} |MΩ - u| + λ|Ω - Ω_{hover}|
$$
其中$M$为控制效率矩阵,$λ=0.3$为节能系数