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

Posted mydate()

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动驾驶仿真:如何通过TCP方式进行VTD驾驶员仿真相关的知识,希望对你有一定的参考价值。

文章目录


前言

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的值的效果;

2、因此需要在TaskControl的parameterserver的设置中将RDB里面的sendInternalDriverCtrl设置为了false;

二、配置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>

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

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

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

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

1)按照下述结构体组成RDB包,并使用TCP的方式发送:

2)下图是具体每个包的结构体:


按照上图规则,组成有字符串Byte,再发送出去,这里就不举例怎么发了,有需要的可以单独找我,不过按照这个结构体发肯定没问题;

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

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

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

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中请求加速度的值或者其他参数,改为由我方输入的值来控制车辆。

CSDN 社区图书馆,开张营业! 深读计划,写书评领图书福利~

以上是关于自动驾驶仿真:如何通过TCP方式进行VTD驾驶员仿真的主要内容,如果未能解决你的问题,请参考以下文章

自动驾驶研发模拟仿真系统的工作介绍

Carsim Simulink自动驾驶仿真基于MPC的速度控制

ADAS与自动驾驶汽车仿真的六个方面

开源自动驾驶仿真平台 AirSim - 编译 AirSim

自动驾驶成本控制 - 系统仿真层次分析

设立『自动驾驶虚拟仿真赛道』