Advertisement

基于simulink的智能车道保持辅助系统仿真

阅读量:

目录

手把手教你学Simulink:智能车道保持辅助系统仿真

一、背景介绍

二、所需工具和环境

三、步骤详解

步骤1:创建Simulink模型

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

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

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

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

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

步骤3.2:添加车道线检测模块

步骤4:设计车道保持控制器

步骤4.1:添加PID控制器模块

步骤4.2:设计转向控制器

步骤4.3:连接反馈回路

步骤5:设置仿真参数

步骤6:运行仿真

步骤7:分析仿真结果

车辆轨迹

转向角变化波形

上升时间和调节时间

动态响应特性

安全性分析

步骤8:优化车道保持控制器

调整PID参数

增加前馈控制

使用更先进的控制算法

四、总结


手把手教你学Simulink:智能车道保持辅助系统仿真

现代高级驾驶辅助系统(ADAS)中的重要组成部分是智能车道维持辅助系统(Lane Keeping Assist System, LKAS)。作为这一关键 subsystem的一部分,LKAS通过摄像头等多组传感器持续监测车辆与车道线之间的相对位置关系,并根据检测结果自动调节转向方向。这种设计旨在确保车辆能够稳定地维持在当前行驶的车道内,并通过实时反馈机制优化驾驶体验。

这份教程将深入讲解基于Simulink平台及相关的工具包构建智能车道保持辅助系统仿真模型的过程。

一、背景介绍

智能车道保持辅助系统(LKAS) 主要包括以下几个部分:

  1. 传感器模块:负责监测车道线的位置信息以及车辆相对于车道线的当前位置信息。
  2. 控制器模块:依据传感器采集的数据估算所需转弯角度,并输出相应的控制指令。
  3. 执行器模块:依据控制器发出的指令调节车辆转向角以确保沿预设的道路行驶。

在此实例中,我们采用摄像头传感器用于检测车道线,并通过PID控制器完成车道保持功能。

二、所需工具和环境

为了进行车道保持辅助系统的仿真,你需要以下工具和环境:

MATLAB/Simulink 提供建模与仿真功能。
自动化驾驶系统相关的工具箱包含多种功能模块。
本 toolbox 专注于传感器数据融合与处理。
支持车辆动力学建模的相关功能。
提供设计与分析自动控制系统的解决方案。
Simulink Control Design 支持控制器设计与优化过程。

三、步骤详解

步骤1:创建Simulink模型

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

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

  • 打开MATLAB应用程序。
  • 在命令窗口中执行命令simulink后打开Simulink启动界面。
  • 单击“Blank Model”按钮生成一个新的空模型文件。
复制代码

matlab

深色版本

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

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

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

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

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

  • 在指定目录下进行指定模块的拖放操作并将其放置于模型编辑区。
  • 在指定目录下执行指定模块的拖放操作并将其放置于模型编辑区。
  • 在指定目录下进行指定模块的 drag-and-drop 操作并将之放置至 model editor 区。
复制代码

matlab

深色版本

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

    
 add_block('vehicleDynamics/Longitudinal Driver', [modelName '/Longitudinal_Driver']);
    
 add_block('vehicleDynamics/Steering System', [modelName '/Steering_System']);
    
 add_block('vehicleDynamics/Rigid Body', [modelName '/Rigid_Body']);

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

我们将使用摄像头传感器来检测车道线的位置。

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

  • 在 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.2:添加车道线检测模块

  • Automated Driving Toolbox > Lane Detection 库中拖放 Lane Detector 模块至模型编辑区。
    • 配置参数包括检测范围、最小检测宽度等详细设置。
复制代码

matlab

深色版本

复制代码
 % 添加车道线检测模块

    
 add_block('automatedDriving/Lane Detector', [modelName '/Lane_Detector']);
    
 set_param([modelName '/Lane_Detector'], 'DetectionRange', '50'); % 设置检测范围为50米
    
 set_param([modelName '/Lane_Detector'], 'MinWidth', '2'); % 设置最小检测宽度为2米

步骤4:设计车道保持控制器

本系统采用 PID 控制器完成车道维持任务。通过摄像头传感器捕捉到的数据信息来控制方向盘的角度,并确保车辆持续位于行驶道中间位置。

步骤4.1:添加PID控制器模块

  • Simulink > Continuous 库中导入 PID Controller 模块到模型编辑区。
    • 设置初始参数包括比例系数 K_p、积分系数 K_i 和微分系数 K_d
复制代码

matlab

深色版本

复制代码
 % 添加PID控制器模块

    
 add_block('simulink/Continuous/PID Controller', [modelName '/PID_Controller']);
    
 set_param([modelName '/PID_Controller'], 'P', '1'); % 设置比例系数Kp为1
    
 set_param([modelName '/PID_Controller'], 'I', '0.1'); % 设置积分系数Ki为0.1
    
 set_param([modelName '/PID_Controller'], 'D', '0.01'); % 设置微分系数Kd为0.01

步骤4.2:设计转向控制器

  • 测量车辆在车道中的位置偏差(即横向误差)。
    • 被PID控制器用于调整转向角的过程设计中,在系统响应中观察到其性能表现良好。
复制代码

matlab

深色版本

复制代码
 % 计算横向误差

    
 lateralError = calculateLateralError(lanePosition); // 自定义函数计算横向误差
    
  
    
 % 添加转向控制器
    
 add_block('simulink/User-Defined Functions/MATLAB Function', [modelName '/Steering_Controller']);
    
  
    
 % 编写MATLAB Function代码
    
 function steeringAngle = fcn(lateralError)
    
     steeringAngle = pid(lateralError); % 使用PID控制器计算转向角度
    
 end

步骤4.3:连接反馈回路

将摄像头传感器模块通过信号传递的方式向车道线检测模块提供输入信号,并通过同样的方式依次接通车道线检测模块与转向控制器模块之间的信号传输;随后完成转向控制器模块与车辆动力学模型之间的信号传输,并最终完成闭环控制系统中各子系统的整合

复制代码

matlab

深色版本

复制代码
 % 连接各模块

    
 add_line(modelName, [modelName '/Camera_Sensor'], [modelName '/Lane_Detector'], 'autorouting', 'on');
    
 add_line(modelName, [modelName '/Lane_Detector'], [modelName '/Steering_Controller'], 'autorouting', 'on');
    
 add_line(modelName, [modelName '/Steering_Controller'], [modelName '/Steering_System'], 'autorouting', 'on');

步骤5:设置仿真参数

在模型编辑器顶部菜单栏中单击 Simulation > Model Configuration Parameters 选项,在弹出的设置对话框中根据需求调节仿真时长(例如60秒),建议采用龙格-库塔求解器中的ode45方法,并对其他相关设置项进行必要的调整以优化运行效果

复制代码

matlab

深色版本

复制代码
 % 设置仿真参数

    
 set_param(modelName, 'StopTime', '60'); % 模拟运行时间为60秒
    
 set_param(modelName, 'Solver', 'ode45');

步骤6:运行仿真

完成后单击工具栏中的运行按钮以启动仿真过程观察车辆运动轨迹以及转向角度变化特征确保系统运行稳定性和安全性达到预期指标

步骤7:分析仿真结果

借助仿真手段进行研究和分析,则能系统地获取其各项性能参数数据。这些参数包括行驶路径、转向动作的变化情况、快速反应时间以及系统反应速度等关键指标。以下是一些常用的分析手段:

车辆轨迹

通过 Scope 模块观察车辆的行驶轨迹,确保其始终在车道内行驶。

转向角变化波形

利用 Scope 模块监测转向角的变化曲线,并保证其稳定性和安全性达到设计标准

上升时间和调节时间

通过对转向角波形的分析研究, 可以进一步得出系统的上升时间和调节时间这两个关键参数的具体数值. 其中, 上升时间即为系统从初始状态下的转向角度逐步提升至目标设定值所需要的时间长度; 调节时间则指系统达到并持续维持在目标转角周围指定误差范围内所消耗的时间间隔.

复制代码

matlab

深色版本

复制代码
 % 获取转向角数据

    
 steeringAngle = getSteeringAngle();
    
  
    
 % 计算上升时间和调节时间
    
 riseTime = calculateRiseTime(steeringAngle); % 自定义函数计算上升时间
    
 settlingTime = calculateSettlingTime(steeringAngle); % 自定义函数计算调节时间
    
  
    
 % 显示结果
    
 disp(['Rise Time: ', num2str(riseTime), ' seconds']);
    
 disp(['Settling Time: ', num2str(settlingTime), ' seconds']);

动态响应特性

采用阶跃响应测试法或斜坡响应测试方法来分析系统的动态性能特征,并关注其超调度、振荡次数等指标。

复制代码

matlab

深色版本

复制代码
 % 计算超调量

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

安全性分析

通过对行驶路线和实时监测数据的分析,能够保证车辆持续处于车道内,并防止偏移出车道线.

复制代码

matlab

深色版本

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

    
 trajectory = getTrajectory();
    
  
    
 % 检查是否偏离车道
    
 if any(isOutOfLane(trajectory)) % 自定义函数检查是否偏离车道
    
     disp('Warning: Vehicle is out of the lane.');
    
 else
    
     disp('Vehicle successfully stayed within the lane.');
    
 end

步骤8:优化车道保持控制器

为了提高车道保持控制器的性能水平, 我们可以通过微调PID参数、引入前馈控制机制或采用更为先进的控制算法等手段来进行相应的优化与改进

调整PID参数

通过人工调节 PID 参数(例如常见的参数包括比例系数 Kp、积分系数 Ki 和微分系数 Kd),以实现系统性能的满意化)

复制代码

matlab

深色版本

复制代码
 % 调整PID控制器参数

    
 set_param([modelName '/PID_Controller'], 'P', '1.2'); % 增加比例系数Kp
    
 set_param([modelName '/PID_Controller'], 'I', '0.15'); % 增加积分系数Ki
    
 set_param([modelName '/PID_Controller'], 'D', '0.02'); % 增加微分系数Kd
    
  
    
 % 重新运行仿真
    
 sim(modelName);

增加前馈控制

采用前馈控制策略(Feedforward Control),预测车辆的运动轨迹,并从而实现对转向角度的精确调节。

复制代码

matlab

深色版本

复制代码
 % 添加前馈控制模块

    
 add_block('simulink/User-Defined Functions/MATLAB Function', [modelName '/Feedforward_Controller']);
    
  
    
 % 编写MATLAB Function代码
    
 function feedforwardSignal = fcn(predictedLateralError)
    
     feedforwardSignal = calculateFeedforward(predictedLateralError); % 自定义函数计算前馈控制信号
    
 end

使用更先进的控制算法

采用更为先进的控制算法(例如滑模控制、模糊逻辑控制或模型预测控制)以优化系统的性能指标。

复制代码

matlab

深色版本

复制代码
 % 使用模型预测控制(MPC)

    
 add_block('simulink/Control System Toolbox/Model Predictive Control Toolbox/MPC Controller', [modelName '/MPC_Controller']);

四、总结

本教程旨在阐述智能车道保持辅助系统仿真在Simulink中的具体实现。

  • 背景介绍:了解智能车道保持辅助系统及其在自动驾驶技术中的应用价值。
  • 所需工具和环境:阐述实现车道保持辅助系统仿真所必需的工具与工作环境。
  • 步骤详解:详细说明从零开始构建完整的车道保持辅助系统模型,并设计相应的控制器以完成仿真过程。
  • 分析仿真结果:通过车辆行驶轨迹、转向角度变化、上升时间、调节时间等参数的变化情况;以及超调量和系统的安全性指标来进行性能评估。
  • 优化车道保持控制器:通过微调PID参数设置;引入前馈控制策略;或者采用更为先进的控制算法来进一步提升系统的性能表现。

全部评论 (0)

还没有任何评论哟~