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

提示:主要介绍使用的是Carsim、Veristand、NI-Veristand 三个软件联合仿真,为了更好的展现内容,这里先讲NI-Veristand和VTD的联合仿真,其实就是传感器模型、驾驶员模型与实时系统之间的交互,这里先脱离动力控制系统做场景及传感器仿真的叙述。

文章目录

  • 前言
  • 一、NI实时系统
        • 1、制作NI Custom Device对VTD RDB包的收发
        • 3、接收并转发VTD发送来的传感器数据包
        • 4、使用CAN卡发送报文给对应的控制器:
        • 5、使用Veristand的Stimulus Profile Edito功能控制逻辑;
  • 二、如何组包并发送给VTD?
        • 1、组包方式一
        • 2、Trigger包的Labview发送方法
        • 2、RDB_DRIVER_CTRL_t的拆包
        • 3、RDB_SENSOR_OBJECT_t的组包
        • 5、RDB_CONTACT_POINT_t的拆包
  • 三、如何设置VTD的通讯参数?
        • 1、VTD的配置参数
  • 四、NI如何拆收到VTD的包?
        • 1、拆包代码
        • 2、拆包规则
  • 五、总结


前言

提示:下图为Casim、Veritand、VTD之间的关系,彼此都在做什么事情:
下图为整个HIL的台架方案:
自动驾驶仿真:Carsim、NI和VTD联合仿真课题一_第1张图片
这里需要特别注意的是动力学软件Carsim不做车辆方向盘控制,因为场景用的VTD的,所以必须由VTD的驾驶员去判断走向,动力学无法判断车辆的方向。

自动驾驶仿真:Carsim、NI和VTD联合仿真课题一_第2张图片


提示:这里讲的是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功能控制逻辑;

假设你想写一个逻辑,你就可以通过方式给自己的信号进行逻辑运算,非常方便。
自动驾驶仿真:Carsim、NI和VTD联合仿真课题一_第3张图片


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

1、组包方式一

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

自动驾驶仿真:Carsim、NI和VTD联合仿真课题一_第4张图片

2、多个包一个整包
自动驾驶仿真:Carsim、NI和VTD联合仿真课题一_第5张图片

2、Trigger包的Labview发送方法

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

2)我们可以通过结构体,判断这个trigger有多少个字节,bytes=24+16+16+12+16 = 84,trigger包的数据结构严格按照下列结构排序;
自动驾驶仿真:Carsim、NI和VTD联合仿真课题一_第6张图片

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

自动驾驶仿真:Carsim、NI和VTD联合仿真课题一_第8张图片
自动驾驶仿真:Carsim、NI和VTD联合仿真课题一_第9张图片

以上大家参考一下。

注意: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的组包

自动驾驶仿真:Carsim、NI和VTD联合仿真课题一_第10张图片
自动驾驶仿真:Carsim、NI和VTD联合仿真课题一_第11张图片

5、RDB_CONTACT_POINT_t的拆包

自动驾驶仿真:Carsim、NI和VTD联合仿真课题一_第12张图片


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

1、VTD的配置参数

自动驾驶仿真:Carsim、NI和VTD联合仿真课题一_第13张图片
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 对应的内容:
自动驾驶仿真:Carsim、NI和VTD联合仿真课题一_第14张图片

2、拆包规则

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


五、总结

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

你可能感兴趣的:(HIL仿真,自动驾驶)