Advertisement

基于Simulink的自动驾驶路径规划与决策仿真

阅读量:

目录

基于Simulink的自动驾驶路径规划与决策仿真

一、背景介绍

二、所需工具和环境

三、步骤详解

步骤1:创建Simulink模型

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

步骤2:添加车辆动力学模型

步骤2.1:添加车辆动力学模块

步骤3:添加传感器模块

步骤3.1:添加激光雷达传感器模块

步骤3.2:添加摄像头传感器模块

步骤3.3:添加GPS传感器模块

步骤4:设计路径规划模块

步骤4.1:加载地图数据

步骤4.2:添加路径规划模块

步骤4.3:连接路径规划模块

步骤5:设计决策模块

步骤5.1:添加决策模块

步骤5.2:解析传感器数据

步骤5.3:连接反馈回路

步骤6:设置仿真参数

步骤7:运行仿真

步骤8:分析仿真结果

车辆轨迹

速度和加速度波形

上升时间和调节时间

动态响应特性

安全性分析

步骤9:优化路径规划与决策模块

调整路径规划算法参数

增加更多的传感器数据

使用更先进的决策方法

四、总结


基于Simulink的自动驾驶路径规划与决策仿真

在自动驾驶系统中担任核心作用的是路径规划与决策这两个模块。其中,路径规划的主要职责是从起点安全且高效地生成到终点的行驶路线;同时,决策模块能够实时根据当前环境信息(如交通状况及障碍物等)来调节车辆的行为。本部分将介绍如何利用Simulink及其相关工具箱构建一个自动驾驶系统的路径规划与行为决策仿真模型。

一、背景介绍

路径规划 可以定义为基于给定的地图信息和起点与终点位置,在确保安全性和高效性的前提下寻求一条满足所有约束条件的道路行驶路线。该过程通常涉及A*算法、Dijkstra算法以及RRT(一种基于随机采样的快速搜索算法)等技术。

决策模块 根据传感器数据(如激光雷达、摄像头、GPS 等)和其他信息(如交通规则、动态障碍物等),动态地调整车辆的各项行为参数(如加速、减速、变道、停车等)。常用的决策方法包括基于预设规则的方法和深度强化学习算法等。

在此实例中,我们决定采用Simulink及其相关工具箱来完成一个较为简单的自动驾驶路径规划及决策仿真

二、所需工具和环境

为了进行路径规划与决策的仿真,你需要以下工具和环境:

  1. MathWorks MATLAB/Simulink 提供建模、仿真以及动态系统设计的综合平台。
  2. Autonomous Vehicle Toolbox 支持开发先进的自动驾驶系统。
  3. Sensor Fusion and Tracking Toolbox 支持多源传感器数据融合与目标跟踪算法的设计与开发。
  4. Navigation and Path Planning Toolbox 支持基于实时计算的路径规划、动态环境避障以及定位追踪功能。
  5. Vehicle Dynamics and Chassis System Blockset 支持基于物理模型的车辆动力学、底盘系统以及悬架行为建模与仿真。
  6. Simulink Control Design 支持基于Simulink的控制系统自动调谐、线性化以及非线性控制设计与分析.
三、步骤详解
步骤1:创建Simulink模型

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

步骤1.1:打开Simulink并新建模型
  • 打开 MATLAB 应用程序。
  • 在命令窗口输入 simulink 后自动打开 Simulink 启动界面。
  • 单击“Blank Model”按钮生成一个新的空模型文件。
步骤2:添加车辆动力学模型

我们将使用 Vehicle Dynamics Blockset 来构建车辆的动力学模型。

步骤2.1:添加车辆动力学模块
  • Vehicle Dynamics Blockset > Vehicle Library > Longitudinal Driver Inputs 库中从 Longitudinal Driver 输入块拖放 Longitudinal Driver 模块至模型编辑区。
    • Vehicle Dynamics Blockset > Vehicle Library > Powertrain 库中从 Electric Powertrain 动力总成块拖放 Electric Powertrain 模块至模型编辑区。
    • Vehicle Dynamics Blockset > Vehicle Library > Chassis 库中从 Rigid Body 手动底盘块拖放 Rigid Body 模块至模型编辑区.
复制代码

matlab

深色版本

复制代码
 % 添加车辆动力学模块

    
 add_block('vehicleDynamics/Longitudinal Driver', [modelName '/Longitudinal_Driver']);
    
 add_block('vehicleDynamics/Electric Powertrain', [modelName '/Electric_Powertrain']);
    
 add_block('vehicleDynamics/Rigid Body', [modelName '/Rigid_Body']);
步骤3:添加传感器模块

我们将使用多种传感器(如激光雷达、摄像头、GPS 等)来获取周围环境信息。

步骤3.1:添加激光雷达传感器模块

在导航至 Sensor Fusion and Tracking Toolbox > Sensors and Measurements 库后,拖放 Lidar Point Cloud Generator 模块至模型编辑区。

复制代码

matlab

深色版本

复制代码
 % 添加激光雷达传感器模块

    
 add_block('sensorFusion/Lidar Point Cloud Generator', [modelName '/Lidar_Sensor']);
    
 set_param([modelName '/Lidar_Sensor'], 'MaxRange', '100'); % 设置最大检测范围为100米
    
 set_param([modelName '/Lidar_Sensor'], 'MinRange', '1'); % 设置最小检测范围为1米
    
 set_param([modelName '/Lidar_Sensor'], 'UpdateRate', '10'); % 设置更新频率为10Hz
步骤3.2:添加摄像头传感器模块
  • 在该库中的 Automated Driving Toolbox > Sensors 区域内将 Camera Sensor 组件拖放至模型编辑区。
    • 配置设置包括视场角、分辨率以及其他相关设置项。
复制代码

matlab

深色版本

复制代码
 % 添加摄像头传感器模块

    
 add_block('automatedDriving/Camera Sensor', [modelName '/Camera_Sensor']);
    
 set_param([modelName '/Camera_Sensor'], 'FOV', '90'); % 设置视场角为90度
    
 set_param([modelName '/Camera_Sensor'], 'Resolution', '[640, 480]'); % 设置分辨率为640x480
步骤3.3:添加GPS传感器模块

Sensor Fusion and Tracking Toolbox > Sensors and Measurements 目录中拖放 GPS Receiver 组件到模型编辑区。配置设置如更新周期等。

复制代码

matlab

深色版本

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

    
 add_block('sensorFusion/GPS Receiver', [modelName '/GPS_Sensor']);
    
 set_param([modelName '/GPS_Sensor'], 'UpdateRate', '1'); % 设置更新频率为1Hz
步骤4:设计路径规划模块

该系统将采用 Navigation Toolbox 中的 RRT 算法来实现路径规划的目的。

步骤4.1:加载地图数据

改写说明

复制代码

matlab

深色版本

复制代码
 % 创建驾驶场景

    
 scenario = drivingScenario;
    
 roadCenters = [-10 0; 10 0]; % 定义道路中心线
    
 roadWidth = 5; % 定义道路宽度
    
 road = road(scenario, roadCenters, 'Width', roadWidth);
    
  
    
 % 加载地图数据到Simulink
    
 add_block('navigation/Load Map Data', [modelName '/Load_Map_Data']);
    
 set_param([modelName '/Load_Map_Data'], 'MapFile', 'drivingScenario.mat'); % 假设地图数据存储在drivingScenario.mat文件中
步骤4.2:添加路径规划模块
  • 在导航工具箱的路径规划子库(Navigation Toolbox > Path Planning)中拖放Rapidly-exploring Random Tree(RRT)规划器模块至模型编辑区域。
    • 当配置参数时可包含最大迭代次数、步长等设置项。
复制代码

matlab

深色版本

复制代码
 % 添加路径规划模块

    
 add_block('navigation/RRT Planner', [modelName '/Path_Planner']);
    
 set_param([modelName '/Path_Planner'], 'MaxIterations', '1000'); % 设置最大迭代次数为1000
    
 set_param([modelName '/Path_Planner'], 'StepSize', '1'); % 设置步长为1米
步骤4.3:连接路径规划模块

通过将地图数据模块与其后续处理环节相衔接,并使路径规划模块与其驱动系统形成互动关系

复制代码

matlab

深色版本

复制代码
 % 连接各模块

    
 add_line(modelName, [modelName '/Load_Map_Data'], [modelName '/Path_Planner'], 'autorouting', 'on');
    
 add_line(modelName, [modelName '/Path_Planner'], [modelName '/Decision_Module'], 'autorouting', 'on');
步骤5:设计决策模块

我们决定采用遵循规则的机制来构建决策单元,并依据传感器反馈动态调节车辆的行为模式。

步骤5.1:添加决策模块
  • 从 Simulink 的 User-Defined Functions 库中导入 MATLAB Function 块至模型编辑区。
    • 通过编写代码来实现决策逻辑(包括但不限于加速、减速、变道以及停车等操作)。
复制代码

matlab

深色版本

复制代码
 % 添加决策模块

    
 add_block('simulink/User-Defined Functions/MATLAB Function', [modelName '/Decision_Module']);
    
  
    
 % 编写MATLAB Function代码
    
 function controlSignal = fcn(sensorData, pathPlan)
    
     % 解析传感器数据
    
     lidarData = sensorData.lidar;
    
     cameraData = sensorData.camera;
    
     gpsData = sensorData.gps;
    
  
    
     % 根据路径规划结果和传感器数据做出决策
    
     if isObstacleInFront(lidarData) % 自定义函数判断前方是否有障碍物
    
     controlSignal = decelerate(); % 自定义函数减速
    
     elseif isTrafficLightRed(cameraData) % 自定义函数判断红绿灯状态
    
     controlSignal = stop(); % 自定义函数停车
    
     else
    
     controlSignal = followPath(pathPlan); % 自定义函数跟随路径
    
     end
    
 end
步骤5.2:解析传感器数据

编写自定义函数解析传感器数据(如激光雷达、摄像头、GPS 数据)。

复制代码

matlab

深色版本

复制代码
 % 自定义函数解析激光雷达数据

    
 function isObstacle = isObstacleInFront(lidarData)
    
     % 实现解析逻辑
    
 end
    
  
    
 % 自定义函数解析摄像头数据
    
 function isRed = isTrafficLightRed(cameraData)
    
     % 实现解析逻辑
    
 end
步骤5.3:连接反馈回路

通过传感器装置采集的状态信息被传递至决策单元进行处理,并使决策单元生成的结果驱动动力学模型进行参数调整以优化运动特性

复制代码

matlab

深色版本

复制代码
 % 连接各模块

    
 add_line(modelName, [modelName '/Lidar_Sensor'], [modelName '/Decision_Module'], 'autorouting', 'on');
    
 add_line(modelName, [modelName '/Camera_Sensor'], [modelName '/Decision_Module'], 'autorouting', 'on');
    
 add_line(modelName, [modelName '/GPS_Sensor'], [modelName '/Decision_Module'], 'autorouting', 'on');
    
 add_line(modelName, [modelName '/Decision_Module'], [modelName '/Electric_Powertrain'], 'autorouting', 'on');
步骤6:设置仿真参数

在模型编辑器主菜单栏中单击Simulation > Model Configuration Parameters菜单项;随后根据具体需求设置仿真时长(例如设置为120秒),并选择求解器类型时建议采用ode45算法;同时根据需要调整其他相关参数设置

复制代码

matlab

深色版本

复制代码
 % 设置仿真参数

    
 set_param(modelName, 'StopTime', '120'); % 模拟运行时间为120秒
    
 set_param(modelName, 'Solver', 'ode45');
步骤7:运行仿真

完成后启动操作台上的运行按钮以执行仿真过程。详细监测并分析这些波形数据以验证其稳定性与安全性是否达到预期设计标准

步骤8:分析仿真结果

通过仿真技术可以系统地获取各类运动系统的关键性能指标数据包括车辆运动轨迹特征参数速度变化特征参数加速度变化特征参数超调量特征参数以及调节时间等关键指标数据

以上内容完整保留了原文的核心信息并对其表述方式进行优化

车辆轨迹

利用 Scope 模块对车辆行驶轨迹进行监测,并确保其遵循预设路线且避开障碍物

速度和加速度波形

利用Scope模块监测车辆的速度和加速度波形,并保证其稳定性和安全性符合设计要求。

上升时间和调节时间

基于车辆速度波形的变化进行分析后, 可以为系统的性能指标提供重要参考数据. 其中, 上升时间指的是系统从初始状态开始加速至预定的速度水平所需的时间; 而调节时间则指系统达到并维持预定稳定运行状态所需要的时间.

复制代码

matlab

深色版本

复制代码
 % 获取车辆速度数据

    
 vehicleSpeed = getVehicleSpeed();
    
  
    
 % 计算上升时间和调节时间
    
 riseTime = calculateRiseTime(vehicleSpeed); % 自定义函数计算上升时间
    
 settlingTime = calculateSettlingTime(vehicleSpeed); % 自定义函数计算调节时间
    
  
    
 % 显示结果
    
 disp(['Rise Time: ', num2str(riseTime), ' seconds']);
    
 disp(['Settling Time: ', num2str(settlingTime), ' seconds']);
动态响应特性

基于阶跃输入或斜坡输入测试的方法,则用于分析系统的动态响应特性包括超调度、振荡次数等指标。

复制代码

matlab

深色版本

复制代码
 % 计算超调量

    
 overshoot = calculateOvershoot(vehicleSpeed); // 自定义函数计算超调量
    
  
    
 // 显示结果
    
 disp(['Overshoot: ', num2str(overshoot), '%']);
安全性分析

通过对车辆运行轨迹及传感器收集到的数据进行分析,并以确保车辆能够持续地避免遇到任何障碍物以及严格遵守交通法规。

复制代码

matlab

深色版本

复制代码
 % 获取车辆轨迹数据

    
 trajectory = getTrajectory();
    
  
    
 % 检查是否避开障碍物
    
 if any(isCloseToObstacle(trajectory)) % 自定义函数检查是否靠近障碍物
    
     disp('Warning: Vehicle is too close to an obstacle.');
    
 else
    
     disp('Vehicle successfully avoided all obstacles.');
    
 end
步骤9:优化路径规划与决策模块

旨在通过优化设置路径规划算法以提升整体性能

调整路径规划算法参数

对路径规划算法的配置参数进行人工优化(例如最大迭代次数、步长等),直至满足预期的性能指标。

复制代码

matlab

深色版本

复制代码
 % 调整路径规划算法参数

    
 set_param([modelName '/Path_Planner'], 'MaxIterations', '2000'); % 增加最大迭代次数
    
 set_param([modelName '/Path_Planner'], 'StepSize', '0.5'); % 减小步长
    
  
    
 % 重新运行仿真
    
 sim(modelName);
增加更多的传感器数据

利用多种传感器数据(包括毫米波雷达、超声波传感器等),从而显著提升系统感知性能

复制代码

matlab

深色版本

复制代码
 % 添加毫米波雷达传感器模块

    
 add_block('sensorFusion/Radar Detection Generator', [modelName '/Radar_Sensor']);
    
 set_param([modelName '/Radar_Sensor'], 'MaxRange', '150'); % 设置最大检测范围为150米
    
 set_param([modelName '/Radar_Sensor'], 'MinRange', '5'); % 设置最小检测范围为5米
    
 set_param([modelName '/Radar_Sensor'], 'UpdateRate', '10'); % 设置更新频率为10Hz
    
  
    
 % 连接毫米波雷达传感器模块
    
 add_line(modelName, [modelName '/Radar_Sensor'], [modelName '/Decision_Module'], 'autorouting', 'on');
使用更先进的决策方法

使用更先进的决策方法(如强化学习、深度学习等)来提高系统的性能。

复制代码

matlab

深色版本

复制代码
 % 使用强化学习进行决策

    
 add_block('simulink/Reinforcement Learning Toolbox/Reinforcement Learning Agent', [modelName '/RL_Agent']);
四、总结

本教程旨在指导用户如何使用Simulink进行自动驾驶系统的路径规划与决策仿真。主要内容包括:

  1. Simulink的基础知识介绍;
  2. 自动驾驶系统的基本原理;
  3. 路径规划与决策仿真的具体实现方法。
  • 背景介绍:深入掌握路径规划与决策在自动驾驶系统中的关键作用。
    • 所需工具和环境:详细列举实现路径规划与决策仿真的所需工具及环境配置要求。
    • 步骤详解:从零开始构建完整的自动驾驶系统模型框架,并完成路径规划与决策系统的整体设计与仿真验证。
    • 分析仿真结果:通过车辆运动轨迹特征、速度变化曲线、加速度波动情况以及动态性能指标如上升时间、调节时间等进行全面系统的性能评估。
    • 优化路径规划与决策模块:通过优化路径规划算法参数设置、整合更多实时传感器数据以及采用更为先进的决策算法方案来提升系统性能水平。

全部评论 (0)

还没有任何评论哟~