首页 > 汽车技术 > 正文

A basic OPENSCENARIO player

2021-03-24 15:20:32·  来源:自动驾驶仿真  
 
我们前面介绍过一些仿真器,也提过一些场景生成方法,这都是与自动驾驶仿真相关的重要话题。但众所周知,到了最后,仿真的关键还是在于数据。这就涉及仿真中另一
我们前面介绍过一些仿真器,也提过一些场景生成方法,这都是与自动驾驶仿真相关的重要话题。但众所周知,到了最后,仿真的关键还是在于数据。这就涉及仿真中另一个非常重要的话题:标准场景数据格式,即OpenX系列和高级场景语言之类。有了这些,数据交换才有基础,大规模的基于数据的仿真才不会变成无源之水、无本之木。

所以,在接下来一段时间,我们会将重心往这边偏一偏。

今天让我们先看看esmini,一个OpenScenaio解析器。

esmini是一个非常有价值的项目,以前我们花了很大篇幅介绍CARLA,它提供的丰富功能能满足绝大部分仿真需求。相比于CARLA,聚焦于场景设置以及解析这个关键功能的esmini则是小而精致的类型。另外,esmini非常重视自身的易集成性,在开发自己公司的仿真器时,能派上很大用场。

esmini作为一个研究项目的成果,对学生党而言,也是一个非常优秀的自动驾驶仿真项目。它的README写的真诚而详细,作为教学项目非常合适。

esmini背景

esmini的全程是Environment Simulator Minimalistic。项目的目的是探索并熟悉新兴的OpenSCENARIO数据格式。该项目重视所开发的工具的易集成性和可移植性。当前项目成果能够整合到C ++应用程序、Unity3D(C#)以及Simulink等其他框架中。

需要专门提出来的是,这个项目并非主要用于生产用途。另外由于旨在回答与项目有关的研究问题,因此项目代码在清晰度,结构,注释,错误处理和编码准则方面不能保证质量。另外受限于项目需求和研究范围定义,esmini并未支持所有场景元素。

即使如此,esmini的代码作为项目的公开结果依然被原样发布。对有志于构建类似工具,以及习惯于OpenSCENARIO格式的人,esmini可以提供一些指导和灵感。

esmini组成

•  esmini包含以下主要库:

•  RoadManager(esminiRMLib):提供以OpenDRIVE格式描述的道路网络接口库。

•  ScenarioEngine(esminiLib):提供viewer和与以OpenSCENARIO格式描述的交通场景交互的主库。该库包括RoadManager。

•  esmini还提供了一些可以原样使用或为定制解决方案提供灵感的应用模块:

•  esmini :一个静态链接到esmini模块的场景播放器程序。

•  esmini-dyn :一个使用esminiLib播放OpenSCENARIO文件的mini示例。

•  odrplot :能用于从OpenDRIVE产生数据文件,并使用Python绘制路网。

•  odrviewer :使用虚拟交通可视化OpenDRIVE道路网络。

•  replayer :重播以前执行过的场景。

•  osiecever :一个通过UDP从esmini接收OSI消息的简单应用程序。请注意:从版本1.5开始,esmini仅支持OpenSCENARIO v1.0。所有demo场景均已从0.9.1更新到1.0。ASAM提供了一种转换方案。可以与自动迁移XML文件的工具一起使用

esmini使用

在自定义应用程序中集成esmini的最简单方法是链接所有包含的共享库ScenarioEngineDLL。在win上,esmini提供了esminilib.dll; 针对Linux平台提供了libesminiLib.so,为Mac系统提供了libesminiLib.dylib。另外esmini还提供了python接口库。

esmini的部分特性

OSI(open simulation interface)支持

除了用于获取有关正在进行的仿真的信息(例如 道路宽度和道路使用者位置)的内部API外,esmini还会收集其他信息并存储到OSI真值结构中。该结构可以存储在OSI trace文件中,并通过UDP检索和/或通过API直接检索(请参阅esminiLib.hpp)。

Unity支持

esmini共享库在Unity中也可以正常工作。本项目也提供了一个包括如下元素的非常详尽的例子:

•  通用场景播放器脚本

•  一些示例场景(OpenSCENARIO + OpenDRIVE),包括3D模型

•  适用于所有平台的插件

•  将玩家脚本连接到游戏对象的场景

esmini控制器

esmini带有一些控制器(在此场景中控制单个实体的方式):

•  DefaultController :完全按照OpenSCENARIO文件中的指定执行操作。默认情况下分配给实体。

•  InteractiveController :通过键盘箭头键将控制权移交给用户

•  FollowGhost :提前几秒钟执行事件,实体将遵循其轨迹。

•  ExternalController :使用外部程序控制的实体。

•  SumoController :一种在场景中集成SUMO控制的车辆的方法。

其他相关工作

这里提及的项目不隶属于esmini,但都非常有用,近期就会介绍。

pyoscx是一个基于Python的场景创建框架。可以用高级脚本格式编写场景,并自动生成OpenSCENARIO 1.0 XML。

pyodrx是一个基于Python的道路网络创建框架。这个想法用高级脚本格式编写道路网络,并自动生成OpenDRIVE1.4 XML。

pyoscx / scenariogeneratio将pyoscx和pyodrx结合在一起,提供了一个参数化接口,并生成链接的OpenSCENARIO和OpenDRIVE文件来运行多个仿真,

OSC-ALK-scenarios是用于测试自动场景的集合。“宝马承担了根据ALKS法规使用OpenSCENARIO和OpenDRIVE实施测试方案的任务,从而产生了可通过标准兼容模拟器执行的XML文件包。”

esmini-visualizer是一种自动生成可视化场景视频的工具。

OpenScenarioEditor。Infotiv AB在VALU3S项目下开发了一个简单的ASAM OpenSCENARIO编辑器。

RcontrolStation scenario editor。OpenSCENARIO编辑器的另一个胚胎,它是自动驾驶模型车辆平台(SDVP)项目的一部分。

esmini-pybind11是为内部esmini API(不仅是共享库esminiLib和esminiRMLib)建立Python包装器的一项持续工作。

esmini工作原理

最后,再简单提一下esmini工作原理。以下是其主要代码模块的简要介绍。

RoadManager

实现了不完整的OpenDRIVE数据模型和接口。目标是为esmini提供所需和最有用的功能。功能在不断开发中。

Scenario Engine

它解析OpenSCENARIO文件,创建实体,触发器和动作的数据模型。最后,步进场景,评估触发器并相应地执行操作。

它还包括ScenarioGateway。该模块的目的是创建一个管理真值的中央管理器,以允许异步报告实体状态。主要的用例是一个外部模拟器,该模拟器通过

UDP向esmini报告自车(或被测车辆/系统)的状态。单独的接收器线程可以随时向网关报告最新值。有关示例,请参阅server module hpp / cpp。进一步的想法是使用每个报告状态的时间戳,以允许对位置和旋转的推断,以便及时地同步状态,例如,在渲染下一幅图像或为雷达模型提供数据时。

ScenarioEngine还负责以各种方式报告OSI真值:通过API函数来获取OSI结构;保存到OSI trace 文件 ;通过IP / UDP将OSI数据发送到外部主机。

另一个功能是理想的传感器,它由放置在实体上任意位置的视锥台定义。它将检测视锥内部的任何其他实体。请注意当前的限制,即仅考虑实体参考点,因此实体可能部分位于视锥内部,但仍未被检测到。

Viewerbase

提供基本的3D查看器预览方案。它基于OpenSceneGraph开源图形库构建。这是基于稳定性,性能和可移植性而不是flashiness的考虑,这符合esmini的目的。

简而言之,该模块提供以下功能:

道路网络和周围环境的可选3D视觉表征。直接支持.osgb(OpenSceneGraph二进制)文件格式。使用osgconv工具进行转换可以间接支持许多文件格式(注意:esmini中不包括)。
场景实体的3D视觉表征。使用提供的3D模型或esmini将创建替代的虚拟模型,例如根据指定尺寸的3D边界框。

道路特征可视化。例如。OpenDRIVE的几何形状,车道和道路标记。这些特征以非常简单的方式由点和线表示。因此,它不能替代3D模型的值,但是至少在3D模型不可用时,它可以提供一些指导。这对于调试OpenDRIVE道路网络定义中的问题也很有用。

键盘输入。First OSG提供了一组关键的快捷方式来控制视觉功能,例如启用/禁用纹理或线框/阴影模式。然后,esmini添加了一组快捷方式来控制各种功能,例如切换道路特征可视化或更改摄影机行。可以在docs / readme.txt中找到键盘快捷键的完整列表。键盘输入也被路由到控制器,这对于交互式驾驶模式很有用。

PlayerBas

该模块将ScenarioEngine与Viewer结合在一起,还提供了高级API,用于在自定义播放器应用程序中初始化,步进和控制场景。

Commonmini

在模块和应用程序之间共享的便捷功能的集合。例如:参数解析器、计时器、线程和互斥、数学运算以及logger等。

How the module interacte

在较高级别上,步进播放器时的事件顺序为:

A basic OPENSCENARIO player

要了解esmini的内部使用和开发目的,让我们放大一个层次:

A basic OPENSCENARIO player1
分享到:
 
反对 0 举报 0 收藏 0 评论 0
沪ICP备11026917号-25