当前位置: 首页 > news >正文

紧急制动(AEB )模型,Carsim与Simulink联合仿真。 车辆行驶过程中,利用主动制动的方式躲避前方障碍物。主要利用制动安全距离进行判断

紧急制动(AEB )模型,Carsim与Simulink联合仿真。
车辆行驶过程中,利用主动制动的方式躲避前方障碍物。主要利用制动安全距离进行判断,并利用车辆逆动力学模型进行制动主缸压力计算。
TTC算法计算
安全距离模型
版本:simulink有多个版本,carsim2019

该方案包含以下核心模块:
TTC(碰撞时间)计算与安全距离模型:判断是否需要触发制动。
车辆逆动力学模型:根据期望减速度计算所需的制动主缸压力。
CarSim 接口设置:定义输入输出变量。

🚗 1. 理论基础与数学模型

TTC 与安全距离模型
AEB 的触发逻辑基于碰撞时间 (TTC) 和最小安全距离 (d_{safe})。

TTC 计算公式:
TTC = frac{d_{rel}}{v_{rel}}
其中:
d_{rel}:自车与障碍物的相对距离。
v_{rel}:自车与障碍物的相对速度 (v_{ego} - v_{target})。

安全距离模型:
为了误触发,通常设定一个动态安全阈值。如果实际距离 d_{rel} le d_{safe},则触发制动。
d_{safe} = d_{0} + v_{ego} cdot t_{react} + frac{v_{ego}^2}{2 cdot a_{max}} - frac{v_{target}^2}{2 cdot a_{target}}
简化版(假设前车静止或匀速,且关注自车完全停止):
d_{safe} = v_{ego} cdot t_{delay} + frac{v_{ego}^2}{2 cdot a_{comfort}}
其中 t_{delay} 为系统响应延迟,a_{comfort} 为舒适减速度。

车辆逆动力学模型 (制动压力计算)
利用纵向动力学方程反推制动主缸压力 (P_{mc})。

纵向运动方程:
F_{total} = m cdot a_{req} = F_{brake} + F_{drag} + F_{roll}

忽略风阻和滚动阻力(或作为扰动处理),主要制动力由制动器提供:
F_{brake} approx m cdot a_{req}

制动器力矩与压力的关系:
T_{brake} = F_{brake} cdot r_{eff} = 2 cdot mu cdot A_{piston} cdot P_{mc} cdot r_{eff} cdot eta(注:这里假设四轮制动,且前后轴分配比例简化处理,或者仅计算总需求)

反解主缸压力 P_{mc}:
P_{mc} = frac{m cdot a_{req}}{K_{brake_gain}}
其中 K_{brake_gain} 是制动系统的总增益系数(包含卡钳摩擦系数、活塞面积、轮胎半径等)。

💻 2. Simulink 模型搭建与代码逻辑

在 Simulink 中,你需要搭建一个包含 S-Function 或 MATLAB Function 的模块来实现上述逻辑。

步骤 A: CarSim 设置
打开 CarSim,选择 Full Vehicle 模型。
设置路面为平直路面。
设置前方有一个固定障碍物(或者使用 CarSim 的 “Target Vehicle” 功能,将其速度设为 0)。
进入 Simulink 菜单 -> Export to Simulink。
关键设置:
Input to Vehicle (从 Simulink 到 CarSim): 选择 BRAKE_PRESSURE (主缸压力,单位 bar 或 Pa)。
Output from Vehicle (从 CarSim 到 Simulink): 选择 V_X (车速), X_POS (纵向位置)。
注意:你需要定义障碍物的位置。如果 CarSim 内部没有直接输出障碍物距离,你可以在 Simulink 中定义一个常数作为障碍物位置,或者使用 CarSim 的 “3D Graphics” 中的目标车辆位置输出。

步骤 B: Simulink 控制策略代码 (MATLAB Function Block)

在 Simulink 中拖入一个 “MATLAB Function” 模块,并填入以下代码。这段代码实现了 TTC 判断和逆动力学压力计算。

function brake_pressure = AEB_Controller(V_ego, X_ego, V_target, X_target)
%#codegen
% 输入参数:
% V_ego: 自车速度 (m/s)
% X_ego: 自车纵向位置 (m)
% V_target: 目标障碍物速度 (m/s)
% X_target: 目标障碍物纵向位置 (m)
% 输出参数:
% brake_pressure: 制动主缸压力 (bar)

%% 1. 参数定义
m = 1500; % 车辆质量 (kg)
g = 9.81; % 重力加速度
a_max = 8; % 最大减速度 (m/s^2)
a_comfort = 4; % 舒适减速度/请求减速度 (m/s^2)
t_delay = 0.2; % 系统延迟时间 (s)
d_min = 5; % 最小停车距离 (m)

% 制动系统增益系数 (经验值,需根据具体车型标定) % 物理含义:1 bar 压力产生的纵向减速度 (m/s^2/bar) K_brake = 0.8;

%% 2. 计算相对状态
d_rel = X_target - X_ego; % 相对距离
v_rel = V_ego - V_target; % 相对速度

% 防止除零和负距离 if d_rel 0.1 TTC = d_rel / v_rel; else TTC = 999; % 相对速度为0或负,无碰撞风险 end

%% 3. 安全距离模型判断
% 计算动态安全距离
% 假设前车静止或速度较慢,主要考虑自车制动距离
d_safe = d_min + V_ego * t_delay + (V_ego^2) / (2 * a_comfort);

% 简单的 TTC 阈值判断 (例如 TTC 1.0 % 车速过低不触发 trigger_flag = true; end end

%% 4. 逆动力学计算制动压力
if trigger_flag
% 请求减速度 (这里简单设为舒适减速度,也可以根据距离误差做PID控制)
a_req = a_comfort;

% 逆模型:P = F / K % F = m * a_req % P (bar) = (m * a_req) / (100000 * K_factor) -> 简化为经验公式 % 使用增益 K_brake 直接计算 brake_pressure = (m * a_req) / (m * K_brake) * 10; %10 是为了模拟压力上升特性,纯理论应为 ma/K % 限制最大压力 (例如 120 bar) if brake_pressure > 120 brake_pressure = 120; end else brake_pressure = 0; end

end

🛠️ 3. 联合仿真连接图解

在 Simulink 的模型视图中,连接关系如下:

CarSim S-Function 模块:
Output Ports: 连接到信号总线,解出 V_ego (m/s), X_ego (m)。
Input Ports: 接收 Brake_Pressure。

障碍物模型 (Simulink Constant):
设置一个 Constant 模块代表障碍物位置 X_target (例如 100m)。
设置一个 Constant 模块代表障碍物速度 V_target (例如 0 m/s)。

AEB_Controller (MATLAB Function):
输入:来自 CarSim 的 V_ego, X_ego 以及上述的障碍物常数。
输出:计算出的 brake_pressure。

反馈回路:
将 brake_pressure 连接回 CarSim S-Function 的输入端口。

📊 4. 结果分析与调试建议

运行仿真后,观察以下 Scope 曲线:

相对距离 (d_{rel}): 应逐渐减小,但在接触障碍物前停止减小。
车速 (V_{ego}): 在触发 AEB 后,速度应呈现线性或平滑下降,直至为 0。
制动压力 (P_{mc}): 触发瞬间应有一个阶跃上升,随后保持稳定或根据控制策略调整。
TTC: 应看到 TTC 数值随时间下降,当触碰到阈值(如 2.5s)时,制动压力生效。

调试提示:
如果车辆停不下来:增大 K_brake 系数或增大 a_req。
如果制动太晚导致碰撞:减小 t_delay 或增大 t_delay 在安全距离公式中的权重,或者减小 ttc_threshold。
CarSim 版本兼容性:CarSim 2019 与较新版本的 Simulink 兼容良好,但需确保 CarSim 安装目录下的 carsim_sfun.mexw64 (Windows) 文件在 MATLAB 路径中。

📝 总结
该模型利用 TTC 和 安全距离 双重校验来触发 AEB,并通过简化的 逆动力学公式 (P = frac{m cdot a}{K}) 将期望减速度转化为 CarSim 可识别的制动压力。这种方法计算量小,实时性强,非常适合早期的控制策略验证。

AEB 决策逻辑代码 (TTC与安全距离)

这部分代码用于判断是否触发制动。请在 Simulink 中添加一个 MATLAB Function 模块,命名为 AEB_Controller,并粘贴以下代码:

function [brake_enable, target_decel] = AEB_Controller(rel_dist, rel_vel, v_ego)
% 输入:
% rel_dist: 相对距离 (m)
% rel_vel: 相对速度 (m/s), v_ego - v_target
% v_ego: 自车速度 (m/s)
% 输出:
% brake_enable: 制动触发标志 (0/1)
% target_decel: 目标减速度 (m/s^2)

% — 参数定义 —
TTC_Threshold = 2.5; % TTC 触发阈值 (秒)
D_Safety_Min = 10.0; % 最小安全距离硬阈值 (米)
Comfort_Decel = 6.0; % 舒适减速度/目标减速度 (m/s^2)

% 初始化输出
brake_enable = 0;
target_decel = 0;

% — 保护逻辑:防止除以0或负距离 —
if rel_dist > 0 && rel_vel > 0.1 % 只有在接近前车时才计算

% 1. 计算 TTC TTC = rel_dist / rel_vel; % 2. 计算理论安全距离 (简化模型) % 假设反应时间 0.5s,加上基于当前减速度的制动距离 D_Safety_Calc = (v_ego * 0.5) + (v_ego^2 / (2 * Comfort_Decel)); % 3. 综合判断逻辑 % 条件1: TTC 小于阈值 % 条件2: 实际距离 小于 理论安全距离 % 条件3: 实际距离 小于 最小硬阈值 (最后一道防线) if (TTC P_mc 逻辑。根据牛顿第二定律反推压力。请在 Simulink 中添加 MATLAB Function 模块,命名为 Inv_Dynamics:

function P_mc = Inv_Dynamics(a_req, v_ego)
% 输入:
% a_req: 请求的减速度 (正值, m/s^2)
% v_ego: 当前车速 (用于查表或修正,此处简化为常数参数)
% 输出:
% P_mc: 制动主缸压力 (bar)

% — 车辆参数 (需与CarSim一致) —
m = 1500; % 整车质量 kg
g = 9.81; % 重力加速度
f_r = 0.015; % 滚动阻力系数
r_wheel = 0.3; % 轮胎半径 m
K_brake = 2000; % 制动增益系数 (N/bar),这是一个标定值,需根据CarSim车型调整

% — 1. 计算所需总制动力 —
% F_total = m * a = F_brake + F_rolling_resistance (忽略风阻简化)
% F_brake = m * a - m * g * f_r
F_brake_needed = m * a_req - m * g * f_r;

% — 2. 考虑制动系统延迟 (一阶惯性环节近似) —
% 此处仅为静态映射,动态延迟建议在Simulink使用 Transfer Function 模块实现
% s -> P_mc 关系
% P_mc = F_brake / K_brake

if F_brake_needed 150
P_mc = 150;
end
end

Simulink 搭建与 CarSim 联合仿真设置

输入信号 (From CarSim):
你需要从 CarSim 导入:Vx (车速), X (位置), Target_Dist (相对距离,如果CarSim里有障碍物模型), Target_Vel。
在 Simulink 中使用 Inport 模块接收这些信号。

AEB 逻辑模块:
使用上述代码 1。
输入连接:rel_dist, rel_vel, v_ego。
输出:brake_enable (布尔值), target_decel。

逆动力学模块:
使用上述代码 2。
输入连接:target_decel (来自 AEB 模块), v_ego。
输出:P_mc (主缸压力)。

输出信号 (To CarSim):
将最终计算出的压力信号连接到 Outport 模块。
在 CarSim 的 Simulink Interface 设置中,确保该信号被映射到 Braking Main Cylinder Pressure。

http://www.jsqmd.com/news/609167/

相关文章:

  • 海思Hi3516DV500实战:从陀螺仪数据异常到稳定防抖,我踩过的那些坑(附完整调试命令)
  • 3分钟搞定Goods查询页:Map传参+StringUtils分割符实战(附避坑指南)
  • 网易云音乐体验升级:BetterNCM插件管理器全攻略
  • MyCLI:一个增强型MySQL命令行客户端
  • 去屑洗发水哪个效果好? - 中媒介
  • 终极启动盘制作工具:Deepin Boot Maker 完整使用指南
  • 高防服务器被攻击后 IP 被封?黑洞解封与清洗策略设置
  • 如何掌握递归与迭代:编程思维深度训练指南
  • Pretext:值得关注的文本排版引擎啡
  • 西门子S7-200 SMART高速计数器实战:从模式配置到脉冲精准捕获
  • 主席树实战:C++实现区间第K小查询(附动态图解与完整代码)
  • 安卓逆向浅浅范围
  • 高防服务器无法远程连接?端口、防火墙与安全组排查
  • 头发干枯毛躁用什么洗发水? - 中媒介
  • 掌握Vue 3日历组件实战:从业务场景到深度定制的全流程指南
  • 当cl软件节点标红无法上网的时候-可能是因为电脑的时间没有同步过来,可以通过右下角右键-调整日期和时间-点击立即同步即可同步北京时间-方法二,使用SyncTime-Aliyun.bat软件同步时间。-
  • 聚酰亚胺薄膜价格怎么样? - 中媒介
  • Git团队协作终极指南:10个提升项目可维护性的关键实践
  • [python]logging模块
  • 5大核心优势!Open Canvas对比OpenAI Canvas:开源AI协作工具如何重塑你的工作流
  • 1篇1章3节:AIGC的发展历程,迈向生成创造世界的关键突破
  • Omron NJ/NX程序:自动化控制与智能人机交互的集成
  • 婚纱照无隐形消费推荐? - 中媒介
  • 锌合金门厂家哪家强? - 中媒介
  • ncmdump终极指南:5分钟解锁网易云加密音乐,实现全设备自由播放
  • JointJS测试策略完整指南:单元测试与端到端测试的最佳实践
  • 深信服防火墙AF8.0实战配置指南:从零搭建安全防护体系
  • 表皮覆合设备供应商推荐? - 中媒介
  • 1篇1章4节:生成对抗网络GAN和图像生成领域的StyleGAN
  • 运维视角的测试:可观测性驱动的质量保障