OpenDRIVE

要读取 OpenDRIVE 网络,请向 netconvert 提供选项 --opendrive-files <FILE>[,<FILE>]* 或简写 --opendrive <FILE>[,<FILE>]*。

netconvert --opendrive myOpenDriveNetwork.xodr -o mySUMOnetwork.net.xml

netconvert 也可以 写入 OpenDrive 网络

用户选项#

定义要导入的车道类型#

OpenDRIVE 允许将车道分配给一个抽象的(非预定义的)类别。有些车道可供车辆使用,有些则代表不可使用的建筑结构,例如路缘石。在读取 OpenDRIVE 文件时,netconvert 会通过查看预定义和/或加载的 边类型 来确定是否以及如何导入车道。 几种已知的车道类型是预定义的,并在下表中与其默认值一起显示。可以使用同名的 边类型 覆盖它们。如果在读取的 OpenDRIVE 文件中未由车道显式设置,则从 边类型 中检索以下属性:

  • 宽度 (width)
  • 最大允许速度 (maximum allowed speed)
  • 允许的车辆类别 (allowed vehicle classes)
**[netconvert](../../netconvert.md) 解释为行车道的车道类型**
type@lane imported default speed [km/h] default width [m] allowed vehicle classes
driving x 80 3.65 all
stop x 80 3.65 all
mwyEntry x 80 3.65 all
mwyExit x 80 3.65 all
special1 x 80 3.65 all
parking x 5 3.65 all
sidewalk - - - -
border - - - -
shoulder - - - -
none - - - -
restricted - - - -

所有其他类型均不会被导入。

因此,如果您希望导入类型为 "border" 的车道,则必须额外加载一个 边类型 文件,如下所示:

<types>

  <type id="border" priority="0" numLanes="1" speed="1.39"/>

</types>

预定义的类型映射#

以下边类型文件位于 {{ SUMO_HOME }}/data/typemap 中,用于 OpenDRIVE 导入:

  • opendriveNetconvert.typ.xml:用于导入汽车网络的默认类型映射。如果未设置选项 --type-files,将使用此文件。
  • opendriveNetconvertBicycle.typ.xml:可与默认类型映射结合使用,以同时导入自行车道。
  • opendriveNetconvertPedestrians.typ.xml:可与默认类型映射结合使用,以同时导入人行道。

导入过程#

处理车道段 (Lane Sections)#

OpenDRIVE 边可能包含一个或多个“车道段”。由于 OpenDRIVE 车道段在任一方向上的车道数量可能不同,导入器必须在所有车道段处分割导入的边。生成的边 ID 由原始边 ID 和车道段在边内的偏移量(车道段的 s 值)构成,如果使用选项 --opendrive.position-ids,则用点 ('.') 分隔。例如,边 '100' 的第一个车道段被命名为 '100.0.00'。假设该边在 s=100 处有另一个车道段,则会构建另一个名为 '100.100.00' 的边。

导入器检查车道段是否按正确的顺序(s 值递增)给出,如果不是,则对其进行重新排序。此外,非常短的车道段(即 s 值接近(POSITION_EPS,0.1 m)上一个车道段)将被删除。我们仅在自动生成(扫描)的网络中见过这种情况。

处理速度变化#

OpenDRIVE 允许定义沿车道的允许速度变化。由于 SUMO 道路网络不支持此功能,导入的 OpenDRIVE 边会在车道速度变化的位置处分割。在内部,这是通过构建额外的车道段来处理的。结果,边的 ID 的构建方式与车道段相同——新车道段的 s 值由原始车道段的 s 值加上速度变化的 sOffset 值组成。

几何处理#

OpenDRIVE 中的几何形状采用参数曲线(圆弧、螺旋线和样条曲线)的形式。这些曲线都以可配置的精度(--opendrive.curve-resolution <FLOAT>)进行采样,以在 .net.xml 中生成折线。交叉口形状未在 OpenDRIVE 中编码。它们是根据普通道路和连接道路形状相交的点生成的。

交通信号灯处理#

OpenDRIVE 通过信号的物理方面、位置及其控制的车道来考虑交通信号灯。可选地,信号可以分组在 <controller> 元素中。 车辆信号默认导入到 SUMO 中,并组织为每个交叉口一个交通信号灯。如果选项 --opendrive.signal-groups <FLOAT> 设置为 true,netconvert 将尝试在 SUMO 中构建与 OpenDRIVE <controller> 项给出的相同的信号组。这可能会生成无效的 SUMO 信号程序(次要“g”与主要绿色“G”,参见信号状态)或由于复杂的信号组设置而失败。 目前,自行车和行人的信号未被导入。

引用原始 ID#

使用选项 --output.original-names 时,每个车道将接收一个 <param origID="EDGE_ID LANE_INDEX"/>,可用于 TraCI 函数 moveToVTD

此外,当使用选项 --opendrive-output 导出到 OpenDrive 并使用选项 --output.original-names 时,每个 <road> 元素将获得一个附加元素,该元素引用 .net.xml 文件中的相应边 ID:

<userData sumoId="sumo_edge_id"/>

忽略错位的交通信号#

OpenDrive 标准难以遵循,尤其是像 1.4 这样的旧版本存在一些问题。在该版本之前,没有适当的方法将交通信号的物理位置(杆)与逻辑位置(停车线)分开。从 OpenDrive 1.5 开始,可以明确定义信号的物理位置。尽管标准强调交通信号灯所在道路是其应控制的道路,但在某些 OpenDrive 1.4 网络中,信号被放置在人行道上(其物理位置)。仅对于 OpenDrive 1.4 网络,选项 --opendrive.ignore-misplaced-signals 允许跳过在“行车”车道之外定义的信号。

道路对象#

通过设置选项 --polygon-output <FILE>,输入中存在的任何道路对象都将导出为 可加载的形状。如果设置了选项 --proj.plain-geo true 且输入网络是地理参考的,则生成的形状也将写入地理坐标。

支持的版本和功能#

netconvert 旨在支持跨 OpenDRIVE 版本的尽可能多的功能。通常支持 1.4 版本。 您可以在我们的问题跟踪器中查看每个版本的功能支持(并请求新功能):