尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

基于Simulink的汽车行驶阻力建模与仿真:从公式到子系统实现

基于Simulink的汽车行驶阻力建模与仿真:从公式到子系统实现 《基于Simulink的汽车动力性能建模与仿真》这个系列已经讲到第005讲了。前几讲我们把整车动力性能仿真的整体框架搭建起来了也明确了动力传递路径上的关键模块。这一讲要完成一个非常重要的前置环节计算汽车行驶阻力子系统建模。为什么说它重要因为后续无论做驱动力-行驶阻力平衡图、加速度曲线还是爬坡度计算都逃不开这个子系统输出的阻力值。阻力算不准后面所有性能指标全都会偏。关于这个子系统的模型结构网上讨论很多但真正落到Simulink里能直接跑通、能复用、能接C代码生成的实现方式反而不多。这一讲就用一套完整的建模流程把滚动阻力、空气阻力、坡度阻力、加速阻力四个部分全部拆开讲清楚。1. 核心能力速览在开始建模之前先明确这套子系统在整车仿真项目里的定位和能力边界。能力项说明模块类型Simulink 子系统Subsystem主要功能计算汽车行驶过程中的滚动阻力、空气阻力、坡度阻力、加速阻力输入信号车速、加速度、坡度角、整车质量、重力加速度等输出信号总行驶阻力、各分项阻力适用场景动力性能仿真、经济性仿真、整车纵向动力学模型支持平台MATLAB/SimulinkR2018b 及以上版本均可扩展能力可封装为原子子系统支持生成 C 代码可被 App Designer 或外部程序调用硬件门槛无需 GPU普通办公电脑可运行建议内存 8GB 以上批量任务可通过脚本批量修改参数并运行多组工况仿真从工程实践来看这套子系统不是只能给第005讲用。它是整车纵向动力学模型的一个公共基础模块之后做百公里加速仿真、最高车速仿真、爬坡性能仿真甚至和 Carsim 做联合仿真都可以直接复用。2. 理论基础汽车行驶阻力方程汽车直线行驶时的总阻力由四部分构成滚动阻力 F_f空气阻力 F_w坡度阻力 F_i加速阻力 F_j总行驶阻力可以写成F_res F_f F_w F_i F_j四个阻力的计算公式如下。2.1 滚动阻力滚动阻力来源于轮胎与路面接触区域的变形和能量损耗计算公式为F_f G · f · cos(alpha)其中G m · g为整车重力单位 Nf 为滚动阻力系数alpha 为道路坡度角单位 radm 为整车质量单位 kgg 为重力加速度单位为 m/s²滚动阻力系数 f 在不同路面上差异较大。混凝土路面一般为 0.010 到 0.018碎石路面更高一些。在做整车动力性能仿真时通常把 f 设置为常数也可以写成车速的一次函数或二次函数用查表模块实现。2.2 空气阻力空气阻力与车速的平方成正比。工程上常用以下经验公式F_w (C_D · A · u²) / 21.15其中C_D 为空气阻力系数A 为迎风面积单位 m²u 为汽车行驶速度单位 km/h21.15 为考虑空气密度等因素后的综合系数这个公式在国内汽车理论教材中使用广泛。它把速度单位限定为 km/h计算得到的是空气阻力单位为 N。如果模型中的车速单位是 m/s需要先换算成 km/h再进行平方计算。2.3 坡度阻力坡度阻力是重力沿坡道方向的分力F_i G · sin(alpha)注意这里的 alpha 是坡道角单位是 rad。工程上坡度经常用百分比表示比如 5% 的坡度对应 tan(alpha) 0.05。建模时如果输入的是百分比坡度需要先做反正切换算再送入 sin 模块。2.4 加速阻力加速阻力是车辆加速时需要克服的惯性力F_j delta · m · (du/dt)其中delta 为旋转质量换算系数du/dt 为车辆纵向加速度单位 m/s²这里需要特别注意delta 不是常数。它和飞轮转动惯量、车轮转动惯量、变速器传动比、主减速器传动比有关。手动挡车型可以按照经验公式估算自动挡或电动车则要根据动力系统转动惯量计算。在刚开始建模时可以先给一个近似值比如 1.1 到 1.3后期再根据传动系统参数精化。3. 适用场景与使用边界这套行驶阻力子系统适合以下场景整车动力性能前期开发阶段的方案对比发动机或电机外特性曲线给定后的动力性仿真传动系统参数匹配与优化与 Simulink 中的整车纵向动力学模型联合仿真作为 MIL 测试的被控对象模型同时也要说清楚它不适合什么场景不适合需要精确考虑轮胎侧偏特性的操纵稳定性仿真不适合需要高频振动分析的平顺性仿真不适合考虑发动机热管理、制动热衰退等强耦合问题的仿真如果要求非常高的阻力精度需要使用 Carsim 等专业车辆动力学软件或进行实车道路滑行试验获取阻力系数另外提醒一下如果是把模型用于论文或者商业项目一定要记录阻力系数来源。滚动阻力系数、空气阻力系数这些参数优先参考实车试验数据或整车厂提供的设计参数。不要随便从网上抄一个数据就塞进模型。4. 环境准备与前置条件这一讲的内容不挑计算机配置也不需要 GPU主要准备工作如下。4.1 软件版本推荐使用 MATLAB R2018b 及以上版本。这个版本开始Simulink 的子系统封装和总线信号处理能力已经非常成熟。如果电脑上装的是 R2022b、R2023a 或更新版本操作路径基本一致。需要安装以下工具箱MATLAB 基础环境SimulinkSimulink Control Design可选做线性化分析时用MATLAB Coder / Simulink Coder可选生成 C 代码时用4.2 基础参数准备建模前先把车辆的输入参数整理成表格。以一台常见的乘用车为例参数如下参数名称符号数值单位整车质量m1500kg重力加速度g9.8m/s²滚动阻力系数f0.015-空气阻力系数C_D0.32-迎风面积A2.2m²旋转质量换算系数delta1.15-这些参数建议在 MATLAB 工作区里定义或者在模型里用常量模块统一维护。不要散落在各个 Gain 模块里否则后面调试时会很痛苦。4.3 模型文件规划建议按照以下目录结构管理文件vehicle_dynamics/ ├── model/ │ └── vehicle_resistance.slx ├── data/ │ └── vehicle_params.m ├── results/ │ └── simulation_output.mat └── scripts/ └── run_simulation.m这样做的目的是把模型文件、参数脚本、仿真结果分离开。后面做批量仿真时只需要修改 data 目录下的参数脚本不需要改动 Simulink 模型结构。5. 计算行驶阻力子系统建模步骤下面进入核心操作部分。整个子系统分为四个阻力计算模块最后汇总输出。5.1 新建模型并创建子系统打开 MATLAB在命令行输入simulink新建一个空白模型。在模型窗口中从 Simulink 库浏览器中拖入一个 Subsystem 模块命名为VehicleResistance。然后双击进入子系统内部先在内部添加三个 Inport 和一个 Outport车速输入v_kmh单位 km/h坡度输入grade_percent单位 %加速度输入a_mps2单位 m/s²阻力输出F_res单位 N这里有个设计决策要说明重力加速度、整车质量、阻力系数等参数不放在输入端口而是在子系统内部用常量模块定义。这样从外部看子系统的接口更简洁调用方只需要提供车速、坡度、加速度三个量。5.2 滚动阻力建模滚动阻力的公式是 F_f m · g · f · cos(alpha)。由于输入的坡度是百分比需要先换算成角度。坡度百分比的定义是坡高与水平距离的比值即 tan(alpha) grade_percent / 100。所以alpha atan(grade_percent / 100)在 Simulink 中搭建步骤如下将grade_percent输入信号送入 Gain 模块增益为 1/100。Gain 输出接入 Trigonometric Function 模块选择 atan输出 alpha单位 rad。alpha 接入第二个 Trigonometric Function 模块选择 cos。cos 输出乘以重力 G m · g。再乘以滚动阻力系数 f。重力 G 可以用 Constant 模块组合质量 m 常量乘以重力加速度 g 常量。也可以直接用 Gain 模块增益值设为 m · g 的乘积结果。推荐后一种方式减少模块数量。构建完成后的连线方式如下grade_percent -- Gain(1/100) -- atan -- cos -- Gain(m*g) -- Gain(f) -- F_f5.3 空气阻力建模空气阻力公式是 F_w (C_D · A · u²) / 21.15。由于公式中的车速 u 单位是 km/h和外部输入的车速一致所以这一步不需要单位换算。在 Simulink 中搭建步骤如下将v_kmh输入信号接入 Math Function 模块选择 square得到 u²。u² 乘以 C_D。再乘以迎风面积 A。最后除以 21.15。对应的连线v_kmh -- square -- Gain(C_D) -- Gain(A) -- Gain(1/21.15) -- F_w注意这里的常量 21.15 是一个经验综合系数。如果后续你想要更精确的空气阻力模型可以把它拆成 0.5 · rho · C_D · A 的形式其中 rho 为空气密度默认取 1.2258 kg/m³但此时车速单位必须换算成 m/s。这里先保持经验公式工程上完全够用。5.4 坡度阻力建模坡度阻力公式是 F_i G · sin(alpha)。这里复用 5.2 中已经计算出来的 alpha。把 alpha 信号引到 Trigonometric Function 模块的 sin 上再乘以重力 G 即可。alpha -- sin -- Gain(m*g) -- F_i如果你的模型里希望输入的是坡度角而不是坡度百分比那么 5.2 中的换算部分可以去掉直接把角度输入接入 cos 和 sin 两个分支即可。但推荐采用百分比输入因为实际道路设计时更常用百分比坡度。5.5 加速阻力建模加速阻力公式是 F_j delta · m · (du/dt)。从前面的接口定义可以看到加速度a_mps2已经作为外部输入进来了。加速度信号可以直接从整车纵向动力学模型中的车速积分模块前面引出也可以由外部模型提供。搭建步骤如下将a_mps2输入信号接入 Gain 模块增益为 delta。再乘以质量 m。a_mps2 -- Gain(delta) -- Gain(m) -- F_j5.6 阻力汇总输出在子系统内部的最后一步把四个阻力相加。从 Simulink 库浏览器中拖入一个 Add 模块双击设置为四个输入口。依次连接F_f -- Add F_w -- Add F_i -- Add F_j -- Add Add 输出 -- Outport(F_res)到这一步行驶阻力子系统的核心计算逻辑已经完成了。5.7 子系统封装与参数界面为了让外部使用者不需要进子系统内部就能修改质量、阻力系数等参数可以对子系统做封装处理。右键单击子系统模块选择 Mask Create Mask。然后在参数编辑区添加以下参数m整车质量f滚动阻力系数C_D空气阻力系数A迎风面积delta旋转质量换算系数g重力加速度把子系统内部的常量模块替换成 Mask 参数引用。这样在模型根目录里只要双击子系统图标就可以直接填写参数不需要一层层进入子系统内部修改。封装面板中的参数对话框设置如下质量 m (kg) : 1500 滚动阻力系数 f : 0.015 空气阻力系数 C_D : 0.32 迎风面积 A (m²) : 2.2 旋转质量换算系数 : 1.15 重力加速度 (m/s²) : 9.8封装之后子系统的可维护性会有明显提升。以后换一套整车参数不需要打开模型编辑器去改 Gain 系数直接在封装对话框里改数值就行。6. 模型参数设置与功能测试子系统建完后需要搭建一个最小测试环境来验证物理单位方向是否正确、量级是否合理。6.1 搭建测试模型为了单独测试阻力子系统可以在模型根目录添加以下模块三个 Constant 模块分别给车速、坡度、加速度输入测试值一个 Scope 模块观察阻力输出设置测试条件为车速坡度加速度36 km/h0%0 m/s²72 km/h0%0 m/s²108 km/h5%0.5 m/s²120 km/h10%1.0 m/s²6.2 用 MATLAB 脚本做数值验证Simulink 模型中跑仿真是一方面更严谨的做法是用 MATLAB 脚本写一个理论计算函数然后把两种方式的结果对拍。下面给出一段测试脚本可以直接复制到 MATLAB 中运行% 车辆参数 m 1500; % 整车质量 kg g 9.8; % 重力加速度 m/s^2 f 0.015; % 滚动阻力系数 Cd 0.32; % 空气阻力系数 A 2.2; % 迎风面积 m^2 delta 1.15; % 旋转质量换算系数 % 测试工况 v_kmh [36 72 108 120]; grade_percent [0 0 5 10]; a_mps2 [0 0 0.5 1.0]; % 理论计算 alpha atan(grade_percent / 100); F_f m * g * f * cos(alpha); F_w (Cd * A * v_kmh.^2) / 21.15; F_i m * g * sin(alpha); F_j delta * m * a_mps2; F_res F_f F_w F_i F_j; % 打印结果 for i 1:length(v_kmh) fprintf(工况 %d: F_f%.1f N, F_w%.1f N, F_i%.1f N, F_j%.1f N, F_res%.1f N\n, ... i, F_f(i), F_w(i), F_i(i), F_j(i), F_res(i)); end运行结果大致应该在以下量级36 km/h 平地匀速总阻力约 220 N 到 260 N108 km/h 平地匀速总阻力约 700 N 到 800 N120 km/h、10% 坡道、加速工况总阻力会超过 4000 N如果 Simulink 模型跑出来的数值和理论计算差异较大先检查单位换算是否正确尤其是坡度百分比转弧度的步骤。6.3 使用 MATLAB Function 模块的可选方案如果你对 Simulink 纯模块化搭建不熟悉也可以使用 MATLAB Function 模块来实现阻力计算。这种方式代码更直观适合快速搭建原型。双击 MATLAB Function 模块输入以下代码function F_res vehicle_resistance(v_kmh, grade_percent, a_mps2, m, f, Cd, A, delta, g) alpha atan(grade_percent / 100); F_f m * g * f * cos(alpha); F_w (Cd * A * v_kmh^2) / 21.15; F_i m * g * sin(alpha); F_j delta * m * a_mps2; F_res F_f F_w F_i F_j; end使用这种方法时参数 m、f、Cd、A、delta、g 可以从 MATLAB 工作区传入也可以通过 Mask 参数传入。代码方式的优点是维护简单计算逻辑一目了然缺点是不如模块化方式直观也不便于后续添加查表数据。从个人经验看前期的原型验证用 MATLAB Function 模块效率很高后期如果模型要交付给团队其他人维护建议还是转成模块化结构。两种方式并没有绝对的优劣看使用场景决定。7. 信号对象、C 代码生成与外部程序集成行驶阻力子系统建好后接下来通常会遇到三个问题怎么定义信号对象、怎么生成 C 代码、怎么被 App Designer 或外部程序调用。这三个问题虽然不是第005讲的核心内容但在实际项目中一定会碰到这里提前梳理一下。7.1 信号对象的使用如果模型生成 C 代码后希望某些信号在外部程序中可见可以为信号创建 Simulink.Signal 对象。在 MATLAB 命令行中执行F_res Simulink.Signal; F_res.CoderInfo.StorageClass ExportedGlobal; F_res.DataType double; F_res.InitialValue 0;然后在 Simulink 模型连线中双击信号线把信号名改为F_res。这样在生成代码时F_res会作为全局变量导出外部代码可以直接读取这个变量。同理也可以为四个分项阻力创建信号对象F_f Simulink.Signal; F_f.CoderInfo.StorageClass ExportedGlobal; F_f.DataType double;信号对象的命名规则建议与模型内部模块名保持一致避免生成的代码出现难以理解的变量名。7.2 生成 C 代码的操作路径Simulink 模型生成 C 代码前需要完成以下检查项求解器设置为定步长Fixed-step模型中没有无法生成代码的模块比如 Scope 模块可以保留但建议删除后生成子系统配置为原子子系统或函数封装确保生成的函数边界清晰输入输出数据类型明确尽量避免双精度和单精度随意混合在模型窗口中打开配置参数Code Generation System Target File ert.tlc选择ert.tlcEmbedded Real-Time Target这是嵌入式代码生成中最常用的目标文件。点击 Generate Code即可生成 C 代码。生成代码后可以在代码目录中看到vehicle_resistance.c和vehicle_resistance.h两个关键文件。外部程序可以直接调用模型入口函数传入车速、坡度、加速度得到总行驶阻力。7.3 在 App Designer 中调用 Simulink 模型如果你希望做一个图形化界面在 GUI 中可视化显示阻力计算结果或者仿真曲线可以通过 MATLAB 的sim命令在 App Designer 回调函数中运行 Simulink 模型。核心代码示例如下% 在 App Designer 按钮回调中 % 将界面输入的参数写入 MATLAB 工作区 m app.MassEditField.Value; f app.RollingResistanceEditField.Value; Cd app.AirDragCoeffEditField.Value; % 设置模型参数 set_param(vehicle_resistance, m, num2str(m)); set_param(vehicle_resistance, f, num2str(f)); set_param(vehicle_resistance, Cd, num2str(Cd)); % 运行仿真 sim(vehicle_resistance); % 读取仿真结果在界面上绘制 plot(app.UIAxes, tout, F_res);这样做的价值在于参数输入、仿真运行、结果展示集中在同一个界面上适合做教学演示或者快速标定工具。7.4 与 Carsim 联合仿真时的阻力模型处理如果你做过 Carsim 和 Simulink 的联合仿真会发现 Carsim 的车辆模型内部已经包含了详细的行驶阻力计算模块。此时不建议在 Simulink 侧再建一套完整的阻力模型而是把 Carsim 输出的总阻力信号直接用于后续性能计算。比较稳妥的做法是在 Simulink 模型中保留阻力子系统的接口占位但内部计算禁用直接接收 Carsim 的阻力信号。这样模型框架不变数据源切换灵活。从搜索情况看不少工程师在做 Carsim 和 Simulink 联合仿真时遇到过阻力重复计算导致驱动力不足的问题。核心原因就是在 Simulink 里又算了一遍阻力又送给了 Carsim 中的车辆模型形成双重阻力。这里要特别留意。8. 仿真性能观察与加速方法行驶阻力子系统本身是代数运算不包含连续积分环节所以仿真速度非常快。从模型整体来看影响仿真速度的因素主要在其他模块比如车速积分环节、发动机模型、传动系统模型。这里分享一下 Simulink 纵向动力学模型仿真性能的通用观察思路这组思路对后续几讲的整体仿真同样适用。8.1 哪些模块决定仿真步长汽车动力性能仿真通常使用定步长求解器。如果你使用四阶龙格库塔法并把仿真步长设为 0.01 s那么仿真一个 100 s 的百公里加速过程需要执行 10000 个仿真步。每个仿真步内模型必须依次计算发动机或电机输出扭矩变速器传动比和传动效率驱动轮驱动力行驶阻力整车加速度车速和行驶距离积分任何一个模块出现代数环或者高增益反馈都会拖慢求解速度。8.2 如何降低仿真耗时如果发现仿真速度很慢按以下顺序检查仿真步长是否过小。定步长解算器在满足精度要求的前提下步长尽量放大比如从 0.001 s 调整到 0.01 s。是否存在代数环。出现代数环时Simulink 会在每个仿真步内进行迭代求解成倍增加计算量。是否使用了连续 PID 控制器。如果 PID 控制器参数比较激进也会造成步长减小。不要滥用 Scope 模块。每一个打开显示的 Scope 都会降低仿真交互速度。大批量仿真时把数据用To Workspace模块写入工作区关掉所有图形显示窗口。下面是一个批量仿真脚本的参考写法% 批量修改质量参数并仿真 mass_values [1200 1350 1500 1650 1800]; results zeros(length(mass_values), 1); for i 1:length(mass_values) m mass_values(i); assignin(base, m, m); % 运行仿真不显示窗口 simOut sim(vehicle_dynamics_model, StopTime, 100); % 提取最终车速 v_final simOut.get(v_kmh); results(i) v_final(end); fprintf(质量 %d kg, 最终车速 %.2f km/h\n, m, v_final(end)); end脚本里先把质量参数写入基础工作区然后循环调用 sim 命令每次只修改一个参数。这样可以很直观地观察质量变化对最终车速的影响。把StopTime设置成字符串是为了避免固化时间值方便循环复用。8.3 观察仿真进度在长时仿真时建议在命令行窗口显示仿真进度。可以这样写set_param(vehicle_dynamics_model, SimulationCommand, start);或者直接在 Simulink 模型底部的状态栏查看仿真时间。如果仿真时间推进过慢优先考虑是不是定步长设置过小或模型中存在低频高增益回路。9. 常见问题与排查方法在建模和仿真过程中有几类问题是出现频率比较高的单独列出来说明。问题现象可能原因排查方式解决方案阻力计算结果为 NaN输入中有未定义变量或除零检查 Constant 模块和 Gain 模块的参数值确认所有参数已赋值避免除以 21.15 时被除数恰好为 0坡度百分比转弧度后阻力为负atan、sin、cos 模块参数设置错误查看中间变量 alpha 的值用 Constant 模块单独测试三角函数模块模型仿真速度突然变慢模型中存在代数环在诊断设置中开启代数环检测增加 Memory 模块或 Unit Delay 模块切断代数环生成 C 代码失败模型中包含 Scope 等显示模块查看代码生成报告中的错误提示删除或注释掉 Scope 模块Carsim 联合仿真时阻力偏大Simulink 侧和 Carsim 同时计算阻力检查信号连接和参数设置只保留一侧的阻力计算另一侧置零仿真结果与理论计算不一致单位换算错误逐项对比四个阻力的数值按 6.2 节的脚本逐项检查封装子系统后输入参数没有变化Mask 参数未正确关联模块检查 Mask 编辑器中的参数名用 Mask 参数替换子系统内部常量值其中代数环问题值得特别强调。如果模型中出现代数环仿真会非常慢而且求解结果可能不稳定。在 Simulink 菜单中可以通过 Diagnostics 选项开启代数环检测。检测到代数环后最简单的方法是在反馈回路中插入一个Unit Delay模块或Memory模块。10. 最佳实践与使用建议这一讲的核心工作完成了最后给出几组工程实践建议。这些建议来自多个整车仿真项目的通用经验不是只针对第005讲。10.1 参数管理优先于模型结构行驶阻力子系统模型结构其实很简单真正的复杂度在参数。建议把整车参数集中放一个 MATLAB 脚本文件例如vehicle_params.m在仿真前运行一次。% vehicle_params.m 示例内容 m 1500; g 9.8; f 0.015; Cd 0.32; A 2.2; delta 1.15;所有 Simulink 模型中的参数都直接引用工作区变量名不要写数值常量。这样批量仿真时脚本修改一个变量即可控制整个模型。10.2 模块命名要可追溯很多工程师建模时不注意模块命名子系统里全部是 Gain、Gain1、Gain2。模型小的时候无所谓一旦整车模型集成了发动机、变速器、电池、电机等子系统后这种命名方式很难排查问题。建议的命名规范Gain_Ff_Gravity Gain_Ff_RollingCoeff Gain_Fw_DragCoeff Gain_Fw_FrontalArea Gain_Fj_RotationalMass这样即使模型结构很复杂检查信号链时也能一眼看出每个增益模块的物理含义。10.3 模型可读性设计在子系统内部尽量使用信号标签而不是直接把线连接到下一个模块。Simulink 允许双击信号线输入名称例如F_f、F_w、F_i、F_j。这些信号名也会作为信号对象的一部分进入生成的代码中提升代码可读性。10.4 验证数据集要固定做动力性能仿真前准备一组固定的标准验证工况比如水平路面 0% 坡道匀速 60 km/h水平路面 0% 坡道匀速 120 km/h5% 坡道匀速 40 km/h10% 坡道加速工况每次修改模型后先跑一遍验证工况对比阻力输出是否在合理范围。这样可以避免模型更新后引入回归错误。10.5 注意版权与数据合规如果你在论文或商用项目中使用了某款车型的实测参数必须确认这些参数的来源是否允许公开。车辆阻力系数、迎风面积等数据在整车开发中属于核心工程数据不要随意转载或泄露非公开的技术参数。11. 总结与下一步这一讲完成了计算汽车行驶阻力子系统的建模。模型包含了滚动阻力、空气阻力、坡度阻力、加速阻力四个部分子系统封装后可以复用。从功能上看该子系统不仅服务于动力性能仿真也适用于经济性仿真、VCU 控制策略验证、整车纵向动力学模型搭建等场景。紧接着需要验证的两个功能点是一用 MATLAB 脚本对拍阻力计算数值二把子系统接入整车模型后观察驱动力-行驶阻力平衡是否合理。最容易踩的坑是单位换算尤其是车速 km/h 与 m/s 的换算、坡度百分比与坡道角的换算。这两处错了后面所有仿真结果都会偏差很大。下一讲可以继续做驱动力计算子系统建模。把驱动力和这一讲的行驶阻力放到同一个整车纵向动力学框架里就能直接计算百公里加速时间、最高车速、最大爬坡度这三个核心动力性指标。建议把这一讲的模型文件底稿保存好后面整套动力性能仿真系列都会基于这套阻力模型迭代扩展。
返回列表