1. 项目概述
在智能驾驶领域,车辆换道控制一直是核心挑战之一。作为一名从事车辆控制算法开发多年的工程师,我发现基于模型预测控制(MPC)结合五次多项式轨迹规划的方法,在实际应用中表现出色。这种方法不仅能实现平滑的换道轨迹跟踪,还能有效处理各种动态约束条件。
2. 五次多项式轨迹规划
2.1 为什么选择五次多项式
在车辆换道场景中,我们需要满足六个边界条件:
- 起点的横向位置、速度、加速度
- 终点的横向位置、速度、加速度
五次多项式恰好可以提供六个自由度来满足这些条件。具体来说,横向位移y(t)可以表示为:
y(t) = a0 + a1t + a2t² + a3t³ + a4t⁴ + a5t⁵
2.2 轨迹生成实现
在实际应用中,我们需要解以下线性方程组来获取多项式系数:
matlab复制% 边界条件设置
t0 = 0; tf = 5; % 换道时间5秒
y0 = 0; yf = 3; % 从0米换到3米
v0 = 0; vf = 0; % 起终点横向速度为0
a0 = 0; af = 0; % 起终点横向加速度为0
% 构建系数矩阵
A = [1 t0 t0^2 t0^3 t0^4 t0^5;
0 1 2*t0 3*t0^2 4*t0^3 5*t0^4;
0 0 2 6*t0 12*t0^2 20*t0^3;
1 tf tf^2 tf^3 tf^4 tf^5;
0 1 2*tf 3*tf^2 4*tf^3 5*tf^4;
0 0 2 6*tf 12*tf^2 20*tf^3];
% 构建边界条件向量
b = [y0; v0; a0; yf; vf; af];
% 求解多项式系数
coeff = A\b;
这样生成的轨迹具有以下特点:
- 位置、速度、加速度连续
- 最大加速度和加加速度(jerk)受控
- 符合人类驾驶习惯的S型曲线
3. MPC控制器设计
3.1 车辆动力学模型
我们采用二自由度单车模型作为预测模型:
状态量:
- 横向位移 y
- 横摆角 ψ
- 横向速度 vy
- 横摆角速度 r
控制量:
- 前轮转角 δ
离散化后的状态空间方程:
matlab复制% 参数定义
m = 1500; % 车辆质量(kg)
Iz = 2500; % 横摆转动惯量(kg·m²)
lf = 1.2; % 前轴到质心距离(m)
lr = 1.5; % 后轴到质心距离(m)
C_alpha_f = 80000; % 前轮侧偏刚度(N/rad)
C_alpha_r = 80000; % 后轮侧偏刚度(N/rad)
vx = 20; % 纵向速度(m/s)
% 离散化模型
dt = 0.1; % 控制周期0.1秒
A_k = [1 dt 0 0;
0 1 dt 0;
0 0 1 -vx*dt;
0 0 0 1];
B_k = [0; 0; C_alpha_f*dt/m; C_alpha_f*lf*dt/Iz];
3.2 优化问题构建
MPC的核心是求解以下优化问题:
min J = Σ(ey'Qey + eψ'Qeψ + Δδ'RΔδ)
subject to:
- 动力学约束
- 控制量约束
- 控制增量约束
实现代码:
matlab复制% 权重矩阵设置
Q = diag([100, 10]); % 横向误差权重100,角度误差权重10
R = 1; % 控制量变化权重
% 构建H矩阵
H = blkdiag(kron(eye(N),Q), kron(eye(Nc),R));
% 构建f向量
f = -[kron(ones(N,1),Q*Y_ref); zeros(Nc,1)];
% 约束条件
A_cons = [Aeq; Aineq];
b_cons = [beq; bineq];
% 求解
[delta_opt,~,exitflag] = quadprog(H,f,A_cons,b_cons,[],[],delta_min,delta_max);
4. CarSim联合仿真实现
4.1 接口配置
CarSim与Matlab/Simulink的联合仿真需要配置以下接口:
-
CarSim输出到Matlab:
- 车速vx
- 横向位置y
- 横摆角ψ
- 横摆角速度r
-
Matlab输出到CarSim:
- 前轮转角指令δ
4.2 关键配置项
- 单位系统:确保CarSim中设置为国际单位制
- 采样时间:与MPC控制周期保持一致(通常0.05-0.1s)
- 延迟补偿:考虑执行器延迟,可在Simulink中添加超前补偿
4.3 常见问题排查
-
车辆不按预期轨迹行驶:
- 检查坐标系定义是否一致
- 验证前轮转角方向符号
- 确认车辆参数与实际一致
-
仿真结果震荡:
- 调整MPC权重矩阵
- 检查轮胎模型是否进入非线性区
- 减小控制周期
-
求解器报错:
- 检查约束条件是否可行
- 降低预测时域N
- 尝试不同的QP求解器
5. 参数调试经验
5.1 权重参数调试
经过多次项目实践,总结出以下调试经验:
-
初始权重设置:
- 横向误差权重:100
- 角度误差权重:10
- 控制量变化权重:1
-
调整原则:
- 轨迹跟踪不准确 → 增大Q
- 控制量变化剧烈 → 增大R
- 响应过慢 → 减小R
5.2 预测时域选择
预测时域N的选择需要考虑:
- 计算能力:N越大计算量越大
- 车辆速度:高速时需要更长的预测时域
- 轨迹曲率:复杂轨迹需要更长的预测时域
建议从N=10开始调试,逐步增加至20-30。
6. 实际应用注意事项
-
执行器延迟:
实际车辆存在约100-200ms的执行延迟,需要在控制器设计中考虑。 -
路面附着系数:
不同路况下轮胎特性变化明显,建议增加μ估计模块。 -
传感器噪声:
实测数据通常包含噪声,需要设计合适的滤波器。 -
实时性保障:
MPC计算耗时需严格小于控制周期,可考虑:- 代码优化
- 使用更高效的QP求解器
- 降低预测时域
7. 扩展应用
基于此框架可以进一步开发:
-
避障功能:
- 在优化问题中添加障碍物约束
- 设计动态参考轨迹
-
自适应巡航:
- 集成纵向控制
- 考虑前车运动预测
-
极限工况控制:
- 非线性轮胎模型
- 考虑载荷转移
在实际项目中,我发现在干燥路面上,当车速低于60km/h时,这种控制方案能实现0.1m以内的轨迹跟踪精度。但在低附着路面或高速情况下,需要引入更复杂的轮胎模型和稳定性控制策略。