CACC 协同式自适应巡航模型(仿真软件版本:Carsim2016,Matlab2018b及以上) 搭建四辆车在carsim和simulink进行协同式自适应巡航,其中间距策略考虑领航车速的影响,各个车辆采用分层式控制,分层式控制器主要分为下层控制(使用车辆逆纵向动力学模型(包括逆发动机模型 ))和上层控制(模糊MPC算法对相对距离,相对速度,加速度等进行调节,其中模糊逻辑对MPC的权重系数进行在线调整,stateflow进行模式切换),实现定速巡航和车队跟随工况。 附带详细学习资料,适合入门自适应巡航,协同式自适应巡航,自动驾驶纵向控制,同时学习模型预测控制算法和模糊推理方法。

在高速公路上四辆车自动保持紧密队形,前车急刹时整个车队像弹簧缓冲般平稳降速——这种魔法般的协同控制背后,是分层控制器在玩转车辆动力学。今天我们解剖一个用Carsim和Simulink搭建的CACC协同巡航模型,手把手拆解油门刹车背后的控制逻辑。

!分层控制架构示意图

(示意图:上层模糊MPC与下层逆动力学协同工作)

油门刹车的底层密码

CACC 协同式自适应巡航模型(仿真软件版本:Carsim2016,Matlab2018b及以上) 搭建四辆车在carsim和simulink进行协同式自适应巡航,其中间距策略考虑领航车速的影响,各个车辆采用分层式控制,分层式控制器主要分为下层控制(使用车辆逆纵向动力学模型(包括逆发动机模型 ))和上层控制(模糊MPC算法对相对距离,相对速度,加速度等进行调节,其中模糊逻辑对MPC的权重系数进行在线调整,stateflow进行模式切换),实现定速巡航和车队跟随工况。 附带详细学习资料,适合入门自适应巡航,协同式自适应巡航,自动驾驶纵向控制,同时学习模型预测控制算法和模糊推理方法。

车辆逆动力学模型就像老司机踩油门的肌肉记忆。这段代码计算特定加速度需求对应的油门/刹车开度:

function [throttle, brake] = InverseLongitudinal(ax, vx)
    % 查表法获取基础扭矩
    engine_map = xlsread('EngineData.xlsx'); 
    available_torque = interp2(engine_map.RPM, engine_map.Throttle,...
                              engine_map.Torque, current_rpm, 100);
    
    % 考虑传动损耗
    effective_torque = available_torque * 0.85 - vx*0.2; 
    
    % 制动逻辑切换
    if ax < -3.0
        brake = (-ax - 3.0)/2.0 * 100;
        throttle = 0;
    else
        brake = 0;
        throttle = ax / max_accel * 100; 
    end
end

代码里的三维插值表藏着发动机的脾气,0.85的传动损耗系数是拆解实车数据得来的经验值。当需求加速度超过-3m/s²时触发紧急制动,这个阈值比传统ACC更激进——毕竟车队协同需要更快的响应速度。

会学习的MPC控制器

上层控制器的核心是个会自我调整的模糊MPC。与传统MPC不同,我们在代价函数里加入了动态权重:

% 模糊规则片段
addRule(fis, "If spacing_error is large then weight_accel low", 1);
addRule(fis, "If velocity_error is positive then weight_jerk high", 2);

% MPC权重在线调整
Q_weights = evalfis(current_state, fis);
mpcObj.Weights.OutputVariables = [Q_weights(1) Q_weights(2) 0.5];

当跟车间距过大时自动降低加速度权重,相当于控制策略从"温柔跟车"切换为"紧急追赶"。在Simulink中用Stateflow实现模式切换,这个状态机构成了控制器的决策大脑:

state CruiseControl
    when acceleration_demand < 0.1g enter FollowingMode
    when lead_vehicle_brake_lights == true enter EmergencyMode
end

实车调试才知道的坑

  1. Carsim的纵向动力学模型对油门响应存在80ms延迟,在Matlab侧需要提前做相位补偿
  2. 四车通信时延超过200ms会导致队列失稳,需要设计预测补偿器
  3. 逆模型中的轮胎滑移率补偿系数在雨天工况要动态调整

!仿真结果对比

(图示:传统ACC与CACC在弯道工况下的间距控制对比)

新手入门包

  • 《车辆动力学与控制》第五章纵向动力学
  • MATLAB MPC工具箱案例mpccut-in
  • 经典论文《Cooperative Adaptive Cruise Control in Real Traffic Situations》
  • Carsim纵向控制接口开发手册(重点看第7章S-Function集成)

建议从单车逆模型调试开始,先让车辆能精准跟踪目标加速度,再逐步增加通信模块。遇到队列震荡问题时,试试在MPC代价函数里加入加速度变化率约束——这招能有效抑制"抖动传染"。

Logo

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

更多推荐