在之前的两篇文章中(文末往期回顾中可查看),我们主要介绍了功能模型接口FMI的主要组成部分和一些使用场景,今天就以康谋自动驾驶仿真软件aiSim为例,来展示一下如何建立一个FMU并实现基于UDP和FMI联合仿真(co-simulation)数据通信。
一、效果预览
![wKgZomaOOyeAFzTUAIwGreSZv_s310.png](https://file1.elecfans.com/web2/M00/FA/BC/wKgZomaOOyeAFzTUAIwGreSZv_s310.png)
![wKgZomaOO0WATQ_6AIFwXAitS9s601.png](https://file1.elecfans.com/web2/M00/FA/BC/wKgZomaOO0WATQ_6AIFwXAitS9s601.png)
二、相关配置
OS:Ubuntu22.05
仿真软件:aiSim 5.2.0
首先是要构建所需要的FMU,在一些动力学仿真软件上,如CarSim,可以直接导出动力学模型对应的FMU文件,但本次我们基于C++从零构建FMU文件。
需要编辑的6份文件分别是:
fmi_simple_car.cpp:根据FMI2.0标准实现一个车辆模型
simple_car.h:车辆模型的头文件
simple_car.cpp:车辆模型的实现文件
value_reference_ids.h:定义值应用ID的头文件
modelDescription.xml:定义FMU结构的根文件
simple_car_fmu.json文件:用于将构建的FMU文件映射到aiSim的车辆动力学中(非构建FMU所必须)
三、操作步骤
首先是fmi_simple_car.cpp文件主要包含了6个部分,最终实现为模拟控制一个简单的车辆模型,包括了实例化、设置参数,执行仿真步骤以及获取和设置模型参数的功能。
头文件:
include "fmi2Functions.h" (是FMI2.0标准的头文件,请参考FMI官网)
include
include
include "simple_car.h"
1、实例化
实例化FMU,在之前的文章中我们以C语言为例,本次采用C++来做示范。
fmi2Component fmi2Instantiate( fmi2String /*实例名称*/, fmi2Type fmuType /*实例类型(ME/CO)*/, fmi2String /*唯一标识符*/, fmi2String /*资源位置*/, const fmi2CallbackFunctions* /*回调函数*/, fmi2Boolean /*是否可见*/, fmi2Boolean /*是否启用日志*/) {/*此处可以与用判断车辆实例是否在使用、检查FMU的类型是ME模型交换还是CO联合仿真、执行实例化车辆*/ car_is_used = True; //预先设置的标志变量,用于表示表示车辆是否正在使用 returen &only_one_car; //预先定义的全局SimpleCar对象only_one_car }
2、FMU交互
实例化完成后,我们要实现一系列函数用于FMU交互的具体实现,主要包含获取和设置变量,执行仿真步骤等。
① 获取类型
获取实数,通过遍历引用数组vr,获取对应的值并存储。
fmi2Status fmi2GetReal(fmi2Component /*c*/, const fmi2ValueReference vr[], size_t nvr, fmi2Real value[]){ for (size_t i = 0; i < nvr; ++i) { value[i] = only_one_car.GetValue(vr[i]); } return fmi2OK; }
同样还能够实现获取整数、布尔值和字符串值。
② 设置类型
设置实数,同样通过only_one_car.SetValue(vr[i], value[i])设置对应的值。
fmi2Status fmi2SetReal(fmi2Component /*c*/, const fmi2ValueReference vr[], size_t nvr, const fmi2Real value[]){ for (size_t i = 0; i < nvr; ++i) { only_one_car.SetValue(vr[i], value[i]); } return fmi2OK; }
同样还能够实现获取整数、布尔值和字符串值。
③ 执行仿真
获取实联合仿真函数(CO),可以是根据之前实数和证书引入导数计算,又或是引入仿真步骤的执行和取消数,通过遍历引用数组vr,获取对应的值并存储。
比如执行仿真步骤,其中DoStep将会在Simple_car.cpp中实现:
fmi2Status fmi2DoStep(fmi2Component /*c*/, fmi2Real /*currentCommunicationPoint*/, fmi2Real communicationStepSize, fmi2Boolean /*newStep*/){ log_to_file("fmi2DoStep()"); only_one_car.DoStep(communicationStepSize); return fmi2OK; }
同样还能够实现获取整数、布尔值和字符串值。
3、初始化和释放
除此之外,我们还需要注意在仿真过程中FMU实例的初始化和释放。
比如我们可以简单的通过设置car_is_used= false实现实例的释放,可以通过only_one_car = SimplerCar()来实现FMU的重置,其中SimplerCar类的具体实现在simple_car.cpp中。
以上就是基于FMI2.0实现车辆模型时所需的基本内容,剩余的内容我们将在后续的文章中进行分享。
-
接口
+关注
关注
33文章
8218浏览量
149799 -
仿真软件
+关注
关注
21文章
229浏览量
30245 -
自动驾驶
+关注
关注
780文章
13425浏览量
165042
发布评论请先 登录
相关推荐
自动驾驶联合仿真——功能模型接口FMI(终)
![<b class='flag-5'>自动驾驶</b><b class='flag-5'>联合</b><b class='flag-5'>仿真</b>——<b class='flag-5'>功能</b><b class='flag-5'>模型</b><b class='flag-5'>接口</b><b class='flag-5'>FMI</b>(终)](https://file1.elecfans.com/web2/M00/01/DE/wKgaomay2wWAUDG5AACfnLYRVZo241.png)
FPGA在自动驾驶领域有哪些优势?
FPGA在自动驾驶领域有哪些应用?
自动驾驶仿真测试实践:高精地图仿真
![<b class='flag-5'>自动驾驶</b><b class='flag-5'>仿真</b>测试实践:高精地图<b class='flag-5'>仿真</b>](https://file.elecfans.com/web2/M00/52/D4/pYYBAGLNkrKAeFJaAAAjXRuImx0496.png)
未来已来,多传感器融合感知是自动驾驶破局的关键
康谋方案 | 从概念到生产的自动驾驶软件在环(SiL)测试解决方案
![<b class='flag-5'>康</b><b class='flag-5'>谋</b>方案 | 从概念到生产的<b class='flag-5'>自动驾驶</b>软件在环(SiL)测试解决方案](https://file1.elecfans.com//web2/M00/BF/F8/wKgZomXBoveARgrIAAGmwWsctSA288.png)
康谋方案 | L2进阶L3,数据采集如何助力自动驾驶
![<b class='flag-5'>康</b><b class='flag-5'>谋</b>方案 | L2进阶L3,数据采集如何助力<b class='flag-5'>自动驾驶</b>](https://file1.elecfans.com/web2/M00/BF/10/wKgaomWw3I2AQlT8AAGvafcbswM920.png)
康谋方案 | 加速自动驾驶系统开发的技术解决方案
![<b class='flag-5'>康</b><b class='flag-5'>谋</b>方案 | 加速<b class='flag-5'>自动驾驶</b>系统开发的技术解决方案](https://file1.elecfans.com/web2/M00/BD/5B/wKgZomWqKcqAd6LkAAH4WL60h8s120.png)
康谋新闻丨走进康谋科技——您的自动驾驶解决方案合作伙伴
![<b class='flag-5'>康</b><b class='flag-5'>谋</b>新闻丨走进<b class='flag-5'>康</b><b class='flag-5'>谋</b>科技——您的<b class='flag-5'>自动驾驶</b>解决方案合作伙伴](https://file1.elecfans.com/web2/M00/BD/57/wKgZomWqGy2AAVKXABf-PYoTiC0929.png)
康谋产品 | 基于事件的智能数据管理平台Heex
![<b class='flag-5'>康</b><b class='flag-5'>谋</b>产品 | 基于事件的智能数据管理平台Heex](https://file1.elecfans.com/web2/M00/BC/DC/wKgaomWeXmOAIG5ZAAF9MZ4pWq8883.png)
评论