在上一篇文章 “康谋分享 | 自动驾驶联合仿真——功能模型接口FMI(三)https://www.elecfans.com/d/3875615.html”,我们讲述了在构建FMU中,如何通过fmi_simple_car.cpp来实现FMI2.0,即如何实现一个简单的车辆模型来进行车辆动力学仿真。今天康谋接着展示如何通过simple_car.cpp和simple_car.h构建车辆模型本身。
一、操作步骤
首先simple_car.cpp主要构建了车辆所需的多个动力学参数,包括底盘的位姿、车轮的状态等,而simple_car.h提供多个函数来实现基于FMI2.0标准将参数写入到车辆中。
simple_car.cpp主要分为三部分:
- 初始化车辆动力学参数
- 计算参数并更新车辆的运动变化
- 根据车辆的位姿计算车轮的坐标
在头文件中,除了定义相关函数外,还提供了车辆的一些静态参数,用于协助动力学参数的计算,比如给定车辆的转向传动比、轴距、最大附着加速度、车轮半径等。

1、实例化
我们来看一个simple_car.cpp中实现车辆状态更新的简单示例:
const double wheel_angle =val_refs[STEERING_ANGLE] / m_steer_transmission_ratio; const double curvature = wheel_angle / m_wheelbase const double yaw_rate = curvature * val_refs[CHASSIS_SPEED]
这三个分别计算了转向角、曲率和偏航率。基于这个三个值,再结合车辆的静态参数,我们可以计算并推算出其他的车辆运动姿态参数。
我们也会通过加速踏板和刹车踏板的状态来计算车辆(底盘的纵向加速度),其中m_max_adh_acc为在头文件中预先定义的最大附着加速度:
if val_refs[BRAKE_PEDAL_POSITION] < 0.0 { val_refs[CHASSIS_LONGITUDINAL_ACCELERATION] = val_refs[BRAKE_PEDAL_POSITION] * m_max_adh_acc; }
可以注意到我们使用了宏定义的[STEERING_ANGLE]、[CHASSIS_LONGITUDINAL_ACCELERATION]和[BRAKE_PEDAL_POSITION]。
使用这一方式的原因:一是为了计算不同参数时清晰明了,此外更重要的是这和FMU中的modelDescription.xml文件所对应,modelDescription.xml规定了FMU的结构,其结构可以参考FMI系列的第二篇文章:“康谋分享 | 自动驾驶联合仿真——功能模型接口FMI(二)https://www.elecfans.com/d/3535805.html”。
2、关注参数
在XML文件中,需要关注的参数类型为name和valuReference,STEERING_ANGLE这一name对应的valuReference值为3,那么为了方便我们使用这些参数,可以把这些定义的宏写入到value_reference_ids.h中,当然也可以写入simple_car.h这一头文件里。

3、Cmake 编译
在完成simple_car.cpp、simple_car.h和FMU描述文件modelDescription.xml文件的构建,最后一步就是要将其编译成为所需FMU文件并生成我们的动态库文件(.so/.dll)。
我们采用Cmake来进行编译,除了定义源文件、添加库、指定目录、链接库(主要是glm和fmi2_interface)以外,我们还需要针对FMI平台进行配置:

以上就是基于FMI2.0构建FMU的全部内容,在下一期中我们将介绍在仿真软件aiSim中通过车辆动力学API来实现和FMU的联合仿真。
-
汽车行业
+关注
关注
0文章
324浏览量
15607 -
联合仿真
+关注
关注
0文章
5浏览量
8363 -
自动驾驶
+关注
关注
788文章
14044浏览量
168171 -
功能模块
+关注
关注
0文章
19浏览量
2790
发布评论请先 登录
相关推荐
自动驾驶联合仿真——功能模型接口FMI(终)

谷歌的自动驾驶汽车是酱紫实现的吗?
自动驾驶真的会来吗?
AI/自动驾驶领域的巅峰会议—国际AI自动驾驶高峰论坛
自动驾驶汽车的处理能力怎么样?
自动驾驶车的人车交互接口设计方案
自动驾驶线控底盘VCU功能介绍
康谋新闻丨走进康谋科技——您的自动驾驶解决方案合作伙伴

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

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

康谋分享 | 3DGS:革新自动驾驶仿真场景重建的关键技术

评论