公共交通教程

简介#

本教程是一个关于如何在不使用 osmWebWizard.py 的情况下融入公共交通的小示例。主要主题包括:

  • 公共交通
  • 公交站

有用链接#

公共交通教程#

在模拟开始时,公交车和有轨电车会被调度以服务其指定的路线。同时,人员被创建。每个人匆忙赶往他们喜欢的公交站,等待他们的公交车或有轨电车。然后他们被接上并被带到他们的目标公交站。

运行模拟:

.docs/tutorials/public_transport/data/run.sumocfg

网络、路线、需求和时刻表#

网络#

首先,必须创建网络并建立公交站。有几种方法可以实现这一点——例如,可以手动将它们写入 xml 文件,或使用 netedit 来完成。

使用 netedit#

可以使用窗口顶部的公交站工具轻松创建公交站。 以下动图描述了本教程中使用的网络的基本创建过程。 创建带有反向车道和人行道的边。

创建带有反向车道的边,该边允许选择的车辆通过。

向边添加公交站。

如果您不确定如何在 netedit 中创建网络,请查看本教程:

  • 快速入门 它深入解释了边、连接、需求、路线等的使用。

保存网络时,应同时保存附加文件。 公交站应写入 additional.add.xml 文件,以便为人员和车辆提供站点。 公交站的示例 xml 代码可能如下所示:

    <busStop id="A_bus" lane="-E1_1" startPos="14.42" endPos="24.42"/>
    <busStop id="A_tram1" lane="-E4_0" startPos="13.43" endPos="43.43">
        <access lane="E1_0" pos="175.00"/>
    </busStop>

如果公交站位于不允许行人的边上(即电车轨道),则必须使用 <access> 元素将其连接到网络的其余部分(也可以在 netedit 的附加模式下完成)。

公共交通#

创建的公交站可以用作路线声明中的停靠点。 这些路线稍后可以分配给车辆,在本例中是有轨电车和公交车。 路线被写入 routes.rou.xml 文件。 下面您可以看到有轨电车和公交车路线的代码示例。

要获得重复的时刻表,多种方法是可行的:

  • 定义重复的车辆 (<flow>),在运行一次路线后消失。如果网络不包含路线的完整回路,这很有用
  • 定义具有重复路线的单车辆。这对于让一轮时刻表的延误延续到下一轮是理想的
    <vType id="bus" vClass="bus"/>
    <vType id="tram" vClass="tram"/>

    <route id="busRoute" edges="-E1 -E0 -E3 -E2" color="yellow" repeat="10" cycleTime="140">
        <stop busStop="A_bus" duration="20.00" until="30.00"/>
        <stop busStop="B_bus" duration="20.00" until="90.00"/>
    </route>

    <vehicle id="bus" type="bus" depart="0.00" line="42" route="busRoute"/>

    <flow id="tram1" type="tram" begin="0.00" end="3600.00" period="300.00" line="23">
        <route edges="-E4" color="cyan"/>
        <stop busStop="A_tram1" duration="20.00" until="30.00"/>
        <stop busStop="B_tram1" duration="20.00" until="45.00"/>
    </flow>

时刻表#

在日常生活中,公交车和有轨电车通常按照严格的时刻表运行。类似的更改在 SUMO 中是可能的,并且在使用多式联运路由时至关重要。 此类时刻表是使用属性 until 定义的。until 属性是为站点设置的。 遵循此时刻表的车辆在该时间('until')过去且最短停靠时间('duration')也过去之前不能离开此站点。

需求#

出行需求由可以自由选择其交通方式的人员组成

   <personFlow id="AB" begin="0" end="3600" probability="0.1">
        <personTrip from="-E1" to="-E0" arrivalPos="-20" modes="public"/>
    </personFlow>

除了流(flows),所有人员和车辆也可以单独定义,并且人员计划可以用显式步骤定义。 使用 sumo 选项 --vehroute 输出来了解 <personFlow> 在模拟期间如何扩展为多个出行阶段。

<person id="HeadingBusstop20" depart="1.00" color="green">
     <walk from="gneE1" busStop="busStop_-gneE10_1_6"/>
     <ride busStop="busStop_-gneE10_1_5" lines="tram"/>
</person>

<vehicle id="0" type="Tram" depart="0" color="1,1,0" line="tram">
     <route edges="gneE10 -gneE10"/>
     <stop busStop="busStop_-gneE10_1_6" duration="20"/>
</vehicle>

公交路线的变更。公交车在最顶端的公交站停靠直到 170。

sumocfg#

您可能从其他教程中已经看到,您通过 sumocfg 将所有内容绑定在一起。在其中,您设置网络、路线和附加文件。 之后,您可以通过单击它或在命令行上启动它来开始模拟。

<configuration xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://sumo.dlr.de/xsd/sumoConfiguration.xsd">

    <input>
        <net-file value="net.net.xml"/>
        <route-files value="pt.rou.xml,persons.rou.xml"/>
        <additional-files value="stops.add.xml"/>
    </input>

</configuration>

要获取有关模拟的特定数据,您可以使用 TraCI。 一个好的起点是提供的教程: