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:智能车道保持辅助系统仿真

智能车道保持辅助系统(Lane Keeping Assist System, LKAS)是当代高级驾驶辅助系统(ADAS)中的一部分。LKAS通过摄像头等传感器用于检测车辆相对于车道线的位置,并自动地进行转向调整,从而确保驾驶员安全地维持在车道内行驶。

本教程将深入讲解这一过程,并介绍其应用方法以实现智能车道保持辅助系统的仿真平台构建

一、背景介绍

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

  1. 传感器模块:通过感知车道线的状态并获取车辆相对于车道线的位置信息。
  2. 控制器模块:基于传感器采集的数据计算必要的偏转角,并输出控制指令。
  3. 执行器模块:依据控制器输出的指令调节车辆的转向角。

在本实例中,在采用摄像头传感器的基础上进行车道线识别,并以PID控制器为基础实现车辆的车道保持功能。

二、所需工具和环境

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

  1. MATLAB/Simulink平台主要应用于系统建模与仿真过程。
  2. 自动化驾驶技术集成库整合了多种自动驾驶相关功能模块。
  3. 智能传感器融合与目标跟踪工具箱专注于对多源传感器数据进行处理与分析。
  4. 车辆动力学建模套件专门针对汽车动力学行为建立模型,并提供相应的计算功能。
  5. 控制系统设计器提供了从控制系统设计到性能分析的完整解决方案。
  6. Simulink控制系统优化器专注于帮助实现最优控制策略配置与性能调优。

三、步骤详解

步骤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:添加车辆动力学模块

  • 按照以下路径拖放 Longitudinal Driver 模块至模型编辑区:
    $\texttt{Vehicle Dynamics Blockset} > \texttt{Vehicle Library} > \texttt{Longitudinal Driver Inputs}$
  • 按照以下路径导入 Steering System 模块至模型编辑区:
    $\texttt{Vehicle Dynamics Blockset} > \texttt{Vehicle Library} > \texttt{Steering System}$
  • 按照以下路径导入 Rigid Body 模块至模型编辑区:
    $\texttt{Vehicle Dynamics Blockset} > \texttt{Vehicle Library} > \texttt{Chassis}$
复制代码

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 狗头 directory 中拖放 Camera Sensor module 到 workbench 区域。
    • 配置属性包括镜头视角与分辨率设置。
复制代码

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

  • Lane Detector 模块从 Automated Driving Toolbox > Lane Detection 库中拖入模型编辑区。
    • 配置参数设置包括但不限于检测范围、最小检测宽度等多个关键指标。
复制代码

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 控制器来具备车道保持功能。该控制器通过摄像头传感器采集的数据来调节 steering angle 以实现车辆在车道内的行驶状态。

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

  • 在 Simulink 的 Continuous 库中将 PID Controller 组件拖放至模型编辑区。
    • 配置基本参数设置(例如:比例系数 Kp 建议设置在 [合理范围];积分系数 Ki 建议选择 [合适值];微分系数 Kd 则应控制在 [限定范围内])。
复制代码

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)

还没有任何评论哟~