基于模型预测控制(自带的mpc模块)和最优控制理论的Carsim与Matlab/simulink联合仿真实现汽车主动避撞和跟车功能(acc自适应巡航),包含simulink模型(其中有车辆逆纵向动力学模型、逆发动机模型、切换控制逻辑等),Carsim模型,资料。 (最好用Carsim2016版本及以上版本,模型不是很难,适合新手初步学习)


用Carsim+Simulink搞懂主动避撞和ACC开发

最近在折腾基于模型预测控制(MPC)的汽车主动避撞和自适应巡航(ACC),用Carsim和Simulink联合仿真跑通了整个流程。这里分享一些实现思路和代码片段,适合刚接触车辆控制的新手入门。


整体框架:联合仿真怎么搭?

整个系统分为三个部分:Carsim车辆模型Simulink控制器切换逻辑模块。Carsim负责输出车辆状态(车速、加速度、前车距离等),Simulink根据这些数据计算控制量(油门/刹车),再回传给Carsim驱动车辆。核心是MPC控制器和逆纵向动力学模型的配合。

!Simulink联合仿真结构图

基于模型预测控制(自带的mpc模块)和最优控制理论的Carsim与Matlab/simulink联合仿真实现汽车主动避撞和跟车功能(acc自适应巡航),包含simulink模型(其中有车辆逆纵向动力学模型、逆发动机模型、切换控制逻辑等),Carsim模型,资料。 (最好用Carsim2016版本及以上版本,模型不是很难,适合新手初步学习)

(示意图:Carsim输出→MPC控制器→逆动力学模型→Carsim输入)


Simulink里的关键模块

1. 逆纵向动力学模型

想要控制油门刹车,得先知道“踩多少油门能输出多少加速度”。这里用查表法+PID补偿:

% 逆发动机模型查表(部分代码)
throttle_map = interp2(engine_speed_map, engine_torque_map, throttle_table, current_speed, desired_torque);
% PID补偿加速度误差
acc_error = desired_acc - actual_acc;
throttle_pid = pid(0.5, 0.1, 0.02);
throttle_correction = throttle_pid(acc_error);

为什么用查表? 实车标定数据直接拿来用最省事,PID只是为了弥补模型误差。

2. MPC控制器设计

MPC的核心是预测未来多步的状态并求解最优控制量。用Matlab自带的mpc模块,重点在权重设置:

mpcobj.Weights.OutputVariables = [1 0.5]; % 跟踪距离+速度
mpcobj.Weights.ManipulatedVariablesRate = 0.1; % 控制量平滑

新手注意:预测步长别设太大(10步左右),否则求解慢到怀疑人生。

3. 切换控制逻辑

ACC和紧急避撞的切换逻辑用Stateflow实现:

% 状态切换条件(伪代码)
if (前车距离 < 安全距离) && (相对速度 > 阈值)
    switch_to_AEB(); % 切主动刹车
else
    keep_ACC(); % 保持跟车
end

经验:阈值别照搬论文,实际仿真中反复调才能避免“幽灵刹车”。


Carsim模型配置

  1. 车辆参数:轴距、质心高度、轮胎参数按实车设置(懒得找数据的话用默认也行);
  2. 传感器模型:前车距离用Carsim自带的“Path Follower”模块模拟;
  3. 接口设置:输入输出变量绑定到Simulink(重点检查单位是否统一!)。

!Carsim接口配置截图


仿真效果与调参血泪史

  • 跟车场景:前车变速时ACC的响应延迟明显,把MPC的输出权重从[1,1]改成[3,1]后跟踪更紧;
  • 紧急避撞:最初总在临界距离刹不住,后来发现是逆动力学模型的查表范围没覆盖高减速度区;
  • 联合仿真崩溃:Carsim和Simulink的仿真步长不一致会导致数据不同步,建议都设为0.01s。

!跟车仿真结果

(示意图:本车速度/前车距离跟踪效果)


资料与模型获取

完整Simulink模型(含切换逻辑、逆动力学)、Carsim模型文件、参数表已打包,关注公众号【XX实验室】回复“ACC避撞”下载。建议先跑通demo再逐模块修改,遇到仿真报错优先检查信号线数据类型——别问我怎么知道的🙃

(注:本文代码适用于Carsim2016+Matlab2018a及以上版本)

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐