4. 联合仿真技术路线与工具链

多体动力学与控制系统的联合仿真,本质上要解决三个问题:模型怎么封装、数据怎么交换、时间怎么推进。FMI(Functional Mock-up Interface)标准正是围绕这三点建立的开放接口规范,它把模型封装为 FMU(Functional Mock-up Unit),使不同工具生成的模型能够在统一的协同仿真框架中互相调用。

一、FMI 与 FMU:模型封装的标准容器

一个 FMU 是一个压缩包,内部包含模型描述文件 modelDescription.xml、编译后的动态库(Windows 下为 .dll,Linux 下为 .so)以及可选的资源文件。描述文件声明了模型的所有输入、输出、参数、状态变量及其类型、单位和初始值,协同仿真框架正是通过读取该文件来建立变量映射关系。

FMI 定义了两种接口模式:模型交换(Model Exchange, ME)和协同仿真(Co-Simulation, CS)。ME 模式下,FMU 只提供连续状态的导数计算,求解器由外部主控程序提供;CS 模式下,FMU 自带求解器,主控程序只需按通信步长调用其 doStep 接口。在多体动力学与控制联合仿真中,通常采用 CS 模式:多体软件导出机械系统 FMU,控制软件导出控制器 FMU,由协同仿真主控器统一调度。

选择 CS 还是 ME,关键看求解器归属。若多体模型含刚性接触或变拓扑,建议保留其自带求解器,导出为 CS-FMU;若希望主控器统一积分以获得更好的耦合精度,可考虑 ME-FMU,但需确认工具支持。

二、接口通信:变量映射与数据交换

联合仿真的接口通信不是简单的“连上线”,而是需要明确交换变量、交换方向、交换时刻和交换方式。以典型的“多体机械臂 + 电机控制”为例,多体侧向控制侧输出关节角度和角速度,控制侧向多体侧输出驱动力矩,形成闭环。

变量映射时需注意三点:一是单位一致,FMI 描述文件中带有单位属性,但主控器不一定自动换算,建议在导出前统一为 SI 单位;二是因果方向,输入输出不可接反,否则会出现代数环;三是初始值匹配,控制器的积分初值应与多体模型的初始位形一致,否则仿真起步瞬间会出现力矩尖峰。

数据交换方式分为松耦合和紧耦合。松耦合在每个通信步长结束时交换一次数据,实现简单、效率高,但步长较大时可能引入能量误差;紧耦合在步长内多次迭代直至接口变量收敛,精度高但计算量大。工程上常采用松耦合配合较小的通信步长(如 1 ms),在精度与效率之间取得平衡。

三、协同仿真框架与工具链配合

常见的协同仿真框架包括商业工具自带的协同模块(如 Simcenter Amesim 的联合仿真接口、Adams 的 Controls 接口)以及独立的 FMI 主控器(如 Python 的 fmpy、PyFMI,或开源工具 OpenModelica 的 OMSimulator)。工具链的典型配合方式如下:

  • 多体动力学软件(Adams、RecurDyn、Simpack、Simscape Multibody):负责机械系统建模,导出含质量、约束、接触的 FMU。
  • 控制仿真软件(MATLAB/Simulink、AMESim、Dymola):负责控制器、液压或电气系统建模,导出控制侧 FMU 或直接作为主控器。
  • 主控器:读取各 FMU 的描述文件,建立变量映射,按通信步长推进仿真,记录结果。

以 Simulink 作为主控器为例,操作流程为:在 Simulink 中放置 FMU Import 模块,加载多体侧 FMU;将控制器输出连接到 FMU 的输入端口,将 FMU 的输出端口接入控制器;设置通信步长与求解器类型;运行仿真并观察接口变量的收敛情况。若出现仿真发散,优先检查通信步长是否过大、接口变量是否存在代数环、初始条件是否匹配。

FMI 联合仿真工具链与数据交换关系 多体动力学软件 Adams / RecurDyn / Simpack 机械系统建模 导出 CS-FMU 质量·约束·接触 控制仿真软件 Simulink / AMESim / Dymola 控制器与液压建模 导出控制侧 FMU PID·状态机·液压 协同仿真主控器 读取 modelDescription.xml 建立变量映射 · 调度 doStep 通信步长 1 ms · 松耦合 机械 FMU 控制 FMU 接口变量交换 多体→控制:关节角 θ、角速度 ω 控制→多体:驱动力矩 τ 时间推进 t → t+Δt 交换一次 Δt 过大 → 能量误差 常见问题 代数环 · 单位不一致 初值不匹配 → 力矩尖峰

四、实操要点与结果判读

搭建一个可运行的联合仿真,建议按以下顺序推进。首先在各自工具中单独验证模型:多体模型在重力下自由下落,检查关节角是否合理;控制器在开环下给定阶跃输入,检查输出力矩是否饱和。然后导出 FMU,用主控器加载并检查变量列表是否完整。接着设置通信步长,从 1 ms 开始,逐步增大观察结果变化。最后运行闭环仿真,重点观察三个量:接口变量是否连续、能量是否守恒、控制目标是否跟踪。

若仿真在起步阶段出现剧烈振荡,通常是初始条件不匹配。例如多体模型初始关节角为 0°,而控制器积分器初值为 0.1 rad,则第一步就会产生较大的误差信号,进而输出大扭矩。解决办法是让控制器初值与多体初始位形一致,或在控制器输出端加限幅。若仿真在中途发散,优先减小通信步长,或检查是否存在代数环——即两个 FMU 的输出直接互为输入,此时需要在一侧引入一阶滤波或单位延迟。

通信步长并非越小越好。步长过小会导致仿真时间成倍增加,且在某些 CS-FMU 中可能因求解器内部步长限制而无法继续。建议先以 1 ms 试算,再根据接口变量的变化率调整:若一个步长内关节角变化超过 0.5°,则应减小步长。

工具链的配合方式没有唯一答案,但有一条原则:让每个工具做它最擅长的事。多体软件负责几何、约束和接触,控制软件负责算法和逻辑,主控器负责调度和记录。FMI 的价值就在于把这三者解耦,使模型可以独立开发、独立验证、再统一集成。掌握 FMU 的导出配置、变量映射和步长选择,就掌握了联合仿真技术路线的核心。