Advertisement

手把手教你学Simulink实例--手把手教你学Simulink实例--基于Simulink的自动驾驶车辆路径跟踪控制仿真

阅读量:

目录

基于Simulink的自动驾驶车辆路径跟踪控制仿真

一、背景介绍

二、所需工具和环境

三、步骤详解

步骤1:创建Simulink模型

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

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

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

步骤2.2:添加纵向和横向控制模块

步骤2.3:连接各模块

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

步骤3.1:准备路径数据

步骤3.2:加载路径数据到Simulink模型

步骤4:设计控制器

步骤4.1:选择控制器类型

步骤4.2:添加纯追踪控制器模块

步骤4.3:连接路径规划模块到控制器模块

步骤4.4:连接车辆状态到控制器模块

步骤5:设计传感器模块

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

步骤5.2:添加IMU传感器模块

步骤5.3:连接传感器模块到车辆底盘模块

步骤6:设置仿真参数

步骤7:运行仿真

步骤8:性能评估

跟踪误差

动态响应特性

安全性分析

步骤9:性能优化

调整控制器参数

使用更先进的控制器

增加冗余机制

使用Simulink Test进行自动化测试

四、总结


该自动化的道路追踪控制系统在Simulink环境中进行建模与仿真不仅有助于理解复杂的道路追踪控制系统工作原理并且能够实际操作以验证其性能以下是一整套步骤来构建一个用于道路追踪控制仿真的Simulink模型

基于Simulink的自动驾驶车辆路径跟踪控制仿真

一、背景介绍

路径跟踪控制(Path Following Control) 是一种在自动驾驶技术中发挥核心作用的技术手段,在这一技术手段下实现车辆能够在预定路线范围内自主完成行驶任务的能力被广泛认可。该技术手段能够保证车辆能够沿着预先设定的目标路线行驶,并通过一系列关键组件协同工作以实现这一功能

  1. 基于车辆动力学的建模方法 用于模拟车辆运动特性。
  2. 路径规划系统模块 生成供车辆跟踪遵循的理想路径。
  3. 控制器的设计部分 通过结合当前运行状态及目标轨迹信息来制定控制指令。
  4. 传感器系统模块 实时采集并反馈有关车体位置、速度以及行驶方向的数据。
  5. 系统性能评估模块 全面分析系统跟踪精度以及各项性能参数的表现情况。

在本例中我们采用自动化驾驶工具箱和控制系统工具箱来搭建路径跟踪控制系统的仿真平台,并完成性能测试。

二、所需工具和环境

为了进行路径跟踪控制的仿真,你需要以下工具和环境:

MATLAB/Simulink 主要用于建模与系统仿真 。 Automated Driving Toolbox 包含自动驾驶相关的功能模块 。 Control System Toolbox 专为控制系统设计与分析 。 Sensor Fusion and Tracking Toolbox 主要针对传感器数据处理与融合(可选) 。 SimEvents 主要针对事件驱动型离散事件仿真(可选) 。 Simulink Test 主要针对自动化测试与验证(可选)

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

三、步骤详解
步骤1:创建Simulink模型

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

步骤1.1:打开Simulink并新建模型
  • 打开 MATLAB 平台。
  • 在命令窗口中输入 simulink 后自动打开 Simulink 的启动界面。
  • 单击“Blank Model”按钮以建立一个新的空模型。
复制代码

matlab

深色版本

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

    
 modelName = 'PathFollowingControl';
    
 new_system(modelName);
    
 open_system(modelName);
步骤2:设计车辆动力学模型

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

步骤2.1:添加车辆底盘模块
  • Automated Driving Toolbox > Vehicle Library > Chassis 库中拖放 Bicycle Model 模块至模型编辑区。
    • 请配置相关参数如质量、惯性矩和前后轴距等。
复制代码

matlab

深色版本

复制代码
 % 添加自行车模型模块

    
 add_block('automatedDriving/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和Lateral Driver Inputs模块中分别导入Longitudinal Driver和Lateral 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:准备路径数据

You can utilize the Automated Driving Toolbox to obtain a drivingScenario object and then generate and import a driving scene path.

复制代码

matlab

深色版本

复制代码
 % 创建一个新的驾驶场景对象

    
 scenario = drivingScenario;
    
  
    
 % 添加一条曲线道路
    
 roadCenters = [0 0; 50 -10; 100 -20; 150 -30];
    
 roadWidth = 6;
    
 road(scenario, roadCenters, roadWidth);
    
  
    
 % 将场景保存为文件
    
 save('drivingScenario.mat', 'scenario');
步骤3.2:加载路径数据到Simulink模型

在Simulink模型中,使用 From Workspace 模块加载路径数据。

复制代码

matlab

深色版本

复制代码
 % 添加From Workspace模块

    
 add_block('simulink/Sources/From Workspace', [modelName '/FromWorkspace_Path']);
    
 set_param([modelName '/FromWorkspace_Path'], 'VariableName', 'scenario'); % 设置变量名为'scenario'
    
 set_param([modelName '/FromWorkspace_Path'], 'SampleTime', '0.1'); % 设置采样时间为0.1秒
步骤4:设计控制器

我们将设计一个基于当前状态的路径跟踪控制器,并输出基于目标路径的控制指令。

步骤4.1:选择控制器类型

常用的路径跟踪控制器涉及纯追踪控制器(Pure Pursuit Controller)和模型预测控制(Model Predictive Control, MPC)。这里我们采用纯追踪控制器作为示例进行详细说明

步骤4.2:添加纯追踪控制器模块
  • Automated Driving Toolbox > Controllers 库中进行模块拖放操作以导入 Pure Pursuit Controller 模块至模型编辑区。
    • 请配置参数设置包括前视距离和最大转向角等关键指标。
复制代码

matlab

深色版本

复制代码
 % 添加纯追踪控制器模块

    
 add_block('automatedDriving/Pure Pursuit Controller', [modelName '/PurePursuit_Controller']);
    
 set_param([modelName '/PurePursuit_Controller'], 'LookaheadDistance', '10'); % 设置前视距离为10米
    
 set_param([modelName '/PurePursuit_Controller'], 'MaxSteeringAngle', '0.5'); % 设置最大转向角为0.5弧度
步骤4.3:连接路径规划模块到控制器模块

将路径规划模块的输出连接到纯追踪控制器模块的输入端口。

复制代码

matlab

深色版本

复制代码
 % 连接路径规划模块到纯追踪控制器模块

    
 add_line(modelName, [modelName '/FromWorkspace_Path'], [modelName '/PurePursuit_Controller'], 'autorouting', 'on');
步骤4.4:连接车辆状态到控制器模块

该系统将底盘模块的状态信息通过特定接口传递至纯追踪控制器。

复制代码

matlab

深色版本

复制代码
 % 连接车辆底盘模块的状态输出到纯追踪控制器模块

    
 add_line(modelName, [modelName '/Vehicle'], [modelName '/PurePursuit_Controller'], 'autorouting', 'on');
步骤5:设计传感器模块

我们将使用GPS和IMU传感器来获取车辆的位置和姿态信息。

步骤5.1:添加GPS传感器模块
  • Automated Driving Toolbox > Sensors 库中拖放 GPS Sensor 模块至模型编辑区。
    • 配置参数包括更新频率和噪声水平等。
复制代码

matlab

深色版本

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

    
 add_block('automatedDriving/GPS Sensor', [modelName '/GPS_Sensor']);
    
 set_param([modelName '/GPS_Sensor'], 'UpdateFrequency', '1'); % 设置更新频率为1Hz
    
 set_param([modelName '/GPS_Sensor'], 'NoiseLevel', '0.5'); % 设置噪声水平为0.5米
步骤5.2:添加IMU传感器模块
  • 在 Automated Driving Toolbox > Sensors 库中导入 IMU Sensor 模块至模型编辑区域。
    • 配置设置包括采样率和噪声特性等基本参数设定。
复制代码

matlab

深色版本

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

    
 add_block('automatedDriving/IMU Sensor', [modelName '/IMU_Sensor']);
    
 set_param([modelName '/IMU_Sensor'], 'SampleFrequency', '100'); % 设置采样频率为100Hz
    
 set_param([modelName '/IMU_Sensor'], 'NoiseLevel', '0.01'); % 设置噪声水平为0.01度/秒
步骤5.3:连接传感器模块到车辆底盘模块

将GPS和IMU传感器模块的输出连接到车辆底盘模块的状态输入端口。

复制代码

matlab

深色版本

复制代码
 % 连接GPS传感器模块到车辆底盘模块

    
 add_line(modelName, [modelName '/GPS_Sensor'], [modelName '/Vehicle'], 'autorouting', 'on');
    
  
    
 % 连接IMU传感器模块到车辆底盘模块
    
 add_line(modelName, [modelName '/IMU_Sensor'], [modelName '/Vehicle'], 'autorouting', 'on');
步骤6:设置仿真参数

在建模器主菜单栏中单击 Simulation > Model Configuration Parameters 菜单项,并根据具体需求进行设置:例如60秒作为仿真时间;选择适当的求解器类型,并建议优先使用 ode45 以提高计算效率。

复制代码

matlab

深色版本

复制代码
 % 设置仿真参数

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

在完成上述步骤后进行下一步操作。单击工具栏中的Run按钮以启动仿真过程,并监控车辆行为以确保其能够准确地沿着预先设定的路线行驶。

步骤8:性能评估

为了系统性地评估路径跟踪控制系统的表现,并确保其稳定性和可靠性运行状态的维持能力

跟踪误差

通过比较车辆的实际位置与参考路径之间的误差,评估系统的跟踪精度。

复制代码

matlab

深色版本

复制代码
 % 获取跟踪误差统计数据

    
 trackingError = getTrackingError(); // 自定义函数获取跟踪误差
    
  
    
 % 显示结果
    
 disp(['Average Tracking Error: ', num2str(mean(trackingError)), ' meters']);
动态响应特性

采用阶跃响应和斜坡响应测试方法,对系统的动态特性和行为特征进行详细分析,并包括超调量和振荡次数等关键指标。

复制代码

matlab

深色版本

复制代码
 % 计算超调量

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

基于对车辆运行轨迹及相关传感器数据的分析与处理,能够保证车辆平稳地沿着预先设定的道路行驶,并避开潜在的障碍物以保持道路稳定性.

复制代码

matlab

深色版本

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

    
 trajectory = getTrajectory();
    
  
    
 % 检查是否发生偏离
    
 if any(isDeviation(trajectory)) % 自定义函数检查是否发生偏离
    
     disp('Warning: Vehicle deviated from the planned path.');
    
 else
    
     disp('Vehicle successfully followed the planned path.');
    
 end
步骤9:性能优化

为了提高路径跟踪控制系统性能的提升目标,我们可以采取这些改善方案来实现系统性能的进一步提升。

调整控制器参数

人工微调纯追踪控制器中的调节参数(如前方探测距离和最大偏转幅度),直至满意的一致性跟踪精度

复制代码

matlab

深色版本

复制代码
 % 修改纯追踪控制器中的前视距离

    
 set_param([modelName '/PurePursuit_Controller'], 'LookaheadDistance', '15'); % 更改为15米
    
  
    
 % 修改纯追踪控制器中的最大转向角
    
 set_param([modelName '/PurePursuit_Controller'], 'MaxSteeringAngle', '0.6'); % 更改为0.6弧度
使用更先进的控制器

使用更先进的控制器(如MPC)来提高跟踪的准确性和鲁棒性。

复制代码

matlab

深色版本

复制代码
 % 使用模型预测控制器

    
 add_block('controlSystem/MPC Controller', [modelName '/MPC_Controller']);
增加冗余机制

引入冗余机制(如多传感器融合),提高定位和跟踪的可靠性和稳定性。

复制代码

matlab

深色版本

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

    
 add_block('automatedDriving/Lidar Sensor', [modelName '/Lidar_Sensor']);
    
 set_param([modelName '/Lidar_Sensor'], 'Range', '100'); % 设置激光雷达的最大探测范围为100米
    
  
    
 % 将激光雷达传感器模块的输出连接到车辆底盘模块
    
 add_line(modelName, [modelName '/Lidar_Sensor'], [modelName '/Vehicle'], 'autorouting', 'on');

通过 Simulink Test 软件包进行自动化测试方案设计和验证工作。 该软件包能够帮助我们实现系统在各种不同的工作情境下运行的高效监控与评估功能。

复制代码

matlab

深色版本

复制代码
 % 创建测试用例

    
 testCase = sltest.testmanager.TestFile('PathFollowing_TestCases');
    
 testCase.addTestSuite('PathFollowing_TestSuite');
    
 testCase.addTestCase('Scenario_1', 'Initial_Position_0_0');
    
  
    
 % 运行测试
    
 sltest.testmanager.run(testCase);
四、总结

按照本指南阐述了如何利用Simulink搭建一个用于路径跟踪控制的仿真模型,并对所构建的仿真模型进行了性能评估。主要涵盖以下内容:

  • 背景介绍:深入掌握路径跟踪控制系统的原理及其在自动驾驶技术中的实际应用。
    • 所需工具和环境:概述用于构建路径跟踪控制仿真系统所需的主要工具及运行环境。
    • 步骤详解:详细描述从零开始构建完整路径跟踪控制系统模型的过程,并涵盖车辆动力学建模、智能导航算法开发(包括复杂环境下的鲁棒性测试)、动态系统稳定性分析以及仿真实验的设计与实施。
    • 性能评估:采用系统运行过程中的关键性能指标(如位置误差累积度量、速度一致性检验标准以及安全性综合评价体系)来全面评估系统的性能表现。
    • 性能优化:通过优化反馈调节器参数设置(如PID调节器增益)、引入冗余组件以增强容错能力以及采用新型智能控制算法来进一步提升系统性能。

全部评论 (0)

还没有任何评论哟~