使用 MATLAB 和 Simulink 设计和构建 Rivian 车辆仿真界面平台帮助我们实现了关键目标。我们为工程师和非工程师创建了统一平台,用于运行整车仿真、后处理结果和创建报告。
整个汽车行业的工程师越来越依赖仿真来评估操控性能、加速性能、续航里程和其他关键性能指标。与物理测试相比,通过仿真来评估车辆性能速度更快,成本也更低。整车仿真还有助于设计工作在原型硬件可用之前在开发过程中尽早进行。然而,随着车辆仿真的成本和效率优势在组织内日趋明显,仿真需求的增加使得车辆仿真面临一系列挑战。
考虑到与商业仿真软件对接和运行整车仿真所带来的复杂性,需要拥有一支专门的仿真工程师团队,他们具备必要的专业知识。然而,该团队可能很快会因各利益相关者的要求而不堪重负,这些利益相关者包括属性工程师、性能工程师、动力学工程师、续航里程和效率工程师以及高级管理人员。简单地执行这些团队要求的多个仿真也可能成为瓶颈,特别是当这些仿真连续地在商业软件上运行时更是如此。最后,由于缺乏标准化的车辆数据,加上对仿真结果的临时后处理,这使得工程师争相获取黄金源数据和采用获准的方法来报告结果,从而加剧了这些困难。
在 Rivian,我们的团队开发了可扩展、易于使用的平台,用于配置、运行和后处理大量整车仿真。此车辆仿真界面(VSI)平台是使用 MATLAB® 和 Simulink® 开发的,有助于减少冗余,提高复用性,并通过并行处理提高仿真吞吐量。借助使用 App 设计工具构建的直观用户界面,该平台还让整个公司的工程团队都能轻松实现仿真,从而消除了仿真请求瓶颈(图 1)。
图 1.VSI 用户界面。
本文介绍我们如何使用面向对象的原则设计 VSI,如何利用它来使仿真更平等普及,以及如何使用并行处理来扩展仿真工作量。
VSI 的面向对象的设计
当我们开始设计 VSI 平台时,面向对象的方法显然是实现灵活性、可扩展性和复用性等目标的最直接方法。我们首先明确定义了几个基本对象:Vehicle、Load Case 和 Simulation。在这种情形下,Vehicle 对象用于表示 Rivian 车辆,例如 Rivian R1T、Rivian R1S 或 Rivian EDV(我们的电动货车)。此对象还表示车辆的配置,用于定义特定的电池组、动力总成系统、轮胎、前后驱动装置和其他组件。Load Case 对象用于定义仿真场景,包括速度曲线、环境条件和驾驶工况。而 VSI Simulation 对象只是 Vehicle 实例与特定 Load Case 的组合(图 2)。
图 2.VSI 仿真包括特定车辆配置和预定义的测试场景。
从编程的角度来看,可将 Simulation 的概念视为构成 VSI 平台基础框架的超类。此超类的属性包括可以通过用户界面选择的车辆配置和测试场景属性,以及一组用于创建模型、运行仿真、执行后处理、提取度量和共享结果的方法(图 3)。借助 MATLAB 的面向对象的编程功能,我们可以轻松地针对 VSI 平台创建这种类结构体的实现。MATLAB 句柄对象尤其适用于封装仿真中包含的所有信息(不仅包括车辆和测试场景,还包括用户设置、结果和度量),并在 VSI 内高效传输这些信息,而无需复制数据。这些对象随后可以转换为元数据文本文件并进行存档,使我们能够通过从元数据重新构造对象来重新创建任何历史仿真。
图 3.VSISim 超类,包括仿真输入和执行方法。
使仿真更平等普及和最大化复用
我们已将 VSI 部署为 MATLAB 工具箱和独立可执行文件(用 MATLAB Compiler™ 编译),可供未安装 MATLAB 的同事使用。由于可以轻松访问 VSI,团队不再需要等待 Simulink 工程师来运行仿真并获得结果。
VSI 界面的左侧(如图 1 所示)用于选择车辆配置和测试场景,而界面的右侧显示用不同颜色表示的仿真列表。红色表示尚未运行的仿真,绿色表示已完成的仿真,琥珀色表示已完成的仿真以及过期结果(例如,当新组件数据可用或模型修订时,可能会发生这种情况)。值得注意的是,VSI 的仿真结果是共享的;工程师可能会发现他们要运行的仿真已由本团队或完全不同的团队中的某个人完成。工程师可以利用已有的仿真结果,避免运行相同且不必要的仿真,从而节省时间和计算资源。
在定义并选择了要运行的仿真后,工程师可点击标有 Run&Post-Process 的按钮(如图 1 所示)。仿真是结合使用 Simulink 和商业仿真软件在后台通过 MATLAB API 启动的(图 4)。
图 4.集群仿真的工作流程图,以及显示五个调度仿真的 VSI 界面(以蓝色突出显示)。紫色状态表示仿真正在进行中;红色状态则表示仿真已完成。
在单个仿真完成后,记录的数据会发送回 MATLAB 工作区进行处理,然后转换为 Apache® Parquet 数据文件格式,并最终存档在共享目录中。我们还开发了一套 MATLAB 脚本,用于汇总结果以生成关键度量,根据我们的需求管理系统中设置的目标报告仿真状态,并生成自动报告来概括关键性能指标,以供 Rivian 高级管理层参考。
通过并行处理实现扩展
在 VSI 用户界面中,工程师可以选择使用本地计算机上的多个内核来并行运行仿真,也可以选择使用远程 Amazon® Web Services(AWS®)集群来执行此操作(图 5)。本地方法利用了 Parallel Computing Toolbox™,它是工程师在测试模型更新和更改时最常选用的方法。远程方法基于运行 MATLAB Parallel Server™ 的 AWS EC2 实例,适用于具有已经过测试和验证的模型的生产环境。
图 5.用于并行处理的 VSI 选项。
在远程并行工作流中,MATLAB Parallel Server 和 MATLAB 作业调度器发挥着重要作用。VSI 先从 MATLAB Parallel Server 调用 parcluster 函数,以根据我们所定义的 AWS EC2 配置文件创建一个集群对象。在为要并行运行的每个仿真创建了一个仿真对象后,VSI 将在集群上创建一个作业,并为每个仿真创建一个单独的任务。该作业及其任务通过 MATLAB 作业调度器提交到 AWS EC2 实例。该调度器可协调作业的执行,并将任务分配给各个集群工作进程。当仿真完成时,MATLAB 后处理函数会在集群上运行,然后结果再进行存档和共享。对于大型作业,例如涉及 14 个冗长仿真的作业,远程并行方法要快得多,在 68 分钟内即可完成作业,而依序方法需要 9 个多小时(图 6)。
图 6.依序(黄色)、本地并行(蓝色)和远程并行(红色)方法的基准仿真时间。
在过去的六个月里,我们在 Rivian 的同事已使用 VSI 进行了 9,000 多次整车仿真,总共模拟行驶了大约 200 万英里。
计划的改进
使用 MATLAB 和 Simulink 设计和构建 VSI 平台帮助我们实现了关键目标。我们为工程师和非工程师创建了统一平台,用于运行整车仿真、后处理结果和创建报告。我们消除了仿真请求瓶颈,减少了仿真任务中的冗余,并提高了仿真复用性。此外,我们还通过支持在 AWS 集群或本地工作站的多个内核上并行运行仿真,最大程度地提高了吞吐量。
我们计划对 VSI 做出大量改进,包括将该平台部署为 Web 应用,为关键性能指标添加仪表板,以及简化从用户界面使用试验设计(DOE)的过程。与此同时,我们还在继续开发和扩展 Rivian 的 MATLAB Minimart,这是内部构建的 MATLAB 工具箱集合,用于数据转换和查看、启动和制动分析,以及各种其他经常需要的功能。