自适应巡航ACC控制或纵向跟车避撞控制为分层式控制上层控制得到期望加速度下层控制得到对应的期望制动压力和节气门开度。 上层控制首先建立考虑前车加速度扰动的离散跟车运动学模型然后建立了基于反馈校正的跟车预测模型接着引入松弛因子与多目标优化求解最后是基于模糊控制的权重系数调整这是该模型中最重要的一点当MPC目标函数中的权重系数取为定值时难以适应复杂多变的道路交通环境通过根据跟车性、安全性、舒适性以及经济性的偏重程度来设计相对应的权重系数调整策略可以改善跟车避撞系统对交通环境的适应性参考其他资料自己搭建的模糊控制规则得到可变权重这也是ACC控制不同于网上烂大街的普通ACC控制的独特所在设置了合理的模糊规则基本论域、模糊集论域、量化因子比例因子调整的权重主要有车间距误差权重系数q_Δd、两车相对速度权重系数q_vrel和自车加速度权重系数q_ar而把自车跃度q_jr设置为常量若q_jr也为变权重系数时会使得模糊控制系统过于复杂易不稳定。 控制效果前车变速行驶输入时车间距、相对速度、自车的加速度、跃度、期望制动压力和节气门开度均能在满足多目标约束的条件下平稳进行变化总仿真时间为90s自车初始车速为40km/h前车以50~70km/h的正弦速度变化行驶自车先进行加速超过前车车速再进行减速行驶最终实现平稳跟车仿真效果较好各个权重系数变化也较为平坦的变化。 Matlab/Simulink版本:2021a Carsim版本2019.0 有完整的运行视频。 提供参考资料。在高速公路上开车最烦人的是什么不是堵车是前车突然加速又急刹。这时候如果有一套聪明的ACC系统能像老司机一样预判前车动作那该多香今天咱们来扒一扒这种“带脑子”的ACC控制是怎么炼成的。一、分层控制先定战略再搞执行ACC控制分上下两层上层是决策大脑负责算期望加速度下层是执行机构把加速度翻译成刹车压力和油门开度。这就像老板定KPI员工拆解任务——但关键在于老板的KPI不能拍脑袋定。上层控制的核心是一个带前车加速度扰动的离散模型。举个栗子假设前车在搞正弦波速度50-70 km/h反复横跳自车得用预测模型预判未来几秒的车间距变化。这里的关键是引入了松弛因子简单说就是给优化问题留点弹性空间防止数学上无解毕竟现实路况哪能处处完美。% 离散模型预测示例简化版 Np 10; % 预测步长 for k1:Np x_pred(:,k1) A*x_pred(:,k) B*u_pred(k) D*d_disturbance(k); end % 松弛因子λ处理约束冲突 lambda 0.1; H H lambda*eye(size(H)); % 修正Hessian矩阵二、模糊控制让权重学会“看人下菜碟”传统ACC的硬伤在于目标函数权重固定——车间距误差、相对速度、自车加速度这些参数的重要性在堵车和高速场景下能一样吗于是乎模糊控制来救场了。我们设计了三个动态权重q_Δd间距误差权重q_vrel相对速度权重q_ar自车加速度权重而跃度jerk权重q_jr保持固定。为啥不调它因为实验发现动态调整跃度会让系统像喝了假酒一样抖个不停。自适应巡航ACC控制或纵向跟车避撞控制为分层式控制上层控制得到期望加速度下层控制得到对应的期望制动压力和节气门开度。 上层控制首先建立考虑前车加速度扰动的离散跟车运动学模型然后建立了基于反馈校正的跟车预测模型接着引入松弛因子与多目标优化求解最后是基于模糊控制的权重系数调整这是该模型中最重要的一点当MPC目标函数中的权重系数取为定值时难以适应复杂多变的道路交通环境通过根据跟车性、安全性、舒适性以及经济性的偏重程度来设计相对应的权重系数调整策略可以改善跟车避撞系统对交通环境的适应性参考其他资料自己搭建的模糊控制规则得到可变权重这也是ACC控制不同于网上烂大街的普通ACC控制的独特所在设置了合理的模糊规则基本论域、模糊集论域、量化因子比例因子调整的权重主要有车间距误差权重系数q_Δd、两车相对速度权重系数q_vrel和自车加速度权重系数q_ar而把自车跃度q_jr设置为常量若q_jr也为变权重系数时会使得模糊控制系统过于复杂易不稳定。 控制效果前车变速行驶输入时车间距、相对速度、自车的加速度、跃度、期望制动压力和节气门开度均能在满足多目标约束的条件下平稳进行变化总仿真时间为90s自车初始车速为40km/h前车以50~70km/h的正弦速度变化行驶自车先进行加速超过前车车速再进行减速行驶最终实现平稳跟车仿真效果较好各个权重系数变化也较为平坦的变化。 Matlab/Simulink版本:2021a Carsim版本2019.0 有完整的运行视频。 提供参考资料。模糊规则库是灵魂所在。比如当间距误差大时qΔd自动升高系统更关注缩短车距而相对速度突增时qvrel权重上调避免追尾。这相当于给控制器装了个“场景感知器”。% 模糊逻辑设计片段 fis mamfis(Name,ACC_Weight); fis addInput(fis,[-1 1],Name,Δd_error); % 间距误差归一化 fis addMF(fis,Δd_error,trimf,[-1 -0.5 0],Name,Negative); fis addMF(fis,Δd_error,trimf,[-0.5 0 0.5],Name,Zero); fis addMF(fis,Δd_error,trimf,[0 0.5 1],Name,Positive); % 规则示例IF Δd_error大 AND vrel小 THEN 提升q_Δd rule1 If Δd_error is Positive and vrel is Small then q_Δd is High;三、仿真实战前车蛇皮走位自车稳如老狗在CarsimSimulink联合仿真中前车以50-70 km/h玩正弦速度自车初始速度40 km/h。90秒内自车先是加速追赶超过前车后平顺减速最终稳定跟车。几个关键看点车间距曲线平滑无超调像德芙一样丝滑加速度变化率跃度控制在±0.3 m/s³以内乘客不会晕车权重系数过渡自然没有跳变——说明模糊规则没抽风。!仿真结果示意图权重系数变化曲线注此处应有实际仿真曲线图中q_Δd在加速阶段降低减速阶段升高四、避坑指南那些年我们踩过的雷论域缩放别头铁间距误差从米级缩放到[-1,1]时量化因子得仔细调否则模糊规则直接变摆设规则数量别贪多最初搞了49条规则结果Simulink实时性炸了精简到15条反而效果更好Carsim接口小心采样率Simulink 2021a和Carsim 2019.0的时钟同步一旦出错车辆模型会鬼畜抽搐。最后放个彩蛋在调试过程中发现如果给q_jr也加上模糊调整仿真动画里的车会跳起“科目三”——所以有些参数真的不能乱动啊手动狗头参考资料实际项目调参经验 《车辆动力学控制》余志生著第8章 Carsim官方文档S函数接口部分