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

在自动驾驶辅助系统的开发中,主动避撞和ACC自适应巡航是两个硬核功能。今天咱们用Carsim+Simulink搭个联合仿真平台,手把手实现这两个功能。无需高配电脑,只要你的电脑能跑Carsim2016,跟着操作半小时就能看到车辆自动跟车和紧急制动的效果。

先看整体框架:Carsim负责车辆动力学仿真,Simulink里的MPC控制器根据前车距离实时计算期望加速度,再通过逆动力学模型转换为油门/刹车信号。这里最关键的当属切换控制逻辑——系统得在正常ACC和紧急制动模式之间丝滑切换。

![仿真架构示意图:Carsim输出本车与前车状态数据给Simulink,经过MPC控制器计算后输出控制量,通过逆动力学模型转换为油门刹车信号回传Carsim]

先说逆动力学模型这个黑科技,它的任务是把期望加速度翻译成发动机扭矩和制动压力。咱们用了个分段函数来处理油门和刹车的切换:

function [throttle, brake] = fcn(desired_acc)
    if desired_acc >= 0
        throttle = 0.85*(1 - exp(-3*desired_acc)); 
        brake = 0;
    else
        brake = -8*desired_acc;
        throttle = 0;
    end
end

这段代码用指数函数模拟了油门踏板响应特性,刹车则采用线性关系。实测时发现刹车系数8这个值需要根据具体车型标定,新手可以先用这个值试跑。

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

MPC控制器模块是整个系统的智慧大脑,这里直接调用Matlab自带的mpc模块。配置时要注意三个关键参数:

mpcobj.PredictionHorizon = 10;  % 预测步长
mpcobj.ControlHorizon = 2;       % 控制步长
mpcobj.Weights.OutputVariables = [0.1 10];  % 输出权重

新手常犯的错误是把预测步长设得太大,其实对于纵向控制来说,10步足够捕捉车辆运动趋势。权重参数的第二项是相对距离误差的权重,适当调大可以避免跟车时发生"鬼探头"。

切换逻辑部分用Stateflow做了个状态机,核心判断条件就两行:

if (D_rel - safe_distance) < 0.2*TTC  % TTC为碰撞时间
    mode = 'Emergency';
else
    mode = 'ACC';
end

这里采用TTC(Time to Collision)与相对距离双重判断,比单纯用距离阈值更可靠。注意0.2这个系数需要根据测试车辆的最大减速度调整,建议新手先用0.15-0.25区间试错。

联合仿真配置有个坑要注意:在Carsim的VS Commander里必须勾选"Real-time simulation"模式,否则会出现Simulink解算速度跟不上Carsim的情况。参数设置建议:

  • 仿真步长:0.02s
  • 通信周期:0.1s
  • 车辆模型选Sedan_2015这个自带模板就够用

测试时发现个有趣现象:当目标车突然切入时,MPC控制器会在0.3秒内将油门开度从40%降到5%,同时刹车压力线性增长到2MPa。这个过程产生的减速度曲线非常接近老司机的操作节奏,说明逆动力学模型的转换效果靠谱。

最后给新手三个调试建议:

  1. 先关闭MPC用阶跃信号测试逆模型
  2. 调整权重参数时每次只改一个变量
  3. 在Carsim的动画界面按空格键可以暂停查看实时数据

完整工程文件已打包(包含7个关键子系统模型和Carsim参数文件),建议从ACC稳态跟车工况开始练手。当看到自己的控制器能稳稳保持20米车距时,那种成就感绝对比通关游戏还带劲!

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐