提问 发文

自动驾驶仿真:Carsim、NI和VTD联合仿真

微微菌

| 2024-04-01 17:58 1175 0 0

前言

提示:下图为Casim、Veritand、VTD之间的关系,彼此都在做什么事情:
下图为整个HIL的台架方案:


在这里插入图片描述


这里需要特别注意的是动力学软件Carsim不做车辆方向盘控制,因为场景用的VTD的,所以必须由VTD的驾驶员去判断走向,动力学无法判断车辆的方向。


在这里插入图片描述


提示:这里讲的是NI和VTD之间的交互。

一、NI实时系统
硬件:NI-PXle8880-2F18CD99
软件:Veristand2020、Labview2020
责任项细分:

1、制作NI Custom Device对VTD RDB包的收发
NI Custom Device主要通过接收和发送下列的包来与VTD进行联合仿真,NI和VTD之间的通讯是通过TCP方式进行的,协议是VTD定义的RDB格式,下面会讲到;

1)RDB_DRIVER_CTRL_t,PKG ID = 26
此包为VTD的驾驶员模型参数,主要有节气门开度,制动踏板,请求加速度,请求速度,请求方向盘角度等参数,
VTD将这些请求参数给到Carsim,Carsim会响应真实的Postion、Yaw、Roll、Pitch(Carsim的动力学比较专业)等参数用来控制VTD中车辆的运动。相当于VTD只做了控制的请求,Carsim执行VTD的请求。

2)RDB_OBJECT_CFG_t,PKG ID = 9
Carsim会响应真实的Postion、Yaw、Roll、Pitch,则需要通过这个包将这些参数转发到VTD从而控制车辆。

3)RDB_TRIGGER_t, PKG ID = 25
当VTD收到一帧trigger,则渲染一帧画面,这个包是必须要发的。

3、接收并转发VTD发送来的传感器数据包
制作Custom device用于VTD中传感器模型的数据接收:
1)接收由VTD发送过来的传感器数据(上图红色箭头),并通过NI的CAN卡或者以太网卡将数据转发到对应的控制器等需要仿真的节点。

4、使用CAN卡发送报文给对应的控制器:
1)假设收到VTD发送过来的超声波参数,我们在NI-Veristand可以做比例变化,再以报文形式将数据通过CAN卡转发到对应的控制器等需要仿真的节点;

5、使用Veristand的Stimulus Profile Edito功能控制逻辑;
假设你想写一个逻辑,你就可以通过方式给自己的信号进行逻辑运算,非常方便。

在这里插入图片描述


二、如何组包并发送给VTD?

1、组包方式一

VTD的通讯组包方式有两种:
1、一个包一个整包 ,下图是发送了两个整包。整包就是拥有完整包头、起始帧、子包头、子包体、结束帧的结构。



在这里插入图片描述


2、多个包一个整包


在这里插入图片描述


2、Trigger包的Labview发送方法
1)当VTD收到trigger后会进行画面的渲染,相当于触发命令,循环发送Trigger时间假设为10ms,那VTD的画面就是10ms渲染一帧;

2)我们可以通过结构体,判断这个trigger有多少个字节,bytes=24+16+16+12+16 = 84,trigger包的数据结构严格按照下列结构排序;


在这里插入图片描述


4)在NI-Labview中按照自己的方式去组包(实际的交互是通过Veristand的Custom device去完成的,而Custom device是使用Labview生成的,暂不介绍Veristand生成CD的方法,如果有需要可以找我,或者网上找资料),下述写的组包案例,可以参考一下,反正能正常组包就行了,不一定需要按照下面的方法,(先建立TCP连接,再写入字符串);

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


以上大家参考一下。

注意:simtime和frameNo值每帧都在变化;
1)frameNo每帧需要+1,我这里的时间是0.043s加1;
2)simtime = deltatime(0.043) * frameNo;

2、RDB_DRIVER_CTRL_t的拆包
如何拆包,是根据RDB协议去实行的。


在这里插入图片描述


3、RDB_SENSOR_OBJECT_t的组包


在这里插入图片描述

在这里插入图片描述



5、RDB_CONTACT_POINT_t的拆包


在这里插入图片描述


三、如何设置VTD的通讯参数?

1、VTD的配置参数



在这里插入图片描述



1)点击左侧红框中的设置按钮,在弹出的界面中先在下拉框中选择PROJECT进行设置;
2)为确保VTD在该台架下正常运行,RDB–composeSingleMessage设为True、Sunc–source选择RDB(即VTD通过RDB接收外部Trigger进行触发)、Sync–frameTimeMs/idleFrameTimeMs 设置为10ms与NI中CD的设置值保持一致,点击保存或另存为;
3)在红框中的下拉框中选择Setup继续配置,其各参数需与Projects中保持一致。

四、NI如何拆收到VTD的包?
1、拆包代码
1)先建立TCP连接,读取相应MSG包的Datasize,将后面的子包和PKG ID拆成二维数组,随后再通过PKG ID去找到自己的包和内容;
如下图所示,解出PKG ID 和 PKG ID 对应的内容:

在这里插入图片描述


2、拆包规则
每个子包的组包规则RDB_ENTRY_HDR_t+RDB_PKG_t,具体的数据结构可以查表,这里不做详细的解说,跟上述拆包规则一样,按照图3的规则;

五、总结
综上,完成NI与VTD之间的通讯教程,简单的组包和拆包规则,需要有一定的Labview编程基础,另外Custom device的制作也有一点难度,后续会将Veristand上的操作教程,不懂的大家可以互相交流。
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/zataji/article/details/124136524


收藏 0
分享
分享方式
微信

评论

游客

全部 0条评论

轻松设计高效搭建,减少3倍设计改稿与开发运维工作量

开始免费试用 预约演示

扫一扫关注公众号 扫一扫联系客服

©Copyrights 2016-2022 杭州易知微科技有限公司 浙ICP备2021017017号-3 浙公网安备33011002011932号

互联网信息服务业务 合字B2-20220090

400-8505-905 复制
免费试用
微信社区
易知微-数据可视化
微信扫一扫入群