1. 项目概述
在车辆动力学控制领域,高速变道场景下的路径跟踪一直是个颇具挑战性的问题。这次要分享的是基于MATLAB/CarSim联合仿真平台的LPV-RMPC-PTC复合控制系统开发实录。这套系统在20-25m/s的变速单移线和10-15m/s的变速双移线场景中表现优异,其核心在于将线性参变(LPV)建模、鲁棒模型预测控制(RMPC)和路径跟踪控制(PTC)进行了有机整合。
1.1 核心需求解析
面对高速变道场景,传统控制方法常遇到三个典型问题:
- 车辆参数时变特性(如侧偏刚度随工况变化)
- 状态约束难以在线处理(如加速度限制)
- 执行层转矩分配优化
我们的解决方案采用分层架构:
- 上层:基于LPV框架的二自由度模型,通过LMI设计RMPC控制器
- 下层:四轮转矩最优分配算法
- 接口层:S函数实现CarSim与Simulink的实时数据交互
2. 模型构建与控制器设计
2.1 LPV模型搭建
二自由度自行车模型是整车控制的经典基础,但传统固定参数模型在高速变道时精度会显著下降。我们采用参数依赖的LPV模型:
matlab复制% 时变参数初始化
vx = 20; % 初始车速(m/s)
rho = 1/vx; % 调度参数
A = [0, 1, 0, 0;
0, -(Caf(rho)+Car(rho))/(m*vx), (Caf(rho)+Car(rho))/m, (lr*Car(rho)-lf*Caf(rho))/(m*vx);
0, 0, 0, 1;
0, (lr*Car(rho)-lf*Caf(rho))/(Iz*vx), (lf*Caf(rho)-lr*Car(rho))/Iz, -(lf^2*Caf(rho)+lr^2*Car(rho))/(Iz*vx)];
关键改进点:
- 侧偏刚度Caf/Car设计为车速的函数,通过实验数据拟合得到参数映射表
- 引入调度参数ρ=1/vx,使模型能自动适应不同车速工况
- 矩阵元素采用分式线性化处理,避免高速时数值不稳定
2.2 RMPC控制器实现
鲁棒模型预测控制的核心在于在线优化时处理不确定性。我们采用LMI方法将鲁棒稳定性条件转化为凸优化问题:
matlab复制function [P, K] = solveLMI(rho)
% 参数依赖的LMI求解
cvx_begin sdp
variable P(4,4) symmetric
variable Y(4,4)
% 鲁棒稳定性条件
A(rho)*P + P*A(rho)' + Y'*B' + B*Y + 2*alpha*P <= 0;
% 输入约束
[u_max^2, Y; Y', P] >= 0;
% 状态约束
P >= Q_x;
cvx_end
K = Y*inv(P);
end
实际调试中发现三个关键点:
- 松弛因子α的选择:建议初始值取0.1,根据响应速度调整
- 采样周期与车速的关系:建议满足vx*Ts < 0.3m(即单步预测距离)
- QP求解器的选择:对于4状态模型,MATLAB的quadprog比CVX实时性更好
3. 执行层转矩分配
3.1 优化问题建模
上层控制器输出期望横摆力矩Mz后,下层需要将其分解为四轮驱动转矩。我们构建如下优化问题:
code复制minimize: ||T1+T2+T3+T4 - T_total|| + w1||Mz - Mz_actual|| + w2||T||
subject to:
T_min ≤ Ti ≤ T_max (i=1..4)
|ΔTi| ≤ ΔT_max (防电机过载)
对应的MATLAB实现:
matlab复制function T = torque_allocation(Mz, T_total)
H = diag([0.1, 0.1, 0.1, 0.1, 1.0]); % 权重矩阵
f = [zeros(4,1); -1]; % 松弛变量
Aeq = [1 1 1 1 0;
-0.5*lf 0.5*lf 0.5*lr -0.5*lr 0];
beq = [T_total; Mz];
options = optimoptions('quadprog','Display','off');
T = quadprog(H,f,[],[],Aeq,beq,T_min,T_max,[],options);
end
3.2 实时性优化技巧
在CarSim联合仿真中发现,转矩分配环节的耗时直接影响控制频率。通过以下措施将计算时间从15ms降至5ms:
- 预计算权重矩阵H的Cholesky分解
- 将不等式约束转化为边界约束
- 使用mexFunction替代纯m代码
4. 联合仿真与结果分析
4.1 CarSim接口配置
CarSim 8.02与Simulink的接口配置需要注意:
- 在CarSim界面设置Solver为"External"模式
- 采样时间必须与Simulink保持一致(建议0.01s)
- 输出变量选择:
- Vehicle States: X,Y,Yaw,Vx,Vy,YawRate
- Tire Forces: Fx_ij,Fy_ij (i=1:2,j=1:2)
关键参数同步代码:
matlab复制function sys = mdlOutputs(t,x,u)
% 从CarSim输入中提取状态
yaw = u(3); vy = u(5); yaw_rate = u(6);
% 更新LPV参数
global rho;
rho = 1/norm([u(4),u(5)]);
% 控制器输出
sys = [delta_f; Mz];
end
4.2 典型工况测试结果
在双移线工况下(初始速度22m/s),系统表现如下:
| 指标 | 数值 | 标准要求 |
|---|---|---|
| 最大横向误差 | 0.28m | <0.35m |
| 横摆角超调量 | 2.1° | <5° |
| 加速度峰值 | 0.38g | <0.4g |
| 转向盘转速峰值 | 108°/s | <120°/s |
调试经验:当车速超过25m/s时,建议在RMPC的代价函数中增加纵向速度误差项,可有效抑制加速过程中的横向失稳。
5. 常见问题与解决方案
5.1 实时性不足问题
现象:仿真中出现"计算超时"警告
排查步骤:
- 检查MATLAB版本(必须≥2020a)
- 验证CVX的license有效性
- 使用tic/toc测量各模块耗时
典型优化方案:
- 将LMI求解改为离线查表法
- 对A矩阵进行Schur分解预处理
- 启用MATLAB的并行计算功能
5.2 CarSim数据不同步
现象:Simulink接收到的车速信号存在跳变
解决方法:
- 在CarSim的Solver设置中将插值方法改为"Quadratic"
- 在Simulink的CarSim接口模块前添加10ms的延时补偿
- 检查cpar文件中的车辆参数是否一致
5.3 轮胎进入非线性区
识别特征:
- 横向误差突然增大
- 横摆角出现持续振荡
应对策略:
- 在RMPC约束中增加轮胎力椭圆限制
- 引入滑模观测器进行摩擦力估计
- 触发降级控制(如ESP介入)
6. 工程实现建议
经过多次实车参数标定,总结出以下经验:
- 侧偏刚度标定:建议在干燥沥青路面进行30-100km/h的阶跃转向测试
- 权重系数整定:先固定w2=0.2,调整w1直到横摆角跟踪误差<3°
- 实时性验证:在工控机(i7-1185G7以上)上可稳定运行100Hz控制频率
文件部署注意事项:
- 将mdl模型中的S-function编译为mex文件
- CarSim的cpar文件需要与MATLAB工作目录一致
- 出图脚本依赖MATLAB的Mapping Toolbox
这套系统在后续扩展中,可以考虑加入:
- 基于视觉的路径预测模块
- 考虑路面坡度影响的LPV参数调整
- 与自动驾驶规划层的接口设计