接上篇VTD软件架构一,我们继续了解VTD的架构图
一、VTD的输入与输出
我们按照VTD的流程进行梳理
1.准备阶段:ROD静态道路搭建
输入:国家道路规范、合格外部模型、已有的tile
输出:道路逻辑数据文件xodr,环境3D数据文件osgb
2.配置阶段:ScenarioEditor 动态场景配置
输入:道路逻辑数据文件xodr(关键),环境3D数据文件osgb
输出:场景文件xml
3.运行阶段:仿真运行
输入:Setup(根据simServer.xml 启动各进程,及配置文件)和 Project 及 Scenario
输出:traffic 数据输出(RDB) ,IG 数据输出(Monitor or Shm or RDB)
4.后处理阶段:对仿真运行的数据进行后期处理
输入:仿真结果,评价标准
输出:评价结论,测试报告
二、框架整体逻辑
当在GUI上按下Apply以后,除了TC(TaskControl)和PS(ParameterServer),以外Traffic、IG、MM(Module Manager)也启动,可以看到他们三个的小窗
Traffic启动,即它知道了需要执行的场景文件xml和逻辑道路文件xodr是哪个ig 启动,即它知道了需要执行的场景文件osfb,天空模型材质数据,车辆模型等等都在哪里
MM启动,即它让由它管理的传感器和动力学模型都初始化,准备开始工作
注意:刚刚按下按钮的操作,实际上是GUI向TC发送了一条SCP报文,从而导致以上行为
当在GUI上按下Start按钮以后,仿真正式开始。
TC会根据我们在ParamServer的配置开始统筹所有模块进行仿真,再次忽略同步等具体细节。
1.Traffic 根据场景文件 xml 开始运算第一帧下交通场景的状况
如:交通灯这一帧phase,internal车辆这一帧的位置姿态,各个trigger的状态等等。重要的是,根据extern车辆的驾驶员配置,制作出当前这一帧的驾驶行为信息。
当然了,Traffic还需要通过OdrMgr访问xodr文件获取信息进行计算。
2.TC从Traffic得到场景全部逻辑信息后进行分发。
如:驾驶信息传递给MM,场景信息也要给MM,如果SE启动了,也会给它。以及重要的是给IG。
3.MM从Traffic得到了数据以后,按照plug-in的优先级调用他们
如:传感器plugin得到了数据,会根据传感器的参数,对数据过滤,然后组织结果,发到指定端口。动力学plugin得到了数据,计算出extern车辆的位置姿态,发送给TC
4.SE从TC获得数据后,可以实时显示场景当中各交通参与者的状态。SE也可以用 Monitor向TC发出SCP指令;GUI也可以发SCP指令,来影响下一次的仿真状态。如果 SCP是关于交通的,比如让某车换道,那么信息会给Traffic里的驾驶员模型来执行。如果SCP是关于环境的,比如改变天气,那么信息会给IG渲染除相应的雨雪效果。
5.IG从TC获得数据后,进行渲染
如:根据当前环境调整关照,根据当前摄像头信息进行画面渲染,根据当前交通信息摆放车辆等。如:如果IG有plug-in,也要根据优先级分别调用,例如完成激光雷达的感知工作。
就这样一帧一帧向前跑,每个模块都有自己的工作,具体每个模块的运行收到配置文件影响。
例如IG有非常多的配置文件,MM则只需要维护一个文件。
外加的模块要参与进来,就是通过SCP和RDB的方式。
Mockup接进来一个方向盘和踏板 ,其实就是USB信号进来解析并且打包成RDB发给Dynamics了。Sound接进来就是通过TC得到本车的信息,作为参数触发声音发出。
任何3rd Party只要知道RDB和SCP的数据结构和含义,就可以影响整个仿真。
例如用手机发送指令改变天气,或者用手机驾驶本车在路上行驶,当然这需要开发手机客户端。
而生成数据如果要外接设备则根据具体情况分析,例如如果视频流需要到处,则可能需要融合机。
如果RDB的数据需要给到ECU,那么需要转换成CAN信号。
具体的工程问题就需要具体分析了。
以上就是关于VTD架构图的说明,后续的教程也会在此基础上定时更新,下期再见!