Simulink开发项1000例实战专栏--实例220:基于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:添加噪音水平评估模块(可选)
步骤4.4:连接车辆底盘模块到舒适性评估模块
步骤5:设计驾驶循环工况
步骤5.1:添加驾驶循环模块
步骤5.2:连接驾驶循环模块到控制模块
步骤6:设置仿真参数
步骤7:运行仿真
步骤8:性能评估
加速度平顺性分析
振动水平分析
噪音水平分析(可选)
步骤9:性能优化
调整控制器参数
引入主动悬挂系统
使用更精确的动力总成模型
使用Simulink Test进行自动化测试
四、总结
基于Simulink的自动驾驶车辆舒适性评估仿真
一、背景介绍
自动驾驶车辆的评价 是一个重要的研究领域。该研究主要致力于通过改进车辆的动力学行为控制和行驶路线规划技术,在提升乘客在自动驾驶过程中的乘坐体验方面取得显著成效。具体的评价指标包括加速度平稳度、震动强度以及噪声抑制能力等多个关键参数。本实例展示了如何利用Simulink搭建用于测试自动驾驶车辆舒适性的仿真模型,并对其实验结果进行了详细验证
二、所需工具和环境
为了进行自动驾驶车辆舒适性评估的仿真,你需要以下工具和环境:
- MATLAB/Simulink 主要应用于模型构建与系统仿真过程。
- 自动化驾驶工具箱集成了多个功能模块以支持自动驾驶系统的设计与实现。
- 动力总成模块套件主要用于动力总成系统的模型构建与系统仿真的技术方案设计。
- Simscape Driveline 提供了机械传动系统设计者所需的建模与仿真的专业解决方案。
- Simscape Multibody 主要是用来进行多体动力学建模的高级工具(可选)。
- SimEvents 被用来执行基于事件驱动的离散事件模拟任务(可选)。
- Simulink Test 则是用来完成自动化测试规划和执行的任务(可选)。
确保你已经安装了上述工具箱,并且拥有有效的许可证。
三、步骤详解
步骤1:创建Simulink模型
首先,打开 MATLAB 并启动 Simulink 创建一个新的空白模型。
步骤1.1:打开Simulink并新建模型
- 开始MATLAB程序。
- 在命令窗口输入
simulink后打开Simulink启动界面。 - 单击“Blank Model”按钮以创建新的空模型。
matlab
深色版本
% 创建新的Simulink模型
modelName = 'AutonomousVehicleComfortAssessment';
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:设计动力总成系统
我们 have planned the development of a powertrain unit, aiming to simulate the vehicle’s power source and its energy conversion process.
步骤3.1:选择动力源类型
根据你的仿真需求选择合适动力源类型,如内燃机或电动机。
- 针对燃油车 :在
Powertrain Blockset > Powertrains > Conventional Vehicles中选择Conventional Powertrain模块。- 针对电动车 :在
Simscape Electrical > Electric Drives中选择Electric Drive模块。
- 针对电动车 :在
matlab
深色版本
% 示例:添加燃油车动力总成模块
add_block('powertrainblockset/Conventional Powertrain', [modelName '/Conventional_Powertrain']);
% 示例:添加电动车动力总成模块
add_block('simscape_electrical/Electric Drive', [modelName '/Electric_Drive']);
步骤3.2:配置动力总成参数
在不同车型或使用场景下对动力总成的关键参数进行配置,并根据具体工况需求选择合适的发动机功率曲线、电池容量等技术指标。
matlab
深色版本
% 配置燃油车动力总成参数
set_param([modelName '/Conventional_Powertrain'], 'EngineTorqueCurve', '[0, 100; 2000, 200; 4000, 300]'); % 设置发动机扭矩曲线
set_param([modelName '/Conventional_Powertrain'], 'TransmissionRatio', '3.5'); % 设置变速箱传动比
% 配置电动车动力总成参数
set_param([modelName '/Electric_Drive'], 'BatteryCapacity', '60'); % 设置电池容量为60kWh
set_param([modelName '/Electric_Drive'], 'MotorEfficiencyMap', '[0.9, 0.85; 0.8, 0.75]'); % 设置电机效率图
步骤3.3:连接动力总成模块到车辆底盘模块
将动力总成模块的输出连接到车辆底盘模块的相应输入端口。
matlab
深色版本
% 连接燃油车动力总成模块到车辆底盘模块
add_line(modelName, [modelName '/Conventional_Powertrain'], [modelName '/Vehicle'], 'autorouting', 'on');
% 或者对于电动车
add_line(modelName, [modelName '/Electric_Drive'], [modelName '/Vehicle'], 'autorouting', 'on');
步骤4:设计舒适性评估模块
我们将设计一个乘客舒适度评价系统,用于评估行驶过程中的乘客体验影响。
步骤4.1:添加加速度平顺性评估模块
- 在
Automated Driving Toolbox > Comfort Metrics库内进行模块拖放操作以导入Smoothness Metric模块至模型编辑区。- 请设置相关参数包括但不限于阈值和权重等。
matlab
深色版本
% 添加加速度平顺性评估模块
add_block('automatedDriving/Smoothness Metric', [modelName '/Smoothness_Metric']);
set_param([modelName '/Smoothness_Metric'], 'Threshold', '0.5'); % 设置加速度变化阈值为0.5m/s^2
set_param([modelName '/Smoothness_Metric'], 'Weight', '1.0'); % 设置权重为1.0
步骤4.2:添加振动水平评估模块
- 在
Automated Driving Toolbox > Comfort Metrics库中拖放Vibration Level组件至模型设计区域。- 配置参数设置:频率区间和振幅值等数值参数。
matlab
深色版本
% 添加振动水平评估模块
add_block('automatedDriving/Vibration Level', [modelName '/Vibration_Level']);
set_param([modelName '/Vibration_Level'], 'FrequencyRange', '[0, 100]'); % 设置频率范围为0-100Hz
set_param([modelName '/Vibration_Level'], 'IntensityThreshold', '0.1'); % 设置振动强度阈值为0.1g
步骤4.3:添加噪音水平评估模块(可选)
- 在
Automated Driving Toolbox > Comfort Metrics库导航至Noise Level模块并拖放至模型编辑区。- 配置设置包括分贝阈值和频率响应参数。
matlab
深色版本
% 添加噪音水平评估模块
add_block('automatedDriving/Noise Level', [modelName '/Noise_Level']);
set_param([modelName '/Noise_Level'], 'DecibelLevel', '70'); % 设置噪音级别为70dB
set_param([modelName '/Noise_Level'], 'FrequencyResponse', '[100, 1000]'); % 设置频率响应范围为100-1000Hz
步骤4.4:连接车辆底盘模块到舒适性评估模块
将车辆底盘模块的输出连接到舒适性评估模块的输入端口。
matlab
深色版本
% 连接车辆底盘模块到加速度平顺性评估模块
add_line(modelName, [modelName '/Vehicle'], [modelName '/Smoothness_Metric'], 'autorouting', 'on');
% 连接车辆底盘模块到振动水平评估模块
add_line(modelName, [modelName '/Vehicle'], [modelName '/Vibration_Level'], 'autorouting', 'on');
% 连接车辆底盘模块到噪音水平评估模块(如果适用)
add_line(modelName, [modelName '/Vehicle'], [modelName '/Noise_Level'], 'autorouting', 'on');
步骤5:设计驾驶循环工况
我们将设计一个驾驶循环工况,模拟实际道路行驶条件下的车辆行为。
步骤5.1:添加驾驶循环模块
- 在库中拖放模块到模型编辑区。
- 配置参数设置包括标准驾驶循环(如NEDC和WLTC)以及自定义驾驶循环等。
matlab
深色版本
% 添加驾驶循环模块
add_block('automatedDriving/Driving Cycle', [modelName '/Driving_Cycle']);
set_param([modelName '/Driving_Cycle'], 'CycleType', 'WLTC'); % 设置驾驶循环类型为WLTC
步骤5.2:连接驾驶循环模块到控制模块
将驾驶循环模块的输出连接到纵向和横向控制模块的输入端口。
matlab
深色版本
% 连接驾驶循环模块到纵向控制模块
add_line(modelName, [modelName '/Driving_Cycle'], [modelName '/Longitudinal_Driver'], 'autorouting', 'on');
% 连接驾驶循环模块到横向控制模块
add_line(modelName, [modelName '/Driving_Cycle'], [modelName '/Lateral_Driver'], 'autorouting', 'on');
步骤6:设置仿真参数
在模型编辑器的顶部菜单栏中单击 Simulation > Model Configuration Parameters 菜单项,并根据具体需求设置相应的参数值:包括仿真时长(例如 600 秒)、选择合适的求解器类型(建议采用 ode45)以及其他相关设置项。
matlab
深色版本
% 设置仿真参数
set_param(modelName, 'StopTime', '600'); % 模拟运行时间为600秒
set_param(modelName, 'Solver', 'ode45');
步骤7:运行仿真
完成后点击界面上的"Run"按钮启动仿真过程。监控车辆行为以确保其基于预先设定的驾驶循环以及舒适性评估策略的有效性来提升乘客体验。
步骤8:性能评估
为系统性地对自动驾驶车辆舒适性策略的效果进行全面评估,并结合多维度数据进行科学分析与优化建议的制定,请重点考察以下核心性能参数:
加速度平顺性分析
为了测定车辆在完整驾驶周期内的加速度变化情况,并对这些数据进行分析以考察其平稳性特征
matlab
深色版本
function smoothnessMetric = calculateSmoothness(vehicleAcceleration)
% 示例:计算加速度平顺性
smoothnessMetric = mean(abs(diff(vehicleAcceleration))); % 计算加速度变化的平均绝对值
end
% 获取车辆加速度数据
vehicleAcceleration = getVehicleAcceleration();
% 计算加速度平顺性
smoothnessMetric = calculateSmoothness(vehicleAcceleration);
disp(['Smoothness Metric: ', num2str(smoothnessMetric)]);
振动水平分析
通过分析车辆的振动频率和强度,评估振动水平对乘客舒适性的影响。
matlab
深色版本
function vibrationLevel = calculateVibrationLevel(vehicleSpeed)
% 示例:计算振动水平
vibrationLevel = std(vehicleSpeed); % 计算速度的标准差作为振动水平
end
% 获取车辆速度数据
vehicleSpeed = getVehicleSpeed();
% 计算振动水平
vibrationLevel = calculateVibrationLevel(vehicleSpeed);
disp(['Vibration Level: ', num2str(vibrationLevel), ' m/s']);
噪音水平分析(可选)
通过分析车辆内部和外部的噪音水平,评估噪音对乘客舒适性的影响。
matlab
深色版本
function noiseLevel = calculateNoiseLevel(vehicleSpeed)
% 示例:计算噪音水平
noiseLevel = max(vehicleSpeed) * 0.1; % 假设噪音水平与最大速度成正比
end
% 获取车辆速度数据
vehicleSpeed = getVehicleSpeed();
% 计算噪音水平
noiseLevel = calculateNoiseLevel(vehicleSpeed);
disp(['Noise Level: ', num2str(noiseLevel), ' dB']);
步骤9:性能优化
为了有效提升自动驾驶系统舒适度控制机制的性能指标,我们可以采用多种技术手段来实现这一目标。
调整控制器参数
人工调节纵向与横向的控制模块中的参数(例如最大加速度、转向角速率),直至获得预期的舒适性效果。
matlab
深色版本
% 修改纵向控制模块中的最大加速度
set_param([modelName '/Longitudinal_Driver'], 'MaxAcceleration', '2.5'); % 更改为2.5m/s^2
% 修改横向控制模块中的最大转向角速率
set_param([modelName '/Lateral_Driver'], 'MaxSteeringRate', '0.4'); % 更改为0.4rad/s
引入主动悬挂系统
使用主动悬挂系统来进一步减少车辆的振动水平,提高乘客的舒适度。
matlab
深色版本
% 添加主动悬挂系统模块
add_block('simscape_driveline/Active Suspension', [modelName '/Active_Suspension']);
set_param([modelName '/Active_Suspension'], 'DampingCoefficient', '1000'); % 设置阻尼系数为1000Ns/m
使用更精确的动力总成模型
采用更为精准的动力总成模型(例如特别考虑了复杂的热交换系统设计)以提升仿真结果的可信度
matlab
深色版本
% 使用详细的动力总成模型
add_block('powertrainblockset/Detailed Powertrain', [modelName '/Detailed_Powertrain']);
使用Simulink Test进行自动化测试
借助Simulink Test工具箱实施自动化测试流程并进行验证工作, 确保系统在各种驾驶模式下具有良好的稳定性和可靠性.
matlab
深色版本
% 创建测试用例
testCase = sltest.testmanager.TestFile('AutonomousVehicleComfort_TestCases');
testCase.addTestSuite('AutonomousVehicleComfort_TestSuite');
testCase.addTestCase('Scenario_1', 'Standard_WLTC_Cycle');
% 运行测试
sltest.testmanager.run(testCase);
四、总结
通过本指南, 我们阐述了基于Simulink平台构建一个用于评估自动驾驶车辆舒适性的仿真系统的方法, 并对该系统进行了仿真实验以及性能指标分析.
- 背景介绍:掌握自动驾驶车辆舒适性评估的基本概念及其在智能驾驶系统中的应用价值。
- 所需工具和环境:详细说明进行自动驾驶车辆舒适性评估仿真时需要用到的工具及运行环境。
- 步骤详解:从零开始构建一个完整的自动驾驶车辆舒适性评估模型体系,并分别对动力学建模过程、动力总成系统设计要点、舒适性评价模块开发要点以及驾驶循环工况设定要点进行详细阐述。
- 性能评估:采用加速度平顺性分析、振动水平测试以及噪音水平测试等多种指标对系统性能进行全面评估。
- 性能优化:通过优化控制器参数设置、引入主动悬架技术或采用更为精确的动力总成模型设计来提升系统性能。
