自动驾驶仿真:如何通过TCP方式进行VTD驾驶员仿真

文章目录

  • 前言
  • 一、配置sendInternalDriverCtrl
  • 二、配置ModuleManager动力学模型
  • 三、外部输入请求加速度案例


前言

1、VTD在仿真领域内出色的是场景渲染,动画效果非常真实。但是他不仅仅是针对场景的仿真软件同时具备动力学控制的能力。外部可以通过TCP的方式直接替换驾驶员的部分参数,从而达部分仿真。

2、VTD加载自己的动力学模型,会通过TCP发出 RDB_DRIVER_CTRL_t 来控制自己的车辆运行。第三方可以通过TCP发送RDB_DRIVER_CTRL_t,替换VTD发出的RDB_DRIVER_CTRL_t中的值,如修改加速度参数,更改驾驶员模型的控制参数实现部分仿真。


一、配置sendInternalDriverCtrl

1、关闭sendInternalDriverCtrl,内部不再发送DriverCtrl的包。如果不关闭,则内部会发送RDB_DRIVER_CTRL_t的包,导致第三方发送的RDB_DRIVER_CTRL_t无法生效,无法成功替换目标控制参数。

下图是未关闭sendInternalDriverCtrl,用Rdbsniffer读取pkg id = 26的值的效果;
自动驾驶仿真:如何通过TCP方式进行VTD驾驶员仿真_第1张图片

2、因此需要在TaskControl的parameterserver的设置中将RDB里面的sendInternalDriverCtrl设置为了false;
自动驾驶仿真:如何通过TCP方式进行VTD驾驶员仿真_第2张图片

二、配置ModuleManager动力学模型

1、打开对应Project的ModuleManager.xml,配置任一动力学模型,确保内部的动力学模型参与车辆控制;
动力学模型一:

<DynamicsPlugin name="viTrafficDyn">
    <Load     lib="libModuleTrafficDyn.so" path=""/>
    <Player   default="true" />
    <Debug    enable="false" />
DynamicsPlugin>

动力学模型二:

<DynamicsPlugin name="viTrafficDynComplex">
    <Load     lib="libModuleTrafficDynComplex.so" path=""/>
    <Player   default="true" />
    <Debug    enable="false"
              dynInput="true"
              dynOutput="true"
              CSV="false"
              packages="true"/>
DynamicsPlugin>

需要注释其一动力学不生效,如:



三、外部输入请求加速度案例

1、需要发送的RDB结构:RDB_DRIVER_CTRL_t + RDB_TRIGGER_t;

1)按照下述结构体组成RDB包,并使用TCP的方式发送:
自动驾驶仿真:如何通过TCP方式进行VTD驾驶员仿真_第3张图片

2)下图是具体每个包的结构体:
自动驾驶仿真:如何通过TCP方式进行VTD驾驶员仿真_第4张图片

自动驾驶仿真:如何通过TCP方式进行VTD驾驶员仿真_第5张图片
按照上图规则,组成有字符串Byte,再发送出去,这里就不举例怎么发了,有需要的可以单独找我,不过按照这个结构体发肯定没问题;

2、使用SCP的方式更改驾驶员的控制方式,因为我们需要输入请求的加速度,因此需要在VTD界面发送SCP指令,告诉VTD使用加速度计算出踏板开度从而控制车辆,这部分工作在VTD内部完成。

<Player name=”Ego”> <Driver sendPedals=”true” /> Player>

3、我们仔细看RDB_DRIVER_CTRL_t 结构体,会有个ValidityFlags的枚举变量,这个参数非常重要,我们通过给ValidityFlags赋不同的值,来给对应的参数置于标志位,使得参数控制有效。

自动驾驶仿真:如何通过TCP方式进行VTD驾驶员仿真_第6张图片

4、假设RDB_DRIVER_CTRL_t需要控制车辆加速度,则validityFlags = 0x20(TGT_ACCEL) | 0x2000(ADD_ON),最终validityFlags需要发送0x2020,ADD_ON相当于替换VTD内部动力学中的TGT_ACCEL发的值;如需要控制加速度和方向盘;validityFlags = 0x20(TGT_ACCEL) | 0x40(TGT_STEEING) | 0x2000(ADD_ON),validityFlags需要发送0x2060


总结
上述控制最重要的就是validityFlags中的ADD_ON,这个相当于替换VTD驾驶员模型发出的RDB_DRIVER_CTRL_t中请求加速度的值或者其他参数,改为由我方输入的值来控制车辆。

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