手把手教你学Simulink:智能车辆紧急制动辅助系统仿真
目录
手把手教你学Simulink:智能车辆紧急制动辅助系统仿真
一、背景介绍
二、所需工具和环境
三、步骤详解
步骤1:创建Simulink模型
步骤1.1:打开Simulink并新建模型
步骤2:设计车辆动力学模型
步骤2.1:添加车辆底盘模块
步骤2.2:添加纵向控制模块
步骤2.3:连接各模块
步骤3:设计传感器数据采集模块
步骤3.1:添加传感器模块
步骤3.2:添加传感器数据聚合模块
步骤3.3:连接传感器模块到数据聚合模块
步骤4:设计紧急制动辅助系统模块
步骤4.1:添加紧急制动辅助系统模块
步骤4.2:连接传感器数据聚合模块到紧急制动辅助系统模块
步骤4.3:连接紧急制动辅助系统模块到车辆控制模块
步骤5:设计动态障碍物模块
步骤5.1:添加动态障碍物模块
步骤5.2:连接动态障碍物模块到传感器数据聚合模块
步骤6:设置仿真参数
步骤7:运行仿真
步骤8:性能评估
制动反应时间
制动距离
避免碰撞成功率
步骤9:性能优化
调整触发阈值
引入多传感器融合算法
使用更精确的路径规划算法
使用Simulink Test进行自动化测试
四、总结
手把手教你学Simulink:智能车辆紧急制动辅助系统仿真
在自动驾驶技术领域中,**紧急制动辅助系统(Emergency Braking Assist, EBA)**被视为实现车辆安全减速和规避障碍物的核心技术要素。通过Simulink平台的使用,在线构建一个完整的仿真测试平台以模拟该系统的行为特征及其应用效果具有重要意义。本指南将详细阐述从零开始搭建智能车辆紧急制动辅助系统仿真模型的具体步骤,并指导你从零开始完成系统的性能验证工作。
一、背景介绍
紧急制动辅助系统(JBS) 在智能驾驶系统中发挥的作用是当前方检测到障碍物时(通常是突然出现),JBS能够自主做出决策并执行紧急制动操作以避免碰撞或减轻碰撞伤害的程度。常见的类型包括:
- 目标识别与追踪 :用于检测前方潜在的障碍物。
- 距离测量 :用于实时计算并评估车辆与前方物体之间的距离。
- 动态调节 :通过精确控制制动系统的响应频率和力度实现车辆的安全减速和稳定停靠。
本示例旨在说明如何使用Simulink搭建一个专门用于智能车辆紧急制动辅助系统的仿真模型,并经过验证。
二、所需工具和环境
为了进行智能车辆紧急制动辅助系统的仿真,你需要以下工具和环境:
基于 MATLAB/Simulink 进行建模和仿真。
Automated Driving Toolbox 专为自动驾驶应用集成了一系列工具和服务。
采用 Vehicle Dynamics Blockset 完成车辆动力学分析与模拟。
Sensor Fusion and Tracking Toolbox 提供了传感器融合与目标追踪算法的设计与验证工具。
基于 SimEvents 实现离散事件系统的建模与运行(可选)。
借助 Simulink Test 执行自动化系统测试(可选)。
确保你已经安装了上述工具箱,并且拥有有效的许可证。
三、步骤详解
步骤1:创建Simulink模型
首先,打开 MATLAB 并启动 Simulink 创建一个新的空白模型。
步骤1.1:打开Simulink并新建模型
- 开始 MATLAB程序的运行。
- 在命令窗口输入
simulink后即可打开Simulink启动界面。 - 单击“Blank Model”按钮以创建一个新的空模型。
matlab
深色版本
% 创建新的Simulink模型
modelName = 'AutonomousVehicleEBA';
new_system(modelName);
open_system(modelName);
步骤2:设计车辆动力学模型
我们需要为车辆建立一个简单的动力学模型,以便模拟其运动状态。
步骤2.1:添加车辆底盘模块
- 在指定库中拖放模块到模型编辑区。
- 配置模块参数包括质量、惯性矩和前后轴距等。
matlab
深色版本
% 添加自行车模型模块
add_block('vehicleDynamics/Bicycle Model', [modelName '/Vehicle']);
set_param([modelName '/Vehicle'], 'Mass', '1500'); % 设置车辆质量为1500kg
set_param([modelName '/Vehicle'], 'Inertia', '[1000, 0, 0; 0, 1500, 0; 0, 0, 1000]'); % 设置惯性矩矩阵
set_param([modelName '/Vehicle'], 'Wheelbase', '2.8'); % 设置轮距为2.8米
步骤2.2:添加纵向控制模块
在 Automated Driving Toolbox > Vehicle Library > Longitudinal Driver Inputs 库中拖放 Longitudinal Driver 模块至模型编辑区,并对相关参数设置进行配置:将最大加速度设为12 m/s²、减速度设为8 m/s²等操作。
matlab
深色版本
% 添加纵向控制模块
add_block('automatedDriving/Longitudinal Driver', [modelName '/Longitudinal_Driver']);
set_param([modelName '/Longitudinal_Driver'], 'MaxAcceleration', '3'); % 设置最大加速度为3m/s^2
set_param([modelName '/Longitudinal_Driver'], 'MaxDeceleration', '-8'); % 设置最大减速度为-8m/s^2
步骤2.3:连接各模块
将控制模块的输出连接到车辆底盘模块的相应输入端口。
matlab
深色版本
% 连接纵向控制模块到车辆底盘模块
add_line(modelName, [modelName '/Longitudinal_Driver'], [modelName '/Vehicle'], 'autorouting', 'on');
步骤3:设计传感器数据采集模块
该系统旨在通过收集车辆周围环境数据来实现智能车辆的紧急制动辅助功能。
步骤3.1:添加传感器模块
- 在 Automated Driving Toolbox 的 Sensor Fusion and Tracking 软件包内拖放各种传感器组件(包括 IMU Sensor, GPS Sensor, Radar Sensor, Lidar Sensor 和 Camera Sensor)至工作台界面。
- 配置参数设置包括采样率和精度级别等关键指标。
matlab
深色版本
% 添加雷达传感器模块
add_block('automatedDriving/Radar Sensor', [modelName '/Radar_Sensor']);
set_param([modelName '/Radar_Sensor'], 'RangeResolution', '0.1'); % 设置距离分辨率为0.1米
% 添加激光雷达传感器模块
add_block('automatedDriving/Lidar Sensor', [modelName '/Lidar_Sensor']);
set_param([modelName '/Lidar_Sensor'], 'AngularResolution', '0.05'); % 设置角度分辨率为0.05度
步骤3.2:添加传感器数据聚合模块
- 将此
Sensor Data Aggregator模块拖放到模型编辑区。- 配置参数包括传感器类型和采样频率等设置。
matlab
深色版本
% 添加传感器数据聚合模块
add_block('automatedDriving/Sensor Data Aggregator', [modelName '/Sensor_Data_Aggregator']);
set_param([modelName '/Sensor_Data_Aggregator'], 'SensorTypes', 'Radar, Lidar'); % 设置传感器类型为雷达、激光雷达
set_param([modelName '/Sensor_Data_Aggregator'], 'SamplingFrequency', '10'); % 设置采样频率为10Hz
步骤3.3:连接传感器模块到数据聚合模块
将各个传感器模块的输出连接到传感器数据聚合模块的输入端口。
matlab
深色版本
% 连接雷达传感器模块到传感器数据聚合模块
add_line(modelName, [modelName '/Radar_Sensor'], [modelName '/Sensor_Data_Aggregator'], 'autorouting', 'on');
% 连接激光雷达传感器模块到传感器数据聚合模块
add_line(modelName, [modelName '/Lidar_Sensor'], [modelName '/Sensor_Data_Aggregator'], 'autorouting', 'on');
步骤4:设计紧急制动辅助系统模块
我们计划开发一个紧急制动辅助系统模块(EMAS),该系统以检测前方潜在的障碍物为首要任务,在经过评估后将根据检测结果,在必要时触发紧急制动操作。
步骤4.1:添加紧急制动辅助系统模块
- 在导航至库中的指定位置拖放
Emergency Braking System模块至模型编辑区。- 详细配置参数设置包括但不限于触发阈值和减速率设置。
matlab
深色版本
% 添加紧急制动系统模块
add_block('automatedDriving/Emergency Braking System', [modelName '/Emergency_Braking_System']);
set_param([modelName '/Emergency_Braking_System'], 'TriggerThreshold', '5'); % 设置触发阈值为5米
set_param([modelName '/Emergency_Braking_System'], 'DecelerationRate', '-8'); % 设置减速度为-8m/s^2
步骤4.2:连接传感器数据聚合模块到紧急制动辅助系统模块
传感器数据聚合模块的输出被供至紧急制动辅助系统模块使用
matlab
深色版本
% 连接传感器数据聚合模块到紧急制动辅助系统模块
add_line(modelName, [modelName '/Sensor_Data_Aggregator'], [modelName '/Emergency_Braking_System'], 'autorouting', 'on');
步骤4.3:连接紧急制动辅助系统模块到车辆控制模块
将紧急制动辅助系统模块的输出连接到车辆纵向控制模块的输入端口。
matlab
深色版本
% 连接紧急制动辅助系统模块到纵向控制模块
add_line(modelName, [modelName '/Emergency_Braking_System'], [modelName '/Longitudinal_Driver'], 'autorouting', 'on');
步骤5:设计动态障碍物模块
我们将设计一个动态障碍物模块,用于模拟其他移动物体的行为。
步骤5.1:添加动态障碍物模块
- 在
Automated Driving Toolbox > Scenario Builder库中拖拽指定模块至模型编辑区。- 设置参数包括障碍物类型、初始位置和速度。
matlab
深色版本
% 添加动态障碍物模块
add_block('automatedDriving/Dynamic Obstacle', [modelName '/Dynamic_Obstacle']);
set_param([modelName '/Dynamic_Obstacle'], 'ObstacleType', 'Car'); % 设置障碍物类型为汽车
set_param([modelName '/Dynamic_Obstacle'], 'InitialPosition', '[20, 20]'); % 设置初始位置为(20, 20)
set_param([modelName '/Dynamic_Obstacle'], 'Velocity', '10'); % 设置速度为10m/s
步骤5.2:连接动态障碍物模块到传感器数据聚合模块
将动态障碍物模块的输出连接至传感器数据聚合模块的输入端口,并用于持续更新传感器数据中的障碍物信息
matlab
深色版本
% 连接动态障碍物模块到传感器数据聚合模块
add_line(modelName, [modelName '/Dynamic_Obstacle'], [modelName '/Sensor_Data_Aggregator'], 'autorouting', 'on');
步骤6:设置仿真参数
单击位于模型编辑器顶端菜单栏中的Simulation选项,在其下拉菜单中选择Model Configuration Parameters命令项。随后,在该对话框内依次设置相应的仿真时长(例如设定为600秒)、求解器类型(通常建议选择ode45)以及其它相关参数设置。
matlab
深色版本
% 设置仿真参数
set_param(modelName, 'StopTime', '600'); % 模拟运行时间为600秒
set_param(modelName, 'Solver', 'ode45');
步骤7:运行仿真
在完成以上步骤之后,在操作台的"Run"按钮旁启动仿真程序。持续关注车辆的行为轨迹,并确保其能够按照预先设定的紧急制动辅助系统算法有效地执行驾驶任务,并及时采取必要措施。
步骤8:性能评估
为了全面评估智能车辆紧急制动辅助系统的性能, 我们需要关注以下几个关键性能指标:
制动反应时间
通过测定从检测到障碍物再到系统做出制动反应所需的时间来评估系统的制动反应所需时间
matlab
深色版本
function brakingResponseTime = calculateBrakingResponseTime(detectionTimestamp, brakingTimestamp)
% 示例:计算制动反应时间
brakingResponseTime = mean(brakingTimestamp - detectionTimestamp); % 计算平均制动反应时间
end
% 获取障碍物检测和制动的时间戳
detectionTimestamp = getDetectionTimestamp();
brakingTimestamp = getBrakingTimestamp();
% 计算制动反应时间
brakingResponseTime = calculateBrakingResponseTime(detectionTimestamp, brakingTimestamp);
disp(['Braking Response Time: ', num2str(brakingResponseTime), ' seconds']);
制动距离
通过计算从制动开始到完全停止的距离,评估制动距离。
matlab
深色版本
function brakingDistance = calculateBrakingDistance(initialSpeed, decelerationRate)
% 示例:计算制动距离
brakingDistance = (initialSpeed^2) / (2 * abs(decelerationRate)); % 使用公式v^2 = u^2 + 2as计算制动距离
end
% 获取初始速度和减速度
initialSpeed = getInitialSpeed(); % 获取初始速度
decelerationRate = getDecelerationRate(); % 获取减速度
% 计算制动距离
brakingDistance = calculateBrakingDistance(initialSpeed, decelerationRate);
disp(['Braking Distance: ', num2str(brakingDistance), ' meters']);
避免碰撞成功率
为了统计有效防止碰撞的事件数量与总试验次数之间的比率, 确定碰撞 avoidance 的成功率
matlab
深色版本
function collisionAvoidanceSuccessRate = calculateCollisionAvoidanceSuccessRate(successfulAvoidances, totalAttempts)
% 示例:计算避免碰撞成功率
collisionAvoidanceSuccessRate = length(successfulAvoidances) / totalAttempts; % 计算避免碰撞成功率
end
% 获取成功避免碰撞的次数和总尝试次数
successfulAvoidances = getSuccessfulAvoidances();
totalAttempts = getTotalAttempts();
% 计算避免碰撞成功率
collisionAvoidanceSuccessRate = calculateCollisionAvoidanceSuccessRate(successfulAvoidances, totalAttempts);
disp(['Collision Avoidance Success Rate: ', num2str(collisionAvoidanceSuccessRate * 100), '%']);
步骤9:性能优化
为了提升智能车辆紧急制动辅助系统的性能水平, 我们可以采用若干途径来实现这一目标
调整触发阈值
从当前设置开始, 逐步微调Emergency Braking System模块中的触发阈值参数, 直到达到理想的效果之前.
matlab
深色版本
% 修改紧急制动系统模块中的触发阈值
set_param([modelName '/Emergency_Braking_System'], 'TriggerThreshold', '4'); % 更改为4米
引入多传感器融合算法
基于多传感器融合系统(如卡尔曼滤波器、粒子滤波器)用于提升数据的准确性和鲁棒性
matlab
深色版本
% 使用多传感器数据融合算法
add_block('automatedDriving/Multi-Sensor Fusion', [modelName '/Multi_Sensor_Fusion']);
set_param([modelName '/Multi_Sensor_Fusion'], 'FusionAlgorithm', 'Kalman Filter'); % 设置融合算法为卡尔曼滤波
% 连接传感器数据聚合模块到多传感器融合模块
add_line(modelName, [modelName '/Sensor_Data_Aggregator'], [modelName '/Multi_Sensor_Fusion'], 'autorouting', 'on');
% 连接多传感器融合模块到紧急制动辅助系统模块
add_line(modelName, [modelName '/Multi_Sensor_Fusion'], [modelName '/Emergency_Braking_System'], 'autorouting', 'on');
使用更精确的路径规划算法
使用更为精准的路径规划方案(如基于图搜索的方法)以期实现路径规划的高精度。
matlab
深色版本
% 使用基于图搜索的路径规划算法
add_block('automatedDriving/Graph-Based Path Planner', [modelName '/Path_Planner']);
set_param([modelName '/Path_Planner'], 'Algorithm', 'A*'); % 设置算法为A*
% 连接传感器数据聚合模块到路径规划模块
add_line(modelName, [modelName '/Sensor_Data_Aggregator'], [modelName '/Path_Planner'], 'autorouting', 'on');
% 连接路径规划模块到紧急制动辅助系统模块
add_line(modelName, [modelName '/Path_Planner'], [modelName '/Emergency_Braking_System'], 'autorouting', 'on');
使用Simulink Test进行自动化测试
通过 Simulink Test 工具箱实施自动化测试与验证流程,并保证系统的稳定运行能力
matlab
深色版本
% 创建测试用例
testCase = sltest.testmanager.TestFile('EBA_TestCases');
testCase.addTestSuite('EBA_TestSuite');
testCase.addTestCase('Scenario_1', 'Standard_WLTC_Cycle');
% 运行测试
sltest.testmanager.run(testCase);
四、总结
按照本指南的要求,在此我们详细讲解了如何基于Simulink构建了一个针对智能车辆紧急制动辅助系统的仿真模型,并对其进行了仿真测试与性能分析。
- 背景介绍 :深入解析智能车辆紧急制动辅助系统的工作原理及其在实际应用中的重要性。
- 所需工具和环境 :详细说明实现该系统仿真所需的必要工具及运行环境配置。
- 步骤详解 :从零开始构建完整的紧急制动辅助系统模型,并依次完成以下模块的设计与实现:
- 包括车辆动力学建模
- 传感器数据采集模块的设计
- 紧急制动辅助系统模块的设计
- 动态障碍物模块的设计
最后完成仿真参数设置与运行过程。
- 性能评估 :采用一系列关键指标来全面评估该系统的性能表现。
- 性能优化 :通过优化触发阈值设定、引入多传感器融合算法或者采用更为精准的路径规划算法等手段来显著提升系统的性能水平。
