要读取 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)
| 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 版本。 您可以在我们的问题跟踪器中查看每个版本的功能支持(并请求新功能):
