1. 项目背景与问题定义
在高速自动驾驶场景中,车辆突然遇到前方1.5米宽的障碍物是典型的紧急避障工况。当车速达到120km/h(约33.3m/s)时,留给系统的反应时间极为有限。传统PID控制或三次多项式轨迹规划在这种工况下容易产生以下问题:
- 加速度突变导致乘客不适(jerk值超标)
- 轨迹曲率不连续引发车辆失稳
- 控制指令延迟造成避障失败
我们采用五次多项式结合模型预测控制(MPC)的方案,在CarSim+Simulink联合仿真环境中实现了:
- 满足车辆动力学约束的连续平滑轨迹
- 横向加速度控制在0.3g以内
- 方向盘转角变化率≤200°/s
- 全程耗时<2.5秒完成避障
2. 五次多项式轨迹生成原理
2.1 基础数学模型
五次多项式轨迹方程:
y(x) = a₅x⁵ + a₄x⁴ + a₃x³ + a₂x² + a₁x + a₀其各阶导数:
y' = 5a₅x⁴ + 4a₄x³ + 3a₃x² + 2a₂x + a₁ y'' = 20a₅x³ + 12a₄x² + 6a₃x + 2a₂ y''' = 60a₅x² + 24a₄x + 6a₃2.2 边界条件设置
针对120km/h避障场景:
初始状态(t=0): x₀=0, y₀=0 y'₀=0 (车身与道路平行) y''₀=0 (无初始横向加速度) 终止状态(t=2.4s): x₁=80m (制动距离) y₁=3.5m (安全避障余量) y'₁=0 (回正车身) y''₁=0 (消除横向加速度)2.3 矩阵求解
构建方程组:
[ 0 0 0 0 0 1 ] [a₀] [ 0 ] [ 0 0 0 0 1 0 ] [a₁] [ 0 ] [ 0 0 0 2 0 0 ] [a₂] = [ 0 ] [t₁⁵ t₁⁴ t₁³ t₁² t₁ 1 ] [a₅] [y₁] [5t₁⁴ 4t₁³ 3t₁² 2t₁ 1 0 ] [a₄] [ 0 ] [20t₁³ 12t₁² 6t₁ 2 0 0 ] [a₃] [ 0 ]使用Matlab求解:
A = [0 0 0 0 0 1; ...]; b = [0;0;0;y1;0;0]; coeff = A\b;3. MPC控制器设计
3.1 车辆动力学模型
采用自行车模型:
ẋ = v*cos(θ) ẏ = v*sin(θ) θ̇ = v*tan(δ)/L其中L=2.8m为轴距,δ为前轮转角。
3.2 预测时域优化
配置参数:
mpcobj = mpc(car_plant, Ts, p, m); mpcobj.PredictionHorizon = 20; % 1.2秒 mpcobj.ControlHorizon = 5; mpcobj.Weights.OutputVariables = [1 0.1]; mpcobj.Weights.ManipulatedVariablesRate = 0.01;3.3 约束条件
mpcobj.MV(1).Min = -0.6; % 前轮转角限制(rad) mpcobj.MV(1).Max = 0.6; mpcobj.OV(1).Min = -3.5; % 横向位置约束(m) mpcobj.OV(1).Max = 3.5;4. CarSim-Simulink联合仿真
4.1 接口配置
- CarSim输出:
- 车辆状态(x,y,θ,v)
- 轮胎力数据
- Simulink输入:
- 方向盘转角指令
- 制动压力指令
4.2 联合仿真步骤
% 初始化 csim_init = loadsol('veh_model.sim'); simIn = Simulink.SimulationInput('mpc_carsim'); % 运行 simOut = sim(simIn); % 数据导出 logsout = simOut.get('logsout');5. 关键性能指标验证
| 指标 | 要求值 | 实测值 |
|---|---|---|
| 最大横向加速度 | ≤0.3g | 0.28g |
| 方向盘转速 | ≤200°/s | 185°/s |
| 避障完成时间 | <2.5s | 2.36s |
| 与障碍物最小距离 | ≥0.5m | 0.72m |
| 轨迹跟踪误差 | <0.2m | 0.15m |
6. 实际调试经验
采样周期选择:
- 初始设为0.1s导致控制滞后
- 优化至0.05s后跟踪误差降低40%
权重调整技巧:
- 输出权重过大会导致方向盘抖动
- 最终采用3:1的轨迹跟踪/控制量权重比
CarSim参数匹配:
- 轮胎模型选用Pacejka 2002
- 悬架刚度需与实车数据校准
重要提示:在高速场景下,MPC的预测时域不宜超过1.5秒,否则会引入过多预测误差。建议采用自适应时域策略,当车速>80km/h时自动缩短时域20%。