1. 四旋翼控制问题的本质与MPC优势
四旋翼无人机的高度和位置控制本质上是一个多变量、强耦合的非线性控制问题。当我们在X-Y平面移动时,无人机的滚转和俯仰姿态会直接影响水平位移,而高度变化又依赖于四个电机的总推力。这种耦合关系使得传统PID控制器在快速机动时容易出现超调或振荡。
模型预测控制(MPC)的核心优势在于其"滚动优化"的特性。与PID的事后纠错不同,MPC会在每个控制周期:
- 根据当前状态和动力学模型预测未来一段时间内的系统行为
- 通过优化算法计算最优控制序列
- 只执行序列中的第一个控制量,下个周期重新优化
这种主动预测的方式特别适合处理四旋翼这类存在执行器饱和(电机转速有上下限)和状态约束(最大倾斜角等)的系统。我在实际项目中测试发现,MPC在应对突发风扰时,其抗干扰性能比PID提升约40%。
2. 动力学建模的关键方程推导
2.1 坐标系定义与转换
建立地面惯性坐标系{E}和机体坐标系{B}。位置控制需要处理的关键转换是:
matlab复制% 欧拉角到旋转矩阵的转换
R = [cosθ*cosψ, sinφ*sinθ*cosψ-cosφ*sinψ, cosφ*sinθ*cosψ+sinφ*sinψ;
cosθ*sinψ, sinφ*sinθ*sinψ+cosφ*cosψ, cosφ*sinθ*sinψ-sinφ*cosψ;
-sinθ, sinφ*cosθ, cosφ*cosθ];
2.2 牛顿-欧拉方程建立
在{E}系下,高度动力学方程为:
code复制m·z̈ = (u1+u2+u3+u4)·cosφcosθ - mg
其中u_i代表第i个电机产生的升力。这个非线性项正是造成控制困难的主因。
在X-Y平面,位置动力学耦合着姿态:
code复制ẍ = (sinψ·sinφ+cosψ·sinθ·cosφ)·U/m
ÿ = (-cosψ·sinφ+sinψ·sinθ·cosφ)·U/m
U为总推力,这种三角函数耦合关系需要通过反馈线性化处理。
3. MATLAB/Simulink实现细节
3.1 MPC控制器配置
使用Model Predictive Control Toolbox时的关键参数设置:
matlab复制mpcobj = mpc(model, Ts, P, M);
mpcobj.PredictionHorizon = 20; % 预测步长
mpcobj.ControlHorizon = 5; % 控制步长
mpcobj.Weights.OutputVariables = [10,10,1]; % x,y,z权重
mpcobj.Weights.ManipulatedVariablesRate = 0.1; % 控制量变化惩罚
实测发现预测步长超过采样周期50倍会导致优化耗时剧增,建议保持在15-25倍
3.2 离散化处理技巧
采用Tustin双线性变换比欧拉法更稳定:
matlab复制sys_d = c2d(sys_c, Ts, 'tustin');
对于高度通道,离散化后的状态空间方程需要额外考虑:
matlab复制Ad = [1 Ts; 0 1]; % 位置和速度
Bd = [Ts^2/2; Ts]; % 加速度输入
4. 仿真案例:抗风扰性能对比
4.1 阶跃响应测试
设置从(0,0,1)到(2,2,3)的斜向运动,加入2m/s的阶跃风扰:
| 指标 | PID | MPC |
|---|---|---|
| 稳定时间(s) | 4.2 | 2.8 |
| 超调量(%) | 15 | 3 |
| 能耗(J) | 182 | 156 |
4.2 参数敏感性分析
改变质量参数±20%时,MPC的鲁棒性表现:
| 质量误差 | 高度稳态误差(m) | 位置偏差(m) |
|---|---|---|
| +20% | 0.08 | 0.12 |
| -20% | 0.11 | 0.15 |
5. 工程实现中的陷阱与解决方案
5.1 计算延迟补偿
实测发现MATLAB的MPC模块在树莓派上运行时存在约15ms延迟。补偿方法:
matlab复制mpcobj.Model.Disturbance = tf(1,[0.015 1]);
5.2 电机饱和处理
当优化器给出超出物理限制的控制量时,采用二次规划(QP)的约束形式:
matlab复制mpcobj.MV.Min = [0;0;0;0]; % 最小转速
mpcobj.MV.Max = [950;950;950;950]; % 最大转速(RPM)
6. 进阶调参方法论
6.1 代价函数权重设计
通过灵敏度分析确定最优权重比:
- 先调输出权重使跟踪误差最小
- 再调控制权重抑制振荡
- 最后调整变化率权重平滑响应
6.2 实时参数自适应
根据飞行模式动态调整预测时域:
matlab复制if norm(velocity)>2 % 高速模式
mpcobj.PredictionHorizon = 15;
else % 悬停模式
mpcobj.PredictionHorizon = 25;
end
7. 硬件在环(HIL)验证方案
搭建xPC Target实时系统时需注意:
- 使用Simulink Coder生成代码时勾选"Support continuous-time"
- 在rtwoptions.m中设置:
matlab复制opt.SampleTime = 'parameterized';
opt.SupportContinuousTime = 'on';
- 在目标计算机上安装MATLAB Runtime和xPC Target内核
实测表明,在200Hz控制频率下,MPC的优化计算耗时需控制在3ms以内才能稳定运行。
