手把手教你学Simulink实例--基于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 :主要用于建模与仿真。
 - Automated Driving Toolbox :专门提供实现自动驾驶所需的工具模块。
 - Powertrain Blockset :此模块集特别适用于动力总成系统建模与仿真的需求。
 - 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:添加纵向和横向控制模块
- 在指定库中进行模块拖放操作。
- 配置相关参数包括最大加速度值以及转向角速率设置。
 
 
        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:选择动力源类型
根据你的仿真需求选择合适动力源类型,如内燃机或电动机。
- 针对燃油车 ,我们采用 Powertrain\ Blockset\ >\ Powertrains\ >\ Conventional\ Vehicles 中的 常规动力总成系统 模块。
- 针对电动车 ,我们配置为 Simscape\ Electrical\ >\ Electric\ Drives 中的 电动驱动系统 模块。
 
 
        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:添加加速度平顺性评估模块
- 在指定库中导入‘舒适度指标’模块至模型编辑区。
- 配置参数设置如阈值、权重等。
 
 
        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:添加驾驶循环模块
- 在 
Automated Driving Toolbox > Scenario Builder库中导入Driving Cycle模块至模型编辑区。- 配置参数包括标准驾驶循环(例如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构建了一个用于自动驾驶车辆舒适性评估的仿真模型,并对其进行了详细的设计与验证
- 背景介绍:了解自动驾驶车辆的舒适性评价及其在智能驾驶体系中的应用价值。
- 所需工具和环境:详细列出用于构建自动驾驶车辆舒适性仿真模型所需的必要工具与运行环境。
 - 步骤详解:从基础阶段逐步构建一个完整的自动驾驶车辆舒适性评估模型,并依次完成以下工作环节:首先进行车辆动力学建模;其次完成动力总成系统设计;接着开发舒适性评估模块;随后建立驾驶循环工况并模拟运行;最后完成仿真结果验证与数据分析。
 - 性能评估:通过加速度平顺性分析来判断系统的稳定性;借助振动水平分析来检测系统的均衡性;以及利用噪音水平分析来确保安静度。
 - 性能优化:通过微调控制器参数设置以优化控制效果;或者引入主动悬架系统以提升乘坐舒适度;此外还可以采用更为精准的动力传递模型以进一步增强系统性能。
 
 
