markdown复制## 1. 项目背景与核心价值
最近在自动驾驶控制算法优化时,发现传统状态空间模型预测控制(MPC)对突变的参考轨迹响应存在滞后。翻阅文献发现1987年Richalet提出的增量式MPC能有效改善这个问题,于是用Matlab做了组对比实验。这种将输入增量作为优化变量的方法,在工业过程控制中早有应用,但很少有人系统分析不同建模方式对控制性能的影响。
增量式MPC的核心优势在于:
- 天然积分特性:通过优化输入变化量Δu而非绝对量u,自动抑制稳态误差
- 抗扰动能力:对模型失配和外部干扰更鲁棒
- 平滑性保障:避免控制量的剧烈跳变
## 2. 状态空间建模的三种范式
### 2.1 标准状态空间模型
最基础的预测模型形式:
```matlab
x(k+1) = A*x(k) + B*u(k)
y(k) = C*x(k)
在Matlab中构建时要注意:
将Δu作为优化变量:
matlab复制x_aug(k+1) = [A B; 0 I]*x_aug(k) + [B; I]*Δu(k)
y(k) = [C 0]*x_aug(k)
其中x_aug = [x; u-1]。实测发现:
更彻底的增量形式:
matlab复制Δx(k+1) = A*Δx(k) + B*Δu(k)
y(k) = y(k-1) + C*Δx(k)
这种形式在跟踪斜坡信号时误差更小,但需要:
matlab复制% 连续系统模型
sys = ss(A_cont,B_cont,C_cont,0);
Ts = 0.1; % 采样周期
sysd = c2d(sys,Ts,'zoh');
% 转换为增量形式
[Ad,Bd,Cd,Dd] = ssdata(sysd);
A_aug = [Ad Bd; zeros(nu,nx) eye(nu)];
B_aug = [Bd; eye(nu)];
C_aug = [Cd zeros(ny,nu)];
采用高效的排列矩阵法:
matlab复制Phi = zeros(Np*nx,nx);
Gamma = zeros(Np*nx,Nc*nu);
for i=1:Np
Phi((i-1)*nx+1:i*nx,:) = Ad^i;
for j=1:min(i,Nc)
Gamma((i-1)*nx+1:i*nx,(j-1)*nu+1:j*nu) = Ad^(i-j)*Bd;
end
end
输入增量约束比绝对值约束更易满足:
matlab复制% 传统约束
umin <= u <= umax
dumin <= diff(u) <= dumax
% 转换为Δu约束
u_prev = last_u;
Ac = [tril(ones(Nc)); -tril(ones(Nc))];
bc = [repmat(umax-u_prev,Nc,1); repmat(u_prev-umin,Nc,1)];
在倒立摆控制中测试发现:
| 指标 | 标准模型 | 输入增量 | 状态增量 |
|---|---|---|---|
| 阶跃响应超调 | 12% | 8% | 5% |
| 斜坡跟踪误差 | 0.15m | 0.08m | 0.03m |
| 抗扰动恢复时间 | 2.1s | 1.6s | 1.3s |
参数整定经验:
现象:qp求解器返回infeasible
检查:
解决方法:
调试步骤:
在无人机姿态控制项目中,最终采用输入增量模型+软约束的方案:
-0.1 <= Δu <= 0.1实测比标准MPC降低47%的跟踪误差,且CPU占用仅增加15%。建议初次实现时:
code复制