自动驾驶仿真:VTD的SCP命令详解


前言

VTD的SCP(Simulation Control Protocol )用于进行非周期性的,即事件性的信息交互。通过发送SCP命令给到TaskControl,TaskControl根据命令的内容分发到进程,从而实现对VTD的操作,因此SCP是VTD自动化的基础。


一、SCP与VTD的通讯方式

1、GUI界面发送SCP命令

1、VTD软件主页面最下方有SCP的发送和接收的命令栏,命令栏会显示所有发送和接收到的SCP命令。
在这里插入图片描述

2、Scenario发送SCP命令

1、我们可以在Scenario界面添加车辆,通过双击车辆进入properties界面,然后在Actions界面中的SCP中添加SCP命令;

在这里插入图片描述

3、外部TCP发送SCP命令

1)创建端口号为48179的TCP连接
2)根据SCP的格式进行组包,如下图所示
在这里插入图片描述
假设发送的SCP命令为:

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

则需要通过TCP发送给VTD的数据如下:

AC9C 0100 7365 6E64 6572 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 7265 6365 6976 6572 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0039 0000 003C 506C 6179 6572 206E 616D 653D 2245 676F 223E 3C44 7269 7665 7220 2073 656E 6450 6564 616C 733D 2274 7275 6522 202F 3E3C 2F50 6C61 7965 723E

二、SCP命令格式

1、VTD SCP DOC

在这里插入图片描述

在这里插入图片描述

2、SCP DOC解析

1、结构解析
在这里插入图片描述

2、主标签解析
在这里插入图片描述

3、子级标签解析
在这里插入图片描述

3、SCP命令XML格式

1、格式解析

//标签数量有三个的时候的写法
形式一:
<主标签>
 <一级标签 一级标签成员 = "常量/枚举值">
  <二级标签 二级标签成员 = "常量/枚举值">
  </二级标签>
 </一级标签>
</主标签>

形式二:
<主标签>
 <一级标签 一级标签成员 = "常量/枚举值">
  <二级标签 二级标签成员 = "常量/枚举值" />
 </一级标签>
</主标签>

//标签数量有二个的时候的写法
形式一:
<主标签>
 <一级标签 一级标签成员="常量/枚举值" >
 </一级标签>
</主标签>

形式二:
<主标签>
 <一级标签 一级标签成员="常量/枚举值" />
</主标签>

注意:

2、格式举例

//标签数量有三个的时候的写法
形式一:
<Set>  
 <Trigger owner="Ego">
  <ExternalTrigger id="1">
  </ExternalTrigger>
 </Trigger>
</Set>

形式二:
<Set> 
 <Trigger owner="Ego">
  <ExternalTrigger id="1" />
 </Trigger>
</Set>

//标签数量有二个的时候的写法
形式一:
<Traffic>
 <ActionSpeedChange actor="Ego" force="true" rate="1" target="0.003" >
 </ActionSpeedChange>
</Traffic>

形式二:
<Traffic>
 <ActionSpeedChange actor="Ego" force="true" rate="1" target="0.003" />
</Traffic>

三、常用SCP分类

介绍一些常用的标签,在SCP DOC里面可以找到。

1、ImageGenerator

IG 相关的部分,需要可视化部分,下述分类主要讲述ImageGenerator对应子标签的作用

Environment
自然环境设置:太阳 GUI

Camera
相机设置:内参数 FOV 等 display.xml

Symbol
符号设置:2D/3D 问题或图形 SymbolStd.xml

Display
显示设置 GUI

Instrument
2D 仪表盘

ImageGenerator
IG 设置:控制 switch,后处理的变量和材质

LightSource
光源设置:车辆大灯 LightSrcStd.xml

Observer
鸟瞰设置

2、TaskControl

整个仿真控制相关的部分,下述分类主要讲述TaskControl对应子标签的作用
Video
录制视频

Record
录制数据

SimCtrl
仿真控制:启动,停止,初始化,配置等

Replay
回放数据

TaskControl
TC 设置:显示仿真时间和车速,vtdParamServerAutoLoad.stp.xml

3、Traffic

交通、驾驶员、交通参与者等信息的设置,下述分类主要讲述Traffic对应子标签的作用
Traffic
交通设置:理解逻辑之后进行设置,详细看 Traffic 部分

TrafficLight
交通等设置:直接设置 state phase

Player
车来/行人设置:车辆指示灯

EgoCtrl
本车命令:即 SE 中可以给出的行为

Path
路径设置

Set
对一个实体进行设置(包括 object):位置

4、ModuleManager

传感器插件动力学插件 ,下述分类主要讲述ModuleManager对应子标签的作用
Plugin
管理 Plugin

Sensor
传感器设置 moduleManager.xml

DynamicsPlugin
动力学设置 moduleManager.xml

5、Information

查寻和配置 ,下述分类主要讲述Information对应子标签的作用
Query
询问一个实体的信息:交通参与者、物体、相机、窗口

Relpy
回复一个实体的信息,对应 Query

GSIConfig
通用仿真接口设置

RDB
RDB 设置

SCP
SCP 设置

Parameter
用于自定义参数

Info
信息

ContactPoint
构造触点

6、Other

Dynamics
和 veDYNA 联合使用

Sound
声音

VIL
车在环设置

Team
多驾驶模拟器联合

Rail
轨道交通

四、常用SCP命令

车速控制:以1m/s²的加速度到8m/s的速度

<Traffic><ActionSpeedChange actor="Ego" force="true" rate="1" target="8" /></Traffic>

变道控制:3s完成左变道控制

<Traffic><ActionLaneChange actor="Ego" direction="1" force="true" time="3" /></Traffic>

变道控制:3s完成右变道控制

<Traffic><ActionLaneChange actor="Ego" direction="-1" force="true" time="3" /></Traffic>

位置查询:查询名称为Ego的车辆位置

<Query entity="player" name="Ego"><PosInertial /></Query>

位置设置:设置车辆的绝对位置

<Set entity="player" name="Ego"><PosInertial x="1850" y="733" hDeg="110.0"/></Set>

仿真状态设置:停止仿真

<SimCtrl><Stop /></SimCtrl>

仿真状态设置:开始仿真

<SimCtrl><Start mode="opration" /></SimCtrl>

仿真状态设置:单步运行

<SimCtrl><Step size="1"/></SimCtrl>

3D显示:BoundingBox显示

<Symbol name="bbox" ><BoundingBox player="Ego" /></Symbol>

交通灯:切换交通灯

<TrafficLight id="221"><Mask value="0x01000000"/></TrafficLight>
//Traffic light for the vehicles: 0x10000000 = red, 0x01000000 = yellow, 0x00100000 = green. Traffic light for the pedestrians: 0x10000000 = red, 0x01000000 = green.

车灯:切换车灯

<Player name="Ego">
 <Light type="indicator right" state="on"/>
 <Light type="indicator left" state="off"/>
</Player>

在这里插入图片描述


行驶路径创建:pathshape路径创建

<Path name="pathshape" type="polyline">
 <Waypoint><PosInertial player="Ego" x="6043.431" y="-2741.197" z="0"/></Waypoint>
 <Waypoint><PosInertial player="Ego" x="6046.624" y="-2697.614" z="0"/></Waypoint>
 <Waypoint><PosInertial player="Ego" x="6039.388" y="-2666.049" z="0"/></Waypoint>
</Path>

行驶路径配置:pathshape路径配置

<Traffic>
 <ActionNominalTrajectory waypointSequence="ascending" startS="0" radius="25" force="true" targetS="100" delayTime="0.0" command="add" />
</Traffic>

视屏录制:开始录制

1. Configure the video output:
<Video> <Output path="/tmp/" name="myVideo" /> </Video>
2. Start the live recording
<Video> <Start live="true"/> </Video>
3. Stop the live recording
<Video> <Stop/> </Video>

猜你喜欢

转载自blog.csdn.net/zataji/article/details/125579079