快速入门

本教程通过一个示例网络,介绍了SUMO在交通分析中的基本应用和核心功能。

此处提及的所有文件都可以在 ***&lt;SUMO_HOME&gt;***/docs/tutorial/quickstart 目录中找到。最新版本可以在代码库的 <SUMO_HOME>/tests/complex/tutorial/quickstart/data 中找到。

示例描述#

在本示例中,将使用SUMO应用程序分析交通状态。该示例网络包含四个起点、四个终点以及两个无信号交叉口。在调查区域内,每条出城道路都有三条车道,且每条车道允许的交通流向受到限制。所有交叉口均禁止掉头行为。此外,东西向交通被赋予更高的优先权。相应的网络布局如图1.1所示。

model-names.PNG

图1.1. 网络布局

数据准备#

在SUMO中进行交通分析之前,应首先根据表1.2中列出的信息构建图1.1中的示例网络。(请注意!图1.1与表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

使用 netedit 编辑网络#

基于表1.2中的坐标数据和图1.1中的基于节点-连线的网络布局,分别将交叉口、起点和终点编码为节点1-6和节点91-94,并使用 netedit 程序给出相应的x和y坐标。打开 netedit(您可以在SUMO包的bin目录中找到它)。然后,创建一个新网络("文件" -> "新建网络...")。

  • 然后选择编辑模式,可以通过两种方式实现:

First.png

  • 或者您可以使用快捷键在模式之间切换,这可以在编辑按钮的下拉菜单中看到:

Menue.png

  • 首先,创建一个节点,然后通过在画布上单击创建第二个节点。两者将自动连接,您将得到第一条边(edge)。

Second.png Third.png

  • 下一步是切换到检查(Inspection)模式,并按照上表1.2中的定义替换节点的名称和位置。在SUMO中,道路表示为连线(link),类似于其他交通仿真软件。要定义连线特征,必须首先使用数字、字符串或两者组合来定义每个连线的标识(id)。要编辑这些值,请使用鼠标左键单击代表交叉口的红点。

Fourth.png Fifth.png

如果按下回车键,您将获得新的位置。

现在是保存网络的时候了:您可以在文件的下拉菜单中找到一个选项。对于此处的目的,另存网络为... 是合适的。请为您的网络选择一个合适的名称,例如 quickstart.net.xml。稍后当您从配置中引用网络时,将使用此名称。

  • 如示例中所示,存在双向街道。要为您的边(edge)提供此信息,您可以在创建的边上右键单击并选择 添加反向方向,或者在创建边的过程中选择 双向 选项。

sixth.png Seventh.png

  • 此外,必须更改一个属性以获得与示例描述中类似的输出:车道数量。如果您处于检查模式(Inspect Mode),可以轻松更改车道数量,单击相关边并直接更改。

Eighth.png

现在您应该能够创建此示例中其余的节点和边,并更改它们的名称、车道数量并重置它们的位置。别忘了不时保存您的工作。

交叉口911-914并不是真正需要的。 当速度或车道数量(numLanes)等属性发生变化时,需要将一段道路长度拆分为多个边。 独立的边对于分析交通性能的详细分析也很有用。 要模拟弯曲的道路,使用“移动模式”(move mode)修改边的形状(shape)就足够了。

  • 下一步是定义边之间的连接。要查看已自动构建的连接,请选择框 显示连接(show connections)。

SUMO中的默认设置基于所有可能的和逻辑的交通流向的几何设计。如果没有相应的规范,则允许掉头。默认设置是每个连线的最右侧车道与相应下游连线的最右侧车道对齐。在我们的示例中,预期的连接如下:

表1.3. 边之间的连接

起始边ID 目标边ID 起始车道 目标车道
L2 L12 0 0
L2 L12 0 1
L2 L12 1 2
L4 L14 0 0
L4 L14 1 1
L4 L14 1 2
L9 L11 0 0
L9 L11 1 1
L9 L11 1 2
L9 L15 1 1
L9 L15 2 2
L16 L10 0 0
L16 L10 1 1
L16 L10 1 2
L16 L11 2 2
L12 L15 0 0
L12 L15 1 1
L12 L10 1 0
L12 L10 1 1
L12 L10 2 2
L14 L16 1 1
L14 L16 1 0
L14 L16 2 2
L14 L18 0 0
L14 L18 1 1
L14 L18 1 2
L17 L16 0 0
L17 L16 1 1
L17 L16 1 2
L17 L13 1 0
L17 L13 1 1
L17 L13 2 2

每个属性的含义如下:

  • (a) from: 将指定交通流向的连线ID。
  • (b) to: 上述定义连线的下游连线ID。
  • (c) fromLane/toLane: (a)中定义连线的车道号和(b)中连线的车道号,它们是相连的。

如果您切换到连接模式(Connection Mode),您将能够指定新的连接或更改现有的连接。这可以通过单击选定的边来实现。如以下图片的左侧所示,图例中显示了染色边的不同含义。 con1.png 有关此的更多信息和更深入的了解,请访问 netedit

- 另一个主题是每条边的优先级。在我们的示例中,优先级默认为1。要更改优先级,请选择要修改的边(见下图)。切换到检查模式。然后,您可以通过单击其中一个选定的边来更改所有选定边的优先级信息。示例中具有3条车道和2条车道的东西向道路应具有优先级3,而北向(L16)和南向(L15)道路具有(较低的)优先级2。

prio1.png prio2.png

交通需求#

对于交通需求,示例网络中有四种车辆类型(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/s²);
  • (c) decel: 相应车辆类型的最大减速度(单位:m/s²);
  • (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所示。

括号中的所有文件名是示例中使用的文件名。

Image:image008.gif

图1.8. 交通仿真过程概述

命令行#

使用命令行可以实现高效的交通仿真执行,尤其是在处理大型和复杂的交通网络时。为了简化执行过程,建议将所有必需的执行操作(例如输入文件的路径和名称、输出类型、输出目录和仿真时间段)在配置文件中指定。

清单1.7. 示例网络交通仿真的配置文件 (quickstart.sumocfg)

<?xml version="1.0" encoding="iso-8859-1"?>
<configuration xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation="https://sumo.dlr.de/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"/> 选项来禁用自动移除在交叉口前等待时间过长的车辆。

对于示例网络,相应的配置文件如清单1.7所示,然后可以使用以下命令执行交通仿真:

sumo –c quickstart.sumocfg

sumo-gui#

sumo-gui 的应用是使用SUMO执行交通仿真的另一种方式。在执行期间,可以观察每个车辆的移动和交通的进展;并且可以直观地识别可能的瓶颈。sumo-gui 需要一个用于所有执行操作的配置文件,例如清单1.7中的那个。双击程序 sumo-gui.exesumo-gui 工作窗口将自动打开。可以通过在菜单栏的“文件”菜单下打开相应的配置文件来激活所调查的网络。然后可以通过按下主工具栏中的绿色三角形按钮来执行交通仿真。当用户按下红色方形按钮时,仿真可以随时停止。如果仿真时间未到,已停止的仿真可以通过按下绿色三角形按钮恢复。图1.9给出了一个说明示例。

Image:image009.jpg

图1.9. sumo-gui中的示例网络图示

Note

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

返回 教程