共计 1266 个字符,预计需要花费 4 分钟才能阅读完成。
背景与痛点
自动驾驶仿真中,速度控制面临诸多挑战:

- 车辆动力学非线性强,传统 PID 控制难以适应复杂场景
- 需兼顾舒适性、安全性和燃油经济性等多目标
- 实时性要求高,控制器必须在毫秒级完成计算
MPC(模型预测控制)因其独特的优势成为理想解决方案:
- 基于模型预测未来状态,提前优化控制量
- 显式处理多输入多输出系统
- 天然支持约束条件(如加速度限制)
环境配置
软件准备
- CarSim 2021.1 或更新版本
- MATLAB R2021a+(需安装 Control System Toolbox 和 MPC Toolbox)
- CarSim S-Function 接口插件
关键配置步骤
- 在 CarSim 中新建 VehicleSim 模块
- 设置 MATLAB 工作路径包含 CarSim 的 API 文件夹
- 运行
carsim_lib命令加载接口库 - 检查 Simulink 库中是否出现 CarSim Blockset
模型搭建
MPC 控制器设计流程
-
建立车辆纵向动力学状态空间模型:
% 示例:简化的纵向模型 A = [0 1; 0 -1/τ]; % τ 为时间常数 B = [0; k/τ]; % k 为增益 C = eye(2); D = zeros(2,1); sys = ss(A,B,C,D); -
配置 MPC 控制器对象:
mpcobj = mpc(sys, Ts, p, m); % Ts- 采样时间, p- 预测时域, m- 控制时域 -
设置约束条件:
mpcobj.MV.Min = -3; % 最小加速度(m/s²) mpcobj.MV.Max = 2; % 最大加速度
Simulink 模型结构
- CarSim Vehicle 模块作为被控对象
- MPC Controller 模块作为核心算法
- 参考速度输入使用 Signal Builder 生成
- 输出信号通过 Scope 和 To Workspace 记录
参数调优经验
关键参数影响
- 预测时域(p):
- 值过小:预见性不足,易出现超调
-
值过大:计算负担增加,建议 10-20 步
-
控制时域(m):
- 通常取预测时域的 1 /3~1/2
-
对实时性影响显著
-
权重矩阵:
mpcobj.Weights.OV = [1 0.1]; % 输出权重 mpcobj.Weights.MV = 0.01; % 控制量权重
调优步骤
- 先调输出权重保证跟踪性能
- 再调控制量权重平滑加速度
- 最后微调约束边界
避坑指南
常见问题与解决
- 实时性不足:
- 减少预测时域长度
-
使用 mpcmoveCodeGeneration 加速
-
模型失配:
- 在 CarSim 中校准车辆参数
-
增加 MPC 鲁棒性权重
-
数值不稳定:
- 检查采样时间与车辆动力学匹配
- 确认状态量单位统一
性能测试
典型测试场景
- 阶跃响应测试(0→60km/h)
- 正弦跟踪测试
- 前车急刹场景
结果分析指标
- 速度跟踪误差(RMSE)
- 加速度变化率(舒适性)
- 最大超调量
- 单步计算耗时
总结与拓展
完成基础速度控制后,可进一步探索:
- 集成横向控制实现轨迹跟踪
- 加入交通参与者构建复杂场景
- 结合 V2X 信息进行协同控制
建议从官方示例 MPC_CarSim_Demo.slx 入手,逐步修改参数观察影响。遇到问题时,善用 MATLAB 的 MPC 调试工具:
mpcobj = mpc(...);
view(mpcobj); % 可视化控制器结构
实践过程中建议保持版本备份,每次只修改一个参数并记录效果。欢迎在评论区分享你的调参心得!
正文完
