康谋分享 | 自动驾驶联合仿真——功能模型接口FMI(二)

FMU中时间概念的连续性和离散性实际上是变量的属性。并且FMU都能够包含连续时间的变量或是离散时间的变量。在模型交换类型和联合仿真类的FMU通信中可以看到这一点。

在FMI2.0中通过通信点来进行数据交换的通信结构是离散的。


目录

一、模型交换:导入工具提供求解器

二、联合仿真:导出工具提供求解器

[三、联合仿真得接口 Interface](#三、联合仿真得接口 Interface)

以C代码为例

联合仿真算法的作用

四、模型描述文件是并行的

作者介绍

崔工


一、模型交换:导入工具提供求解器

  • 仿真工具之间模型集成非常紧密。
  • 在导入工具和模型之间的接口非常复杂。
  • 导入工具必须提供合适的求解器。

二、联合仿真:导出工具提供求解器

  • 模型和求解器之间有着紧密的耦合关系。
  • 导入工具和模型之间的接口相对简单。
  • 可以选择不同的联合仿真算法和通信步长来实现更稳定精确的仿真方案。

三、联合仿真得接口 Interface

通信时间步长可以和内部步长不同,通信时间步长主要是不同FMU之间交换信息,而在各自的内部可以时是不同的可变时间步长。

在联合仿真接口中,参数会根据FMI标准有着典型的调用顺序:

  • 得到输出:fmiGetXXX(...)

  • 触发计算直到下一个通信节点:fmidoStep(...)

  • 设置输入值:fmi2SetXXX(...)

以C代码为例

  • 使用FMI2Instantiate函数实例化FMU

    CALL (FMI2Instantiate(S, resourceURI, fmi2CoSimulation, modelDescription->instantiationToken, fmi2Flase, fmi2Flase))

其中涉及到的参数分别是FMI实例、FMU资源的URI、声明FMU的类型为联合仿真、唯一标识符、是否显示FMU的GUI和是否启动日志记录的参数。

  • 应用初始值和输出

    CALL(applyStartValues(S, settings));

    CALL(FMIApplyInput(S, input, setttings->startTime, true, true, false));

  • 设置参数并进入初始化模式,如果有FMU初始状态文件的话,可以在实例化FMU后执行

    CALL(FMI2SetupExperiment(S, settings->tolerance >0, settings->tolerance, settings->startTime, fmiFalse, 0));

    CALL(FMI2EnterInitializationMode(S));

    CALL(FMI2ExitInitializationMode(S));

  • 进入仿真循环,按照时间步长进行采样和应用输入

    for(ubsigned long step = 0;; step++) { const fmi2Real time = settings->startTime + step * settings->outputInterval; ...

    CALL(FMISample(S, time, result));

    CALL(FMIApplyInput(S, input, time, true, true, false));

    ......

    const FMIStatus doStepStatus = FMI2DoStep(S, time, settings->outputInterval, fmiTrue);

    ......

    CALL(FMIGetBooleanStatues(S, fmi2Terminated, &terminated))

    ......

    CALL(FMI2GetRealStatus(S, fmi2LastSuccessfulTime, &lastSuccessfulTime));

    CALL(FMISample(S, lastSuccessfulTime, result));

    ......

联合仿真算法的作用

联合仿真算法不属于FMI标准的一部分,其作用主要是用于:

  • 推进整个仿真系统的时间,使得各个子系统的FMU组件在 每个时间步长上同步执行仿真计算,即代码中仿真循环的部分。

  • 交换输入和输出数据。

  • 触发时钟信号,用于同步不同仿真组件或触发某些操作,即代码中。

    settings->startTime + step * settings->outputInterval; FMI2DoStep(S, time, settings->outputInterval, fmiTrue);

  • 处理事件,例如状态变化、外部输入、内部条件触发等,即代码中。

    CALL(FMI2GetRealStatus(S, fmi2LastSuccessfulTime, &lastSuccessfulTime));CALL(FMISample(S, lastSuccessfulTime, result));

四、模型描述文件是并行的

模型描述文件modelDescription.xml包含了关于FMU所有的静态信息,其定义了FMU支持的接口类型,无论是模型交换或是联合仿真,同时解释了模型变量,包括了输入、输出以及相关参数,以便导入工具进行访问。

除此之外也会包含模型接口的一些信息,比如模型连接时数据是符合输入输出的。

并且在模型描述文件中还会声明一些属性标志,比如"needsExcutionTool",这一属性表示需要特定的程序或是特定的库文件才能够执行FMU,所以在导入FMU时,在导入工具中需要一个额外的包装Wrapper,并不真正的参与计算,而是用来实现模型、求解工具和执行之间进行通信。


作者介绍

崔工

康谋科技仿真测试业务技术主管,拥有超过5年的汽车仿真测试及自动驾驶技术研发经验,熟练掌握仿真测试工具和平台,如aiSim、HEEX等,能有效评估和优化自动驾驶系统的性能和安全性。拥有出色的跨文化沟通能力,成功带领团队完成多项海外技术合作项目,加速了公司在自动驾驶技术上的国际化进程。作为技术团队的核心,领导并实施过大规模的自动驾驶仿真测试项目,对于车辆行为建模、环境模拟以及故障诊断具有独到见解。擅长运用大数据分析和人工智能技术,优化仿真测试流程,提高测试效率和结果的准确性。


如您对上述产品和解决方案感兴趣,

欢迎联系康谋自动驾驶团队了解更多信息。

我们将竭诚为您服务!

期待与您的交流!

康谋科技 - 您的一站式自动驾驶解决方案合作伙伴,助力自动驾驶商业化落地 - keymotek康谋科技有限公司是原虹科自动驾驶业务孵化出来的全新独立公司,专注于自动驾驶领域。我们以数据为驱动力,提供高性能的数据采集、记录、传输方案,针对各种驾驶场景进行精准的仿真模拟,以及对大量自动驾驶数据进行高效、高质量处理。我们的一站式服务能够满足自动驾驶领域研发测试的全流程需求,助力客户在自动驾驶领域取得更大突破。https://keymotek.com/

相关推荐
地平线开发者1 天前
CPU& 内存加压工具 stress-ng 介绍
算法·自动驾驶
清流君1 天前
【运动规划】移动机器人运动规划与轨迹优化全解析 | 经典算法总结
人工智能·笔记·算法·机器人·自动驾驶·运动规划
audyxiao0012 天前
突破自动驾驶瓶颈!KoMA:多智能体与大模型的完美融合
人工智能·机器学习·大模型·自动驾驶·多智能体
学步_技术4 天前
自动驾驶系列—面向自动驾驶的模型迭代:工具、平台与最佳实践
人工智能·机器学习·自动驾驶·模型迭代
学步_技术4 天前
自动驾驶系列—自动驾驶数据脱敏:保护隐私与数据安全的关键技术
人工智能·机器学习·自动驾驶·数据安全·数据脱敏
学步_技术4 天前
自动驾驶系列—深入解析自动驾驶车联网技术及其应用场景
人工智能·机器学习·自动驾驶·车联网
标贝科技4 天前
标贝科技:AI基础数据服务,人工智能行业发展的底层支撑
人工智能·机器学习·语言模型·数据挖掘·自动驾驶·database·big data
Mr.Winter`4 天前
轨迹优化 | 基于Savitzky-Golay滤波的无约束路径平滑(附ROS C++/Python仿真)
人工智能·算法·机器人·自动驾驶·ros·ros2·数值优化
智能汽车人6 天前
自动驾驶---行泊一体(车位到车位功能)量产
人工智能·机器学习·华为·自动驾驶
学术搬运工6 天前
【征稿倒计时!华南理工大学主办 | IEEE出版 | EI检索稳定】2024智能机器人与自动控制国际学术会议 (IRAC 2024)
人工智能·深度学习·算法·机器学习·机器人·自动化·自动驾驶