ScenarioGuide

引言#

本教程旨在作为构建 sumo 场景的高级指南。它概述了构建场景时通常遵循的步骤,并列出了每个步骤推荐的文档页面。

构建道路网络#

每次仿真都需要一个道路网络。应用程序 netconvert 用于创建可供仿真 sumo 使用的网络。也可以使用 netedit 手动构建/修改仿真网络,它提供了图形用户界面。

如果您已有网络数据#

检查是否可以直接导入:Networks/Import。否则,您需要将数据转换为 netconvert 可以读取的简单 XML 格式。请阅读此页面:Networks/Import

如果您还没有任何网络数据#

使用来自 OpenStreetMap 的公开网络数据,如这里所述:Networks/Import/OpenStreetMapDownload。然后按照这里的描述导入网络:Networks/Import/OpenStreetMap

生成交通流#

首先,您应该了解车辆建模的基础知识:Definition_of_Vehicles,_Vehicle_Types,_and_Routes。有多种方法可以将车辆插入地图。您的选择基本上取决于您拥有的关于交通的何种信息:Demand/Introduction_to_demand_modelling_in_SUMO

改进您的场景#

大多数网络导入方法都会导致网络质量存在缺陷。这些缺陷通常表现为意外/不切实际的交通拥堵和车辆瞬移错误。

修改网络#

您必须修补您的网络数据以添加缺失的道路、禁止某些转弯、校正车道数量以及添加/删除某些交通信号灯。执行必要更改的推荐方法包括:

  1. 将更改编码为 plain-xml 文件,如 Networks/Building_Networks_from_own_XML-descriptions 中所述。大多数 XML 属性都是可选的,因此您只需设置要更改的值。
  2. 使用 netconvert 修补您的网络,方法是加载 net.xml 以及 plain-xml 文件。您甚至可以在初始导入期间使用此方法(即加载 OSM 文件以及您的 plain-xml 文件)。
  3. 直接通过 GUI 调整您的网络:打开程序 netedit 后,首先加载需要修改的网络文件 (*.net.xml)。然后,在 netedit 中选择相应的功能来修改,例如车道数量、道路形状、交通信号灯计划、交叉口几何形状,以及合并交叉口或边。
  4. 使用 Net/netDiff.py 从更新的网络(例如 osm)获取新信息。然后您可以使用 netconvert 和 netDiff.py 生成的差异文件来更新您的网络。

示例:修补节点类型#

准备一个像这样的文件:

patch.nod.xml :

<nodes>
    <node id="id_of_the_node_you_want_to_modify" type="right_before_left"/>
<nodes>

并像这样修补网络:

netconvert --sumo-net-file your.net.xml --node-files patch.nod.xml -o yourpatched.net.xml

或者在初始导入期间执行修补:

netconvert --osm-file yourOSMfile.xml --node-files patch.nod.xml ...<other options>

通过 plain.xml 修改导入的网络#

除了修补单个元素之外,您还可以将网络转换为 plain.xml,修改 plain 文件,然后像这样重新组装网络:

netconvert --sumo-net-file your.net.xml --plain-output-prefix yourplain

或者在导入期间:

netconvert --osm-files yourOSMinput.xml --plain-output-prefix yourplain ... <your other options>

这将为您提供以下文件:

yourplain.edg.xml
yourplain.nod.xml
yourplain.con.xml
yourplain.tll.xml

您可以编辑这些文件,然后通过加载部分或全部文件来重新组装网络:

netconvert --edge-files yourplain.edg.xml --node-files yourplain.nod.xml -o new.net.xml

或者

netconvert --edge-files yourplain.edg.xml --node-files yourplain.nod.xml --connection-files yourplain.con.xml -o new.net.xml

Note

当处理基于 OSM 输入的网络时,.edg.xml 文件将包含边的 OSM 类型信息(即 highway.residential)。当使用 netconvert 加载此类 .edg.xml 文件时,您需要提供选项 --ignore-errors.edge-type 或加载类型文件以防止出现 Type ... not defined 形式的错误。

sumolib 的帮助下修改节点位置#

Sumolib 是一个用于处理 SUMO 文件的 python 库。文件 <SUMO_HOME>/tests/tools/sumolib/patch_network/runner.py 提供了一个使用几行 python 代码随机更改所有节点位置的示例。

交通信号灯程序#

在几乎所有情况下,交通信号灯程序都是由 netconvert 猜测的,并且与真实的交通信号灯不同。改善交通信号灯程序的一个简单方法是让它们在不同的时间开始其程序周期。尝试使用 netconvert 的选项 --tls.half-offset 和所有其他 --tls.* 选项。

改善交通信号灯的一种更实用、更有效的方法是使用 tls.xml 文件显式提供程序

截至目前,netconvert 仅支持创建静态交通信号灯程序。有关动态交通信号灯,请参见 Tutorials/TraCI4Traffic_Lights。此外,也可以设置感应式交通控制,可以基于时间间隔或时间损失。有关感应式交通控制和设置的更多信息,请参见 Simulation/Traffic_Lights#Actuated_Traffic_Lights)。

管理场景#

如果您有两个网络 A.net.xmlB.net.xml,您可能希望找出它们之间的差异。这可以使用工具 <SUMO_HOME>/tools/net/netdiff.py 来完成。运行此工具将为您提供一组 plain-XML 差异文件。它们仅包含按已删除已创建已更改元素分组的差异。甚至可以将这些文件与 A.net.xml 一起加载以重新创建 B.net.xml