Advertisement

Simulink开发项1000例实战专栏--实例204: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实例演示:智能车辆自动超车策略仿真

在自动驾驶领域中, 自主动 maneuvering strategy 被视为确保智能汽车能够在复杂交通环境中安全且高效地超越前车的关键技术基础。借助Simulink simulation平台, 我们能够构建一个全面的虚拟测试平台, 并模拟车辆的各种操作场景, 从而验证该策略的有效性与可靠性。本指南将提供一个详细的指导方针, 指导您从零开始设计并验证智能车辆的自主动超车系统。

一、背景介绍

自动超车策略 在智能驾驶领域中发挥着重要作用的是当检测到前方有慢行车辆时这一特定情境下的应对措施。这种措施的核心在于系统具备自主决策能力,并能进行超车操作以规避潜在危险。常见的这类策略主要包括:

  • 目标鉴定与跟踪 :如检测前方障碍物、判断车道线位置。
    • 路径规划用于计算最优超车路径
    • 动态优化控制用于优化调整超车动作

本示例将详细说明如何利用Simulink构建一个用于智能车辆自动超车策略的仿真模型,并进行模拟验证

二、所需工具和环境

为了进行智能车辆自动超车策略的仿真,你需要以下工具和环境:

该软件平台旨在提供建模与仿真的功能。
此工具包集成了自动驾驶系统所需的各种功能模块。
该模块组专为车辆动力学分析而设计。
此工具箱专注于开发基于传感器数据融合的定位与跟踪系统(可选)。
此功能模块适用于采用事件驱动方式实现离散事件系统的仿真实验(可选)。
此功能模块允许对系统进行自动化测试与性能验证(可选)。

确保你已经安装了上述工具箱,并且拥有有效的许可证。

三、步骤详解

步骤1:创建Simulink模型

首先,打开 MATLAB 并启动 Simulink 创建一个新的空白模型。

步骤1.1:打开Simulink并新建模型

  • 打开 MATLAB 应用程序。
  • 在命令窗口输入 simulink 后打开 Simulink 的起始界面。
  • 单击“Blank Model”按钮以建立一个新的空模型。
复制代码

matlab

深色版本

复制代码
 % 创建新的Simulink模型

    
 modelName = 'AutonomousVehicleOvertaking';
    
 new_system(modelName);
    
 open_system(modelName);

步骤2:设计车辆动力学模型

我们需要为车辆建立一个简单的动力学模型,以便模拟其运动状态。

步骤2.1:添加车辆底盘模块

  • 在 Vehicle Dynamics Blockset > Vehicle Library > Chassis 库中进行模块拖放操作,在模型编辑区中放置 Bicycle Model 或 3DOF Vehicle Dynamics 模块。
    • 配置相关属性值,请注意设置如质量属性、转动惯量参数以及前后轴心距离配置项。
复制代码

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 InputsLateral Driver Inputs 目录中分别拖放 Longitudinal DriverLateral Driver 模块至模型编辑区。
    • 配置相关参数如最大加速度值和转向角速率设置等。
复制代码

matlab

深色版本

复制代码
 % 添加纵向控制模块

    
 add_block('automatedDriving/Longitudinal Driver', [modelName '/Longitudinal_Driver']);
    
 set_param([modelName '/Longitudinal_Driver'], 'MaxAcceleration', '3'); % 设置最大加速度为3m/s^2
    
  
    
 % 添加横向控制模块
    
 add_block('automatedDriving/Lateral Driver', [modelName '/Lateral_Driver']);
    
 set_param([modelName '/Lateral_Driver'], 'MaxSteeringRate', '0.5'); % 设置最大转向角速率为0.5rad/s

步骤2.3:连接各模块

将控制模块的输出连接到车辆底盘模块的相应输入端口。

复制代码

matlab

深色版本

复制代码
 % 连接纵向控制模块到车辆底盘模块

    
 add_line(modelName, [modelName '/Longitudinal_Driver'], [modelName '/Vehicle'], 'autorouting', 'on');
    
  
    
 % 连接横向控制模块到车辆底盘模块
    
 add_line(modelName, [modelName '/Lateral_Driver'], [modelName '/Vehicle'], 'autorouting', 'on');

步骤3:设计传感器数据采集模块

为了实现智能车辆的自动超车策略,我们需要收集车辆周围的环境数据。

步骤3.1:添加传感器模块

  • 从库中导入多种传感器模块(如IMU sensor, GPS sensor, radar sensor, lidar sensor, camera sensor)到模型编辑区。
    • 请配置以下参数:采样频率、精度等。
复制代码

matlab

深色版本

复制代码
 % 添加IMU传感器模块

    
 add_block('automatedDriving/IMU Sensor', [modelName '/IMU_Sensor']);
    
 set_param([modelName '/IMU_Sensor'], 'SamplingFrequency', '100'); % 设置采样频率为100Hz
    
  
    
 % 添加GPS传感器模块
    
 add_block('automatedDriving/GPS Sensor', [modelName '/GPS_Sensor']);
    
 set_param([modelName '/GPS_Sensor'], 'Accuracy', '1.0'); % 设置精度为1.0米
    
  
    
 % 添加雷达传感器模块
    
 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度
    
  
    
 % 添加摄像头传感器模块
    
 add_block('automatedDriving/Camera Sensor', [modelName '/Camera_Sensor']);
    
 set_param([modelName '/Camera_Sensor'], 'FieldOfView', '90'); % 设置视场角为90度

步骤3.2:添加传感器数据聚合模块

  • 在该库中的 Automated Driving Toolbox > Sensor Fusion and Tracking 中将 Sensor Data Aggregator 组件拖放至模型编辑区。
    • 配置参数设置包括传感器类型和采样频率等。
复制代码

matlab

深色版本

复制代码
 % 添加传感器数据聚合模块

    
 add_block('automatedDriving/Sensor Data Aggregator', [modelName '/Sensor_Data_Aggregator']);
    
 set_param([modelName '/Sensor_Data_Aggregator'], 'SensorTypes', 'IMU, GPS, Radar, Lidar, Camera'); % 设置传感器类型为IMU、GPS、雷达、激光雷达、摄像头
    
 set_param([modelName '/Sensor_Data_Aggregator'], 'SamplingFrequency', '10'); % 设置采样频率为10Hz

步骤3.3:连接传感器模块到数据聚合模块

将各个传感器模块的输出连接到传感器数据聚合模块的输入端口。

复制代码

matlab

深色版本

复制代码
 % 连接IMU传感器模块到传感器数据聚合模块

    
 add_line(modelName, [modelName '/IMU_Sensor'], [modelName '/Sensor_Data_Aggregator'], 'autorouting', 'on');
    
  
    
 % 连接GPS传感器模块到传感器数据聚合模块
    
 add_line(modelName, [modelName '/GPS_Sensor'], [modelName '/Sensor_Data_Aggregator'], 'autorouting', 'on');
    
  
    
 % 连接雷达传感器模块到传感器数据聚合模块
    
 add_line(modelName, [modelName '/Radar_Sensor'], [modelName '/Sensor_Data_Aggregator'], 'autorouting', 'on');
    
  
    
 % 连接激光雷达传感器模块到传感器数据聚合模块
    
 add_line(modelName, [modelName '/Lidar_Sensor'], [modelName '/Sensor_Data_Aggregator'], 'autorouting', 'on');
    
  
    
 % 连接摄像头传感器模块到传感器数据聚合模块
    
 add_line(modelName, [modelName '/Camera_Sensor'], [modelName '/Sensor_Data_Aggregator'], 'autorouting', 'on');

步骤4:设计自动超车策略模块

本项目将负责开发一个自动超车策略模块,并以检测前方缓慢行驶的车辆为首要任务,在必要时通过主动识别并准备超车来提升安全性。

步骤4.1:添加超车策略模块

  • 请拖放位于 Automated Driving Toolbox > Planning and Decision Making 库中的 Lane Change Planner 模块至模型编辑区。
    • 请配置相关参数,包括换道距离和换道速度。
复制代码

matlab

深色版本

复制代码
 % 添加Lane Change Planner模块

    
 add_block('automatedDriving/Lane Change Planner', [modelName '/Lane_Change_Planner']);
    
 set_param([modelName '/Lane_Change_Planner'], 'LaneChangeDistance', '30'); % 设置换道距离为30米
    
 set_param([modelName '/Lane_Change_Planner'], 'LaneChangeSpeed', '15'); % 设置换道速度为15m/s

步骤4.2:连接传感器数据聚合模块到超车策略模块

将传感器数据聚合模块的输出连接到超车策略模块的输入端口。

复制代码

matlab

深色版本

复制代码
 % 连接传感器数据聚合模块到超车策略模块

    
 add_line(modelName, [modelName '/Sensor_Data_Aggregator'], [modelName '/Lane_Change_Planner'], 'autorouting', 'on');

步骤4.3:连接超车策略模块到车辆控制模块

将超车策略模块的输出连接到车辆纵向和横向控制模块的输入端口。

复制代码

matlab

深色版本

复制代码
 % 连接超车策略模块到纵向控制模块

    
 add_line(modelName, [modelName '/Lane_Change_Planner'], [modelName '/Longitudinal_Driver'], 'autorouting', 'on');
    
  
    
 % 连接超车策略模块到横向控制模块
    
 add_line(modelName, [modelName '/Lane_Change_Planner'], [modelName '/Lateral_Driver'], 'autorouting', 'on');

步骤5:设计动态障碍物模块

我们将设计一个动态障碍物模块,用于模拟其他移动物体的行为。

步骤5.1:添加动态障碍物模块

  • 导入位于 Automated Driving Toolbox > Scenario Builder 库中的 Dynamic Obstacle 模块至模型编辑区。* 配置相关参数包括障碍物类型、起始位置以及速度等。
复制代码

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:运行仿真

在完成后启动仿真,并持续关注车辆的状态;同时确保其能依据预先设定的自动超车策略算法顺利完成驾驶任务,并在必要时采取相应的超车行动。

步骤8:性能评估

为了系统性分析智能车辆自动超车策略的效能表现,请重点考察以下核心性能参数:

超车成功率

通过计算成功超车的次数占总尝试次数的比例,评估超车成功率。

复制代码

matlab

深色版本

复制代码
 function overtakingSuccessRate = calculateOvertakingSuccessRate(successfulOvertakes, totalAttempts)

    
     % 示例:计算超车成功率
    
     overtakingSuccessRate = length(successfulOvertakes) / totalAttempts; % 计算超车成功率
    
 end
    
  
    
 % 获取成功超车的次数和总尝试次数
    
 successfulOvertakes = getSuccessfulOvertakes();
    
 totalAttempts = getTotalAttempts();
    
  
    
 % 计算超车成功率
    
 overtakingSuccessRate = calculateOvertakingSuccessRate(successfulOvertakes, totalAttempts);
    
 disp(['Overtaking Success Rate: ', num2str(overtakingSuccessRate * 100), '%']);

超车安全性

为了评估车辆行驶过程中周围车辆及障碍物的最近距离以确定其安全性水平

复制代码

matlab

深色版本

复制代码
 function safetyMargin = calculateSafetyMargin(minimumDistances)

    
     % 示例:计算超车过程中的最小安全距离
    
     safetyMargin = min(minimumDistances); % 计算最小安全距离
    
 end
    
  
    
 % 获取超车过程中的最小距离
    
 minimumDistances = getMinimumDistances();
    
  
    
 % 计算超车安全性
    
 safetyMargin = calculateSafetyMargin(minimumDistances);
    
 disp(['Safety Margin during Overtaking: ', num2str(safetyMargin), ' meters']);

超车效率

通过计算超车所需的时间,评估超车的效率。

复制代码

matlab

深色版本

复制代码
 function overtakingEfficiency = calculateOvertakingEfficiency(overtakingTimes)

    
     % 示例:计算超车效率
    
     overtakingEfficiency = mean(overtakingTimes); % 计算平均超车时间
    
 end
    
  
    
 % 获取超车所需的时间
    
 overtakingTimes = getOvertakingTimes();
    
  
    
 % 计算超车效率
    
 overtakingEfficiency = calculateOvertakingEfficiency(overtakingTimes);
    
 disp(['Average Time for Overtaking: ', num2str(overtakingEfficiency), ' seconds']);

步骤9:性能优化

该研究旨在提高智能车辆自动超车策略的性能,并通过优化控制算法和引入先进规划模型等手段实现改进措施。

调整换道距离和速度

通过人工干预优化 Lane Change Planner 模块中的换道参数设置及速度控制策略,直至获得理想的结果

复制代码

matlab

深色版本

复制代码
 % 修改Lane Change Planner模块中的换道距离和速度

    
 set_param([modelName '/Lane_Change_Planner'], 'LaneChangeDistance', '40'); % 更改为40米
    
 set_param([modelName '/Lane_Change_Planner'], 'LaneChangeSpeed', '18'); % 更改为18m/s

引入多传感器融合算法

采用多传感器融合算法(包括卡尔曼滤波与粒子滤波)以增强数据准确性和稳定性

复制代码

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 '/Lane_Change_Planner'], '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 '/Lane_Change_Planner'], 'autorouting', 'on');

使用Simulink Test进行自动化测试

基于Simulink Test工具箱自动生成测试用例并执行验证流程,确保系统在多种驾驶模式下保持稳定运行

复制代码

matlab

深色版本

复制代码
 % 创建测试用例

    
 testCase = sltest.testmanager.TestFile('Overtaking_TestCases');
    
 testCase.addTestSuite('Overtaking_TestSuite');
    
 testCase.addTestCase('Scenario_1', 'Standard_WLTC_Cycle');
    
  
    
 % 运行测试
    
 sltest.testmanager.run(testCase);

四、总结

本指南详细讲解了基于Simulink搭建智能车辆自动超车策略仿真模型的方法,并进行了仿真建模以及系统性能评估的具体操作。具体涵盖了模型构建、参数设置、算法实现以及测试验证等内容。

  • 背景介绍:深入掌握智能车辆自动超车策略及其在实际中的应用情况。
  • 所需工具和环境:详细说明用于构建智能车辆自动超车策略仿真系统的工具与环境需求。
  • 步骤详解:包括但不限于构建基于车辆动力学的动态模型、设计先进的传感器数据采集系统、开发高效的自动超车逻辑算法以及模拟复杂的动态障碍物场景。
  • 性能评估:采用全面评估标准如 Superposition Success Rate(SSR)、Collision Avoidance Rate(CAR)以及 Operation Efficiency(OE)来衡量系统效能。
  • 性能优化:通过优化换道间距参数及控制速度设定等方式,并结合多源传感器数据融合技术或采用更为先进的路径规划方案来进一步提升系统性能。

全部评论 (0)

还没有任何评论哟~