0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

康谋自动驾驶 2024-07-10 15:52 次阅读

在之前的两篇文章中(文末往期回顾中可查看),我们主要介绍了功能模型接口FMI的主要组成部分和一些使用场景,今天就以康谋自动驾驶仿真软件aiSim为例,来展示一下如何建立一个FMU并实现基于UDP和FMI联合仿真(co-simulation)数据通信

一、效果预览

wKgZomaOOyeAFzTUAIwGreSZv_s310.pngPC1 aiSim运行效果

wKgZomaOO0WATQ_6AIFwXAitS9s601.pngPC2 读取FMU和UDP通讯

二、相关配置

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

    文章

    8575

    浏览量

    151015
  • 仿真软件
    +关注

    关注

    21

    文章

    243

    浏览量

    30359
  • 自动驾驶
    +关注

    关注

    784

    文章

    13784

    浏览量

    166386
收藏 人收藏

    评论

    相关推荐

    技术 | 毫米波雷达技术解析

    自动驾驶技术飞速发展,毫米波雷达已成为自动驾驶传感器套件的关键。为此,为您深度解析毫米波雷达技术,从概述到工作原理,再到前沿的4D技术,全面揭示其在
    的头像 发表于 10-15 10:07 3041次阅读
    <b class='flag-5'>康</b><b class='flag-5'>谋</b>技术 | 毫米波雷达技术解析

    分享 | 直面AD/ADAS快速开发挑战:IVEX自动驾驶场景管理及分析平台!

    如何快速了解开发 AD/ADAS 组件中的车辆行为以便进行改进,是目前开发 AD/ADAS 组件时面临的重大挑战。为此,推出IVEX自动驾驶场景管理及分析平台来克服这一难题,本文康
    的头像 发表于 09-25 09:27 784次阅读
    <b class='flag-5'>康</b><b class='flag-5'>谋</b>分享 | 直面AD/ADAS快速开发挑战:IVEX<b class='flag-5'>自动驾驶</b>场景管理及分析平台!

    分享 | 汽车仿真与AI的结合应用

    实现高质量的虚拟传感器输出是自动驾驶领域的一项关键挑战,然而传统方案对广角镜头的渲染和处理等方面仍存在一定的局限性。为此,为您介绍aiSim通用高斯泼溅渲染器如何打破限制,在自动驾驶
    的头像 发表于 09-11 09:24 1468次阅读
    <b class='flag-5'>康</b><b class='flag-5'>谋</b>分享 | 汽车<b class='flag-5'>仿真</b>与AI的结合应用

    自动驾驶联合仿真——功能模型接口FMI(终)

    本文带您了解,如何在aiSim中,通过UDP和aiSim车辆动力学API(Vehicle Dynamics Interface, VDI)来实现和外部的FMU车辆动力学模型联合仿真
    的头像 发表于 08-07 10:19 2805次阅读
    <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>(终)

    FPGA在自动驾驶领域有哪些优势?

    通过标准接口与其他硬件组件进行集成,如传感器、处理器和通信模块等。这种易于集成的特性使得FPGA能够方便地融入自动驾驶系统的整体架构中。同时,FPGA还支持模块化设计,可以根据需要扩展功能或升级性能
    发表于 07-29 17:11

    FPGA在自动驾驶领域有哪些应用?

    数据的实时处理和反馈,为自动驾驶汽车的决策提供实时、准确的数据支持。 、控制系统优化自动驾驶汽车的控制系统是复杂的,需要实现对车速、转向、刹车等多种信息的实时控制。FPGA可以提供高速的控制逻辑,并
    发表于 07-29 17:09

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

    功能模型接口是一个开放且独立于工具的标准,便于实现自动驾驶仿真工具间的模型交换和
    的头像 发表于 07-24 10:54 3146次阅读
    <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'>模型</b><b class='flag-5'>接口</b><b class='flag-5'>FMI</b>(四)

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

    功能模型接口在复杂系统的建模与仿真中具有重要作用。本文探讨了FMU的时间概念、模型交换和联合
    的头像 发表于 06-26 14:40 3355次阅读
    <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'>模型</b><b class='flag-5'>接口</b><b class='flag-5'>FMI</b>(二)

    自动驾驶仿真测试实践:高精地图仿真

    引言随着自动驾驶技术的快速发展,基于高精地图的自动驾驶功能已初步落地应用,并持续迭代升级。在研发测试阶段,多方面因素导致测试人员可能无法拿到控制器内部高精地图对应的OpenDRIVE文件①,使得
    的头像 发表于 06-13 08:25 1043次阅读
    <b class='flag-5'>自动驾驶</b><b class='flag-5'>仿真</b>测试实践:高精地图<b class='flag-5'>仿真</b>

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

    功能模型接口是一个开放且独立于工具的标准,包含C-API接口、XML描述文件和可交换的功能模型
    的头像 发表于 06-12 13:07 1605次阅读
    <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'>模型</b><b class='flag-5'>接口</b><b class='flag-5'>FMI</b>(一)

    方案 | 从概念到生产的自动驾驶软件在环(SiL)测试解决方案

    自动驾驶软件在环(SiL)测试解决方案 自动驾驶软件在环(SiL)测试解决方案能够研究和验证高历程实验和恶劣驾驶环境下的AD系统的性能,支持云端和PC端操作,提供高保真度的仿真环境和传
    的头像 发表于 02-06 11:09 694次阅读
    <b class='flag-5'>康</b><b class='flag-5'>谋</b>方案 | 从概念到生产的<b class='flag-5'>自动驾驶</b>软件在环(SiL)测试解决方案

    方案 | L2进阶L3,数据采集如何助力自动驾驶

    12月14日,宝马集团宣布,搭载L3级别自动驾驶功能的车辆在上海市正式获得高快速路自动驾驶测试牌照。宝马表示,将在上海市政府的监督和指导下,在指定区域开展L3高快速路自动驾驶道路测试。
    的头像 发表于 01-25 18:06 535次阅读
    <b class='flag-5'>康</b><b class='flag-5'>谋</b>方案 | L2进阶L3,数据采集如何助力<b class='flag-5'>自动驾驶</b>

    方案 | 加速自动驾驶系统开发的技术解决方案

    ADTF(AUTOMOTIVE DATA & TIME-TRIGGERED FRAMEWORK)是一款专为自动驾驶系统开发人员设计的软件,提供多种功能和工具,加速系统开发和测试
    的头像 发表于 01-19 15:57 412次阅读
    <b class='flag-5'>康</b><b class='flag-5'>谋</b>方案 | 加速<b class='flag-5'>自动驾驶</b>系统开发的技术解决方案

    新闻丨走进科技——您的自动驾驶解决方案合作伙伴

    面对日益增长的行业需求,虹科自动驾驶事业部正式更名为“”。这一重要改变代表了虹科持续发展进程中新的里程碑,也体现了我们在自动驾驶领域不断创新的精神。
    的头像 发表于 01-19 14:49 397次阅读
    <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>解决方案合作伙伴

    产品 | 基于事件的智能数据管理平台Heex

    自动驾驶HEEX致力于ADAS和AD开发中获取针对性数据,即最相关的数据“智能数据”,采用基于事件的工作流和预设触发器的方法,使得工程团队能够在边缘或云端直接提取与事件相关的数据,自动
    的头像 发表于 01-10 17:36 429次阅读
    <b class='flag-5'>康</b><b class='flag-5'>谋</b>产品 | 基于事件的智能数据管理平台Heex