在自动驾驶领域,模型预测控制(MPC)因其出色的多目标优化能力和约束处理特性,已成为路径跟踪和动态避障的主流解决方案。不同于传统的PID控制需要分层设计轨迹规划与跟踪模块,MPC能够将车辆动力学约束、障碍物避让和安全边界直接整合到优化问题中,实现"规划-控制"一体化求解。本文将基于Matlab的ACADO工具包,详细解析一个完整的车道保持与动态避障MPC控制器的实现过程。
ACADO作为专为最优控制设计的开源工具包,其优势在于提供了从建模、优化到代码生成的完整工具链。我们采用的二自由度自行车模型虽然结构简单,但配合精心设计的代价函数和约束条件,在60km/h速度下可实现小于15cm的路径跟踪精度。特别值得注意的是,该系统在面对突发障碍物时表现出的类人决策特性——通过代价函数中安全性与舒适性的权重博弈,能够做出"轻微压线优于急转向"的合理选择。
在车辆横向控制领域,二自由度自行车模型因其计算效率与足够精度成为首选。该模型假设车辆只有前后两个轮,且忽略悬架运动和轮胎侧向力的非线性特性。我们定义的状态向量包含四个关键变量:
对应的微分方程在ACADO中实现如下:
matlab复制f = acado.DifferentialEquation();
f.add(dot(psi) == (v / L) * tan(delta)); % 横摆角动态
f.add(dot(e) == v * sin(psi + beta)); % 侧向误差动态
f.add(dot(v) == a); % 纵向加速度
f.add(dot(delta) == w); % 转向角速度
关键参数说明:
- L:车辆轴距(实测车辆为2.8m)
- beta:后轮侧偏角,通过beta = atan(0.5*tan(delta))近似计算
- a:纵向加速度(控制输入)
- w:前轮转向角速度(控制输入)
在原型开发阶段,我们采用线性轮胎模型近似计算侧偏角,这虽然会损失部分非线性特性,但能显著降低计算复杂度。实际部署时建议升级为Pacejka魔术公式:
matlab复制% Pacejka魔术公式示例(需配合轮胎参数表)
Fy = D*sin(C*atan(B*alpha - E*(B*alpha - atan(B*alpha))));
对于实时性要求高的场景,可采用预计算查表法平衡精度与效率。我们的测试表明,在干燥路面条件下,简化模型与完整魔术公式的轨迹偏差小于8%,满足初期开发需求。
MPC性能对时域参数极为敏感。经过大量实车测试,我们确定以下黄金组合:
这种配置下预测时域覆盖2.25秒,既能捕捉足够长的运动趋势,又将优化问题维度控制在合理范围。在Intel i5-8250U处理器上,单次求解时间可稳定在30ms以内。
代价函数是MPC的"大脑",我们的设计遵循"安全>舒适>能耗"的优先级:
matlab复制Q = blkdiag(10, 50, 1, 0.1); % 状态权重:[横摆角, 侧向误差, 速度, 转向角]
R = diag([0.5, 3]); % 控制权重:[加速度, 转向角速度]
权重分配背后的工程考量:
为保证控制频率不低于30Hz,我们采用以下加速策略:
matlab复制ocp.set('MAX_NUM_ITERATIONS', 4); % 限制迭代次数
ocp.set('PRINTLEVEL', 'NONE'); % 关闭求解器输出
ocp.set('INTEGRATOR_TYPE', 'INT_IRK'); % 使用隐式Runge-Kutta积分器
实测表明,限制迭代次数至4次仅导致性能损失约5%,但计算耗时降低40%。这种权衡在实时控制中通常是值得的。
相较于传统的矩形约束,椭圆形安全区域更符合车辆运动学特性:
matlab复制for i = 1:N
mpc.subjectTo( (x(i)-obs_x)^2/a^2 + (y(i)-obs_y)^2/b^2 >= 1 );
end
参数选择原则:
针对突然切入的障碍物,系统采用分级响应机制:
这种策略使得系统在测试中成功处理了60km/h下的cut-in场景,最大横向加速度控制在0.3g以内。
ACADO支持自动C代码生成,极大简化嵌入式移植:
matlab复制code_export = acado.CodeExport();
code_export.set('HESSIAN_APPROXIMATION', 'GAUSS_NEWTON');
code_export.set('GENERATE_TEST_FILE', 'NO');
在NVIDIA Xavier上的性能表现:
| 场景 | 速度(km/h) | 最大误差(cm) | 转向抖动(deg/s) |
|---|---|---|---|
| 直线车道保持 | 60 | 6.2 | 2.1 |
| 90度弯道 | 40 | 12.8 | 4.7 |
| 障碍物绕行 | 50 | 18.5 | 6.3 |
| 紧急避障 | 60 | 23.1 | 9.8 |
超调震荡问题:最初出现持续振荡,发现是控制时域(Nu)与预测时域(N)比例失调。修正为N/Nu≈3后稳定。
数值不稳定:当车速低于5km/h时,模型出现奇异点。添加速度下限约束解决。
障碍物误判:早期版本对静止车辆识别率低,通过融合雷达聚类数据改进。
实时性瓶颈:在树莓派4B上测试时发现无法满足实时要求,最终选择Xavier平台。
当前系统仍有一些待优化点:
在实车测试中我们发现一个有趣现象:当系统判断急转向可能导致侧滑时,会主动选择轻微压线(约10cm),这种类人决策机制正是MPC多目标优化的优势体现。未来将通过增加预测不确定性模型,进一步提升极端场景下的鲁棒性。