教程——sumolympics

SUMOlympics

本教程针对不同的交通模式设置了比赛(集体 100 米冲刺)。您将学习如何在 netedit 中创建特殊车道和(非常简单的)红绿灯,使用不同的车辆类别来定义车辆类型,您将为不同类型创建流程。所有文件也可以在 <SUMO_HOME>/docs/tutorial/sumolympics 目录中找到。

本教程是 PTV Group 设计的一个 VISSIM Scenario 的重构。

创造一个节点

editEdgeAttr.png

并通过按 e 进入边创建模式并单击编辑区域中的两个不同位置来创建一个新网络并添加一条边。更改为检查模式(按 i)并单击边缘的起点(在您第一次单击的位置)。现在在左侧检查器面板中标记为 pos 的文本字段中输入 0,0(见图)。对边的端点执行相同操作,将其位置设置为 1000,0。现在将您的网络保存在名称 sumolypics.net.xml 下(按 Ctrl+Shift-S)。

现在我们还有很长的路要走,这将是我们比赛的舞台。比赛的参与者将是公共汽车、有轨电车、自行车、客车和脚等交通工具。他们应该并排在不同的车道上行驶。因此,我们必须为每种模式添加通道。为此,请右键单击边缘并将鼠标悬停在上下文菜单中的“添加受限车道”上。这将向您展示创建专用车道的三种选择:Sidewalk、Bikelane 和 Buslane。为每种类型添加一个车道。

addSpecialLane.png

要创建电车,我们通过单击同一上下文菜单中的“复制车道”来添加新车道。对于那条车道,我们必须将允许的车辆类别限制为有轨电车。为此,首先取消选中工具栏中编辑模式下拉菜单右侧的“选择边缘”框(模式仍应设置为“(i)检查”)。然后单击新创建的通道和检查器面板中的“允许”按钮。这将打开一个对话框,其中包含所有可能的车辆类别的复选框。取消选中除“rail_urban”之外的所有选项,然后单击“接受”。现在编辑剩余车道的限额(目前所有车辆类别都允许)并将其保留给“乘客”类别(即乘用车)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A1Eo6VYb-1650542598254)()]

现在让我们分割边缘为竞争对手创建一个起点:右键单击边缘的某处,然后从上下文菜单中选择“在此处分割边缘”。然后单击创建的节点(在 SUMO 术语中,这已经是一个“连接点”)。在 pos 字段中将其 x 坐标设置为 900,将其 y 坐标设置为 0,就像您在上面创建边缘时所做的那样。实际上,我们为参赛者创建了一条 100 米的跑道,并为每种竞争模式设置了 900 米的保持区域。现在再次选中复选框“选择边缘”并将两条边缘重命名为“beg”和“end”(在检查器面板中)。保存您的网络 (Ctrl-S)。

定义竞争车辆类型

作为下一步,我们定义了竞争车辆类型。打开一个名为 sumolympics.rou.xml 的新文件并插入以下车辆类型定义:

<routes>
    <vType id="pkw" length="5" maxSpeed="50" accel="2.6" decel="4.5" sigma="0.2" speedDev="0.2" vClass="passenger"/>
    <vType id="bus" length="15" maxSpeed="30" accel="1.2" decel="2.5" sigma="0.1" speedDev="0.1" vClass="bus"/>
    <vType id="tram" length="40" maxSpeed="13" accel="0.8" decel="0.5" sigma="0.1" speedDev="0.1" vClass="rail_urban"/>
    <vType id="bike" length="1.8" width="0.8" maxSpeed="7.5" accel="0.8" decel="1.5" sigma="0.5" speedDev="0.5" vClass="bicycle"/>
</routes>

有关这些定义的详细信息,请查看车辆类型属性描述。

对于每种车辆类型,我们通过在 vType 定义下方(在 元素中!)添加以下 <flow …/> 元素来安排和定位运送 100 人的车辆:

    ...
    <flow id="pkw" type="pkw" from="beg" to="end" begin="0" end="0" number="66" departPos="last"/>
    <flow id="bus" type="bus" from="beg" to="end" begin="0" end="0" number="5" departPos="last"/>
    <flow id="tram" type="tram" from="beg" to="end" begin="0" end="0" number="2" departPos="last"/>
    <flow id="bike" type="bike" from="beg" to="end" begin="0" end="0" number="100" departPos="last"/>
        ...

请注意,这假设平均车辆占用率为 1.5。[1]有关流属性含义的详细信息,请参阅流定义部分。

要开始模拟,请创建一个 SUMO 配置文件(将其命名为 sumolympics.sumocfg):

<configuration>
   <input>
       <net-file value="sumolympics.net.xml"/>
       <route-files value="sumolympics.rou.xml"/>
   </input>
   <processing>
    <lateral-resolution value="1." />
   </processing>
</configuration>

sumolympic_run1.png

在这里,我们给出处理参数横向分辨率,其值对应于以米为单位的子车道宽度,以实现骑车人利用整个车道宽度相互超车的更真实的行为(参见子车道模型和自行车模拟)。通过双击配置文件 sumolympics.sumocfg (Windows) 或从终端运行 sumo-gui -c sumolympics.sumocfg 开始模拟。将步进延迟调整为 100 ms,然后按下运行按钮 ()。

定义开始信号(红绿灯)和行人

公平完整的比赛还有两件事要做:1)所有参赛者都应该在起跑线前自由定位(骑自行车的人排成一排,尽管他们可以通过多分组来获得更好的结果密集使用整个车道宽度)2)我们希望将行人包括在比赛中。

sumolympics_TLSediting.png

首先我们用netedit在边“beg”和“end”的交界处创建一个红绿灯:按t进入红绿灯编辑模式。单击连接,然后单击左侧面板中的“创建 TLS”。下面,在标签阶段下,为第一阶段键入“rrrrr”(“r”表示红色)并将其持续时间设置为 100(秒)。这将为骑自行车的人提供足够的时间更密集地分组。对于第二阶段,输入“GGGGG”(是的,“G”代表绿色)并将其持续时间设置为 1000(即直到模拟运行结束)。现在再次运行模拟,看看自行车跑得比汽车快。看?我们都应该更频繁地使用我们的自行车!

如果您在消息窗口中注意到警告(例如“警告:tlLogic ‘gneJ2’ 中缺少黄色阶段,切换到阶段 0 时为 tl-index 0 编程’0’”),请不要担心。 SUMO 会定期检查 tls-phases 的基本一致性,如果您有相交的流,则缺少黄色阶段可能会导致崩溃。但是,这是一种特殊情况,显然我们不需要关心这一点。如果您想了解有关交通灯控制的更多信息,请参阅 TraCI-Tutorials TraCIpedCrossing 和 TraCI4Traffic_Lights 或交通灯的主要部分。

你觉得行人会慢还是快?让我们来看看。您已经可以猜到,这种方法对行人来说有点不同。这是因为它们不是车辆类(不再是),而是构成了一个自己的类,称为“人”。例如,目前还没有类似于车辆流的人流这样的元素(尽管它即将到来,请参阅#1515)。因此,我们将编写一个 python 脚本来生成一个路由文件 sumolympic_walking.rou.xml。 (请注意,在 <SUMO_HOME>/tools 文件夹中有一个名为 walkerFlow.py 的小脚本,如果您想做更复杂的事情,它会很有用。)

这是简单的脚本(将文件称为 makeSumolympicWalkers.py 之类的文件):

#!/usr/bin/python
#parameters
outfile = "sumolympicWalks.rou.xml"
startEdge = "beg"
endEdge = "end"
departTime = 0. #time of departure
departPos = -30. #position of departure
arrivalPos = 100. #position of arrival
numberTrips = 100 #number of persons walking
#generate XML
xml_string = "<routes>\n"  
for i in range(numberTrips):
    xml_string += '    <person depart="%f" id="p%d" departPos="%f" >\n' % (departTime, i, departPos)
    xml_string += '        <walk edges="%s %s" arrivalPos="%f"/>\n' % (startEdge, endEdge, arrivalPos)
    xml_string += '    </person>\n'
xml_string += "</routes>\n"
with open(outfile, "w") as f:
    f.write(xml_string)

通过双击(或从命令行使用 python makeSumolympicWalkers.py)执行脚本。如果您的计算机上没有 python,请在执行任何其他操作之前安装它! (从这里获取)我们必须将生成的路由文件 sumolympicWalks.rou.xml 包含在配置文件 sumolympic.sumocfg 中,让模拟知道它们。只需用逗号分隔即可包含多个路由文件。因此,修改我们配置的 <route-files …/>-entry 看起来像这样(确保文件名之间没有空格!):

  ...
    <route-files value="sumolympics.rou.xml,sumolympicWalks.rou.xml"/>
  ...
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

交通小吴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值