本教程通过一个示例网络,介绍了SUMO在交通分析中的基本应用和核心功能。
此处提及的所有文件都可以在 ***<SUMO_HOME>***/docs/tutorial/quickstart 目录中找到。最新版本可以在代码库的 <SUMO_HOME>/tests/complex/tutorial/quickstart/data 中找到。
示例描述#
在本示例中,将使用SUMO应用程序分析交通状态。示例网络包括四个起点、四个终点以及两个无信号控制的交叉口。在研究区域内,每条出城道路都有三条车道,且每条车道允许的交通流向受到限制。所有交叉口均禁止掉头行为。此外,东西向交通被赋予更高的优先级。相应的网络布局如图1.1所示。

图 1.1:网络布局
数据准备#
在SUMO中进行交通分析之前,应首先将图1.1中的示例网络转换为基于节点-连线的网络,如图1.2所示。节点的坐标数据列于表1.2中。

图 1.2:基于节点-连线的示例网络布局
表 1.2 示例网络的坐标数据
| 节点名称 | x坐标 | y坐标 |
|---|---|---|
| 91 | -1000.0 | +1000.0 |
| 92 | -1000.0 | 0.0 |
| 93 | +3000.0 | 0.0 |
| 94 | +3000.0 | +1000.0 |
| 911 | -500.0 | +1000.0 |
| 912 | -500.0 | 0.0 |
| 913 | +2500.0 | 0.0 |
| 914 | +2500.0 | +1000.0 |
| 1 | 0.0 | +1000.0 |
| 2 | 0.0 | 0.0 |
| 3 | +1000.0 | 0.0 |
| 4 | +2000.0 | 0.0 |
| 5 | +2000.0 | +1000.0 |
| 6 | +1000.0 | +1000.0 |
通常,我们必须将给定的信息转换为三个文件,这些文件将作为输入数据被SUMO读取。其中两个文件包含网络信息,在SUMO中将被转换为节点和连线信息,通常分别以扩展名 .nod.xml 和 .edg.xml 命名。包含交通需求和路径信息的文件将以扩展名 .rou.xml 命名。此外,如果需要指定交叉口处允许的交通流向和车道连接以及连线类型,则还需要包含另外两个扩展名为 .con.xml 和 .typ.xml 的文件。图1.3展示了我们示例所需的输入文件概览。

图 1.3:SUMO中示例网络所需的输入文件
(*) 连线几何数据也可以在连线文件 quickstart.edg.xml 中定义。
(**) 这是一个可选文件。如果未提供此文件,将按默认值生成车道连接和交通流向。
括号中的所有文件名都是示例中使用的文件名。
网络编辑#
节点 (Node)#
基于表1.2中的坐标数据和图1.2中的基于节点-连线的网络布局,交叉口、起点和终点分别被编码为节点1-6和节点91-94,并在 .nod.xml 文件中给出相应的x和y坐标。由于车道数量的变化,节点1、2、4和5需要被添加,尽管不存在相应的交叉口。虚拟节点911-914用于分析网络中进出连线的交通性能。如果需要,可以使用更多虚拟节点,例如用于精确的几何对齐或指定检测器位置。
节点文件中的属性定义如下:
- (a) id: 节点的ID名称,由用户使用数字、字符串或两者定义。
- (b) x: 定义节点的x坐标位置(米)。
- (c) y: 定义节点的y坐标位置(米)。
- (d) type: 定义节点的信号控制类型。这是一个可选属性,分别使用 priority 和 traffic_light 来定义无信号和有信号交叉口。
示例网络的完整节点文件如代码清单1.1所示。
代码清单 1.1 示例网络的节点文件格式 (quickstart.nod.xml)
<?xml version="1.0" encoding="UTF-8"?>
<nodes xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://sumo.sf.net/xsd/nodes_file.xsd">
<node id="91" x="-1000.0" y="1000.0" />
<node id="92" x="-1000.0" y="0.0" />
<node id="93" x="3000.0" y="0.0" />
<node id="94" x="+3000.0" y="+1000.0" />
<node id="911" x="-500.0" y="+1000.0" />
<node id="912" x="-500.0" y="0.0" />
<node id="913" x="+2500.0" y="0.0" />
<node id="914" x="2500.0" y="+1000.0" />
<node id="1" x="0.0" y="+1000.0" />
<node id="2" x="0.0" y="0.0" />
<node id="3" x="+1000.0" y="0.0" />
<node id="4" x="+2000.0" y="0.0" />
<node id="5" x="+2000.0" y="+1000.0" />
<node id="6" x="+1000.0" y="+1000.0" />
</nodes>
连线 (Link)#
在SUMO中,道路像其他交通仿真软件一样表示为连线。要定义连线特征,首先必须定义每个连线的标识符 (id),可以使用数字、字符串或两者。关于上游节点、下游节点和连线类型的信息随后存储在扩展名为 .edg.xml 的文件中。每个连线类型的信息可以在扩展名为 .typ.xml 的附加文件中定义,也可以在 .edg.xml 文件中紧随下游节点之后定义。代码清单1.2显示了示例网络使用的连线类型文件,并定义了四个属性:
- (a) id: 由用户使用数字、字符串或两者定义。
- (b) priority: 基于交通法规的驾驶优先级,用数字定义。数字越大,相应道路的优先级越高。如果两者都存在,优先级信息将覆盖节点文件中的信息。
- (c) numLanes: 相应道路上的车道数量。
- (d) speed: 允许的最大连线速度。
类型 (a) 和 (b) 分别用于东西向道路,具有3条和2条车道。类型 (c) 用于南北向道路,优先级较低。
代码清单 1.2 示例网络的连线类型文件 (quickstart.typ.xml)
<?xml version="1.0" encoding="UTF-8"?>
<types>
<type id="a" priority="3" numLanes="3" speed="13.889"/>
<type id="b" priority="3" numLanes="2" speed="13.889"/>
<type id="c" priority="2" numLanes="3" speed="13.889"/>
</types>
使用连线类型文件,生成示例网络的连线文件,如代码清单1.3所示。定义的属性包括:
- (a) id: 连线ID,由用户使用数字、字符串或两者定义。
- (b) from: 相应连线的上游节点ID。
- (c) to: 相应连线的下游节点ID。
- (d) type: 连线类型文件中定义的连线类型ID。
- (e) allow/disallow: SUMO中定义的车辆组ID,可能与用户定义的车辆类型不完全相同。有关此属性应用的更多信息,请参见第4.2节。
代码清单 1.3 示例网络的连线文件 (quickstart.edg.xml)
<?xml version="1.0" encoding="UTF-8"?>
<edges xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://sumo.sf.net/xsd/edges_file.xsd">
<edge id="D1" from="911" to="91" type="a"/>
<edge id="D2" from="91" to="911" type="b"/>
<edge id="D3" from="912" to="92" type="a"/>
<edge id="D4" from="92" to="912" type="b"/>
<edge id="D5" from="913" to="93" type="a"/>
<edge id="D6" from="93" to="913" type="b"/>
<edge id="D7" from="914" to="94" type="a"/>
<edge id="D8" from="94" to="914" type="b"/>
<edge id="L1" from="1" to="911" type="a"/>
<edge id="L2" from="911" to="1" type="b"/>
<edge id="L3" from="2" to="912" type="a"/>
<edge id="L4" from="912" to="2" type="b"/>
<edge id="L5" from="4" to="913" type="a"/>
<edge id="L6" from="913" to="4" type="b"/>
<edge id="L7" from="5" to="914" type="a"/>
<edge id="L8" from="914" to="5" type="b"/>
<edge id="L9" from="5" to="6" type="a"/>
<edge id="L10" from="6" to="5" type="a"/>
<edge id="L11" from="6" to="1" type="a"/>
<edge id="L12" from="1" to="6" type="a"/>
<edge id="L13" from="3" to="2" type="a"/>
<edge id="L14" from="2" to="3" type="a"/>
<edge id="L15" from="6" to="3" type="c"/>
<edge id="L16" from="3" to="6" type="c"/>
<edge id="L17" from="4" to="3" type="a"/>
<edge id="L18" from="3" to="4" type="a"/>
</edges>
交通流向 (Traffic movements)#
SUMO默认基于所有可能的几何设计生成逻辑交通流向。如果没有相应的规范,则允许掉头。默认设置是每个连线的最右侧车道与相应下游连线的最右侧车道对齐。要指定交通流向和车道连接,需要一个扩展名为 .con.xml 的附加文件。代码清单1.4显示了示例网络的相应设置。每个属性的含义如下:
- (a) from: 将指定交通流向的连线ID。
- (b) to: 作为上述定义连线的下游连线的ID。
- (c) fromLane/toLane: (a)中定义连线的车道编号和 (b)中连线的车道编号,这些车道是相连的。
例如,表1.6中的第一行
<connection from="L2" to="L12" fromLane="0" toLane="0"/>
和第二行
<connection from="L2" to="L12" fromLane="0" toLane="1"/>
意味着连线L2上车道0的交通将仅使用连线L12的车道0和车道1(见图1.4)。相比之下,图1.5显示了基于默认设置的允许交通流向作为参考。图1.6给出了另一个示例,用于指定连线L9、L12和L16上的交通流向,定义于表1.6中。
禁止掉头行为只能全局定义,并在执行网络生成时进行。解释将在第1.3节中提供。
代码清单 1.4 交通流向规范 (quickstart.con.xml)
<?xml version="1.0" encoding="UTF-8"?>
<connections xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://sumo.sf.net/xsd/connections_file.xsd">
<connection from="L2" to="L12" fromLane="0" toLane="0"/>
<connection from="L2" to="L12" fromLane="0" toLane="1"/>
<connection from="L2" to="L12" fromLane="1" toLane="2"/>
<connection from="L4" to="L14" fromLane="0" toLane="0"/>
<connection from="L4" to="L14" fromLane="1" toLane="1"/>
<connection from="L4" to="L14" fromLane="1" toLane="2"/>
<connection from="L9" to="L11" fromLane="0" toLane="0"/>
<connection from="L9" to="L11" fromLane="1" toLane="1"/>
<connection from="L9" to="L11" fromLane="1" toLane="2"/>
<connection from="L9" to="L15" fromLane="1" toLane="1"/>
<connection from="L9" to="L15" fromLane="2" toLane="2"/>
<connection from="L16" to="L10" fromLane="0" toLane="0"/>
<connection from="L16" to="L10" fromLane="1" toLane="1"/>
<connection from="L16" to="L10" fromLane="1" toLane="2"/>
<connection from="L16" to="L11" fromLane="2" toLane="2"/>
<connection from="L12" to="L15" fromLane="0" toLane="0"/>
<connection from="L12" to="L15" fromLane="1" toLane="1"/>
<connection from="L12" to="L10" fromLane="1" toLane="0"/>
<connection from="L12" to="L10" fromLane="1" toLane="1"/>
<connection from="L12" to="L10" fromLane="2" toLane="2"/>
<connection from="L14" to="L16" fromLane="1" toLane="1"/>
<connection from="L14" to="L16" fromLane="1" toLane="0"/>
<connection from="L14" to="L16" fromLane="2" toLane="2"/>
<connection from="L14" to="L18" fromLane="0" toLane="0"/>
<connection from="L14" to="L18" fromLane="1" toLane="1"/>
<connection from="L14" to="L18" fromLane="1" toLane="2"/>
<connection from="L17" to="L16" fromLane="0" toLane="0"/>
<connection from="L17" to="L16" fromLane="1" toLane="1"/>
<connection from="L17" to="L16" fromLane="1" toLane="2"/>
<connection from="L17" to="L13" fromLane="1" toLane="0"/>
<connection from="L17" to="L13" fromLane="1" toLane="1"/>
<connection from="L17" to="L13" fromLane="2" toLane="2"/>
</connections>

图 1.4:从连线L2到连线L12的允许交通流向(带指定的车道连接设置)

图 1.5:从连线L8到连线L9以及从连线L10到连线L7的允许交通流向(默认设置)

图 1.6:节点6处的允许交通流向
网络生成#
SUMO中的网络文件以扩展名 .net.xml 命名。使用上述定义的文件 quickstart.nod.xml、quickstart.edg.xml、quickstart.con.xml 和 quickstart.typ.xml,通过应用模块 netconvert 将生成网络文件 quickstart.net.xml。为了高效执行,应创建一个配置文件,其中包含输入文件的名称、输出网络文件的名称以及其他所需的操作。如果文件和模块 netconvert 不在同一目录中,则应指定每个文件的相应路径。示例网络的配置文件如代码清单1.6所示,命名为 quickstart.netc.cfg。如果不允许掉头行为,则应将命令 <no-turnarounds value="true"/> 添加到配置文件中。如前所述,禁止掉头行为只能全局进行。
代码清单 1.6 用于生成网络文件的配置文件 (quickstart.netc.cfg)
<configuration>
<input>
<edge-files value="quickstart.edg.xml"/>
<node-files value="quickstart.nod.xml"/>
<type-files value="quickstart.typ.xml"/>
<connection-files value="quickstart.con.xml"/>
</input>
<output>
<output-file value="quickstart.net.xml"/>
</output>
<processing>
<no-turnarounds value="true"/>
</processing>
</configuration>
在我们的示例中,通过在命令行中执行以下命令来生成网络文件 quickstart.net.xml
netconvert –c quickstart.netccfg
生成的网络文件可以使用 sumo-gui 查看,以检查网络是否准确构建。图1.7显示了当在代码清单1.6的配置文件中给出命令 <no-turnarounds value="true"/> 时,掉头行为是如何被禁止的。

图 1.7:节点2处的允许交通流向(带掉头禁止)
交通需求#
对于交通需求,示例网络中有四种车辆类型(A、B、C和D车)。所有驾驶员的驾驶完美度为50%。相应的信息列于表1.1中。在15:00至15:15的调查期间内,每种车辆类型的一辆车将每30秒从每个起点出发前往每个终点。
表 1.1 示例网络中的车辆类型和车辆特性
| 车辆类型 | 最大加速度(m/s) | 最大减速度(m/s) | 长度(m) | 最大速度(m/s) |
|---|---|---|---|---|
| Car A | 3.0 | 6.0 | 5.0 | 50.0 |
| Car B | 2.0 | 6.0 | 7.5 | 50.0 |
| Car C | 1.0 | 5.0 | 5.0 | 40.0 |
| Car D | 1.0 | 5.0 | 7.5 | 30.0 |
交通需求和路径数据与车辆类型数据一起定义在一个扩展名为 .rou.xml 的文件中。示例网络的相应格式如代码清单1.5所示。
车辆类型#
代码清单1.5显示,首先根据表1.1中的信息定义所有车辆类型。相关属性包括:
- (a) id: 车辆类型的ID,由用户使用数字、字符串或两者定义;
- (b) accel: 相应车辆类型的最大加速度(m/s2);
- (c) decel: 相应车辆类型的最大减速度(m/s2);
- (d) sigma: 驾驶员驾驶的不完美度(介于0和1之间);
- (e) length: 车辆长度(米);
- (f) maxSpeed: 最大车辆速度(m/s);
- (g) color: 车辆类型的颜色。由3个数字(介于0和1之间)定义,分别代表红、绿、蓝。值之间用逗号分隔,并用引号括起来,值之间无空格。例如,1,0,0 代表红色,0,1,0 代表绿色,0,0,1 代表蓝色。
属性的顺序可以更改。属性 sigma 对所有车辆类型都指定为0.5。
代码清单 1.5 交通需求和路径数据 (quickstart.rou.xml)
<?xml version="1.0" encoding="UTF-8"?>
<routes>
<vType accel="3.0" decel="6.0" id="CarA" length="5.0" minGap="2.5" maxSpeed="50.0" sigma="0.5" />
<vType accel="2.0" decel="6.0" id="CarB" length="7.5" minGap="2.5" maxSpeed="50.0" sigma="0.5" />
<vType accel="1.0" decel="5.0" id="CarC" length="5.0" minGap="2.5" maxSpeed="40.0" sigma="0.5" />
<vType accel="1.0" decel="5.0" id="CarD" length="7.5" minGap="2.5" maxSpeed="30.0" sigma="0.5" />
<route id="route01" edges="D2 L2 L12 L10 L7 D7"/>
<route id="route02" edges="D2 L2 L12 L15 L18 L5 D5"/>
<route id="route03" edges="D2 L2 L12 L15 L13 L3 D3"/>
<route id="route04" edges="D4 L4 L14 L18 L5 D5"/>
<route id="route05" edges="D4 L4 L14 L16 L10 L7 D7"/>
<route id="route06" edges="D4 L4 L14 L16 L11 L1 D1"/>
<route id="route07" edges="D6 L6 L17 L13 L3 D3"/>
<route id="route08" edges="D6 L6 L17 L16 L11 L1 D1"/>
<route id="route09" edges="D6 L6 L17 L16 L10 L7 D7"/>
<route id="route10" edges="D8 L8 L9 L11 L1 D1"/>
<route id="route11" edges="D8 L8 L9 L15 L13 L3 D3"/>
<route id="route12" edges="D8 L8 L9 L15 L18 L5 D5"/>
<vehicle depart="54000" id="veh0" route="route01" type="CarA" color="1,0,0" />
<vehicle depart="54000" id="veh1" route="route02" type="CarA" />
<vehicle depart="54000" id="veh2" route="route03" type="CarA" />
<vehicle depart="54000" id="veh3" route="route04" type="CarA" />
<vehicle depart="54000" id="veh4" route="route05" type="CarA" />
<vehicle depart="54000" id="veh5" route="route06" type="CarA" />
<vehicle depart="54000" id="veh6" route="route07" type="CarA" />
<vehicle depart="54000" id="veh7" route="route08" type="CarA" />
<vehicle depart="54000" id="veh8" route="route09" type="CarA" />
<vehicle depart="54000" id="veh9" route="route10" type="CarA" />
<vehicle depart="54000" id="veh10" route="route11" type="CarA" />
<vehicle depart="54000" id="veh11" route="route12" type="CarA" />
<vehicle depart="54000" id="veh12" route="route01" type="CarB" color="1,0,0" />
<vehicle depart="54000" id="veh13" route="route02" type="CarB" />
<vehicle depart="54000" id="veh14" route="route03" type="CarB" />
<vehicle depart="54000" id="veh15" route="route04" type="CarB" />
<vehicle depart="54000" id="veh16" route="route05" type="CarB" />
<vehicle depart="54000" id="veh17" route="route06" type="CarB" />
<vehicle depart="54000" id="veh18" route="route07" type="CarB" />
...
</routes>
交通路径#
在车辆类型信息之后,还需要定义交通路径数据。输入属性包括:
- (a) id: 特定路径的ID,由用户使用数字、字符串或两者定义。
- (b) edges: 构成定义路径的连线名称序列。
交通需求#
交通需求数据由四个属性定义:
- (a) depart: 特定车辆的出发时间。
- (b) id: 特定车辆的ID,由用户使用数字、字符串或两者定义。
- (c) route: 定义车辆使用的路径;
- (d) type: 定义的车辆类型的ID。
仿真#
SUMO中的交通仿真可以通过以下两种方式进行。仿真过程的概览如图1.8所示。
括号中的所有文件名都是示例中使用的文件名。

图 1.8:交通仿真过程概览
命令行#
使用命令行可以实现高效的交通仿真执行,特别是在处理大型和复杂的交通网络时。为了简化执行过程,建议将所有必需的执行操作(例如输入文件的路径和名称、输出类型、输出目录和仿真时间段)在配置文件中指定。对于示例网络,相应的配置文件如代码清单1.7所示,然后可以使用以下命令进行交通仿真。
sumo –c quickstart.sumocfg
代码清单 1.7 示例网络交通仿真的配置文件 (quickstart.sumo.cfg)
<?xml version="1.0" encoding="iso-8859-1"?>
<configuration xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://sumo.sf.net/xsd/sumoConfiguration.xsd">
<input>
<net-file value="quickstart.net.xml"/>
<route-files value="quickstart.rou.xml"/>
</input>
<time>
<begin value="54000"/>
<end value="54900"/>
</time>
<time-to-teleport value="-1"/>
</configuration>
我们在这里使用 <time-to-teleport value="-1"/> 选项,以禁用自动移除在交叉口前等待时间过长的车辆。
sumo-gui#
应用 sumo-gui 是使用SUMO执行交通仿真的另一种方式。在执行期间,可以观察每个车辆的移动和交通进展,并可以直观地识别可能的瓶颈。在 sumo-gui 中需要一个用于所有执行操作的配置文件,例如表1.9中的文件。双击程序 sumo-gui.exe 将激活 sumo-gui,并自动打开一个工作窗口。可以通过在菜单栏的“文件”菜单下打开相应的配置文件来激活所研究的网络。然后可以通过按下主工具栏中的绿色三角形按钮来执行交通仿真。当用户按下红色方形按钮时,仿真可以随时停止。如果仿真时间未到,已停止的仿真可以通过按下绿色三角形按钮继续执行。图1.9给出了一个图示示例。

图 1.9:sumo-gui中的示例网络图示
Note
如果您使用 sumo-gui 启动教程,整个网络最初是可见的,但看不到任何车辆,因为视图缩放得非常远。您需要按住鼠标右键并移动鼠标来放大,以便能够看到任何车辆。此外,您不需要将延迟值设置为大于0的值。否则,仿真可能会很快结束,您将无法看到车辆移动。
返回 教程
