【SUMO学习】初级 SUMOlympics

  • Post author:
  • Post category:其他



目录


一、Network


二、Demand


三、Simulation



目标:

创建一条组合道路,即一条edge由多个专用lanes(行人路、自行车道、卡车道等)组成。

一、Network

1. 创建一条边edge,设置左边的点pos=(0,0),右边的点pos=(1000,0)

2. 创建一条新的lane,并把它转变为铁运路线。


创建新的lane:

选中当前edge,右键选择lane operations -> Duplicate lane


将上面的lane转为轻轨(rail_urban):

先取消“select edge”选项,然后选中上面的lane,单击左侧属性面板的allow。因为默认该道路所有类型的车和人都能走,所以先反选(Disallow all vehicles),然后选中rail_urban,最后确认修改(accept)。


3. 添加行人路、自行车道和火车道

选中下面的lane,右键->lane operations->add restricted lane->Sidewalk / Bikelane / Buslane

在创建人行路和自行车道的时候,默认width分别是1.0和2.0,比其他width=default的道路要窄。为了保证各个道路宽度一致,将人行路和自行车道的width也改为default。

width=default在net.xml文件中体现的就是标签中无width属性:

4. 划分edge

将edge划分为两段,左边长900米,右边长100米。

在edge上随便选一点右键->edge operations->Split edge here

设置split点的位置为(900,0)。将前面一段的edge id改为beg,后面一段的edge id改为end。

5. 添加红绿灯控制

选中创建红绿灯的选项->点击两端路径连接的点->在左侧面板选择”Create”创建红绿灯

修改phase,也就是信号灯的各个状态及持续时间。G->绿灯,r->红灯,y->黄灯。state里面有五个状态,分别代表的是同一时刻五条路的信号灯状态。在本实验中只有一条笔直的路,没有交通路口等较为复杂的情况,所以无需黄灯,保留两个phases即可,删除一个phase。最后点Save保存phases修改。

二、Demand

1. 定义车辆类型和车流运动

<vType>中的speedDev指的是速度偏差值

<flow>中的departPos指的是车流出发的位置。”last”代表from edge的末尾,”base”代表from edge的开头,还可以随机选择出发位置”random_free”等,详见

Shortest or Optimal Path Routing – SUMO Documentation

<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"/>
	<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"/>
</routes>

2. 定义行人

行人与车辆分属两类,在上面的rou.xml文件中没有看到行人相关的设定,是因为没有行人可以继承的vClass类,需要自己编写python脚本生成person的rou.xml文件:

outfile = "D:/desny/sumo/sumolympics/sumolympicWalks.rou.xml"
startEdge = "beg"
endEdge = "end"
departTime = 0.
departPos = -30.
arrivalPos = 100.
numberTrips = 100

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:
    print(outfile)
    f.write(xml_string)

departPos=-30指的是相对于beg edge(即脚本中的startEdge)末尾回退30米,beg edge末尾是0,arrivalPos=100指相对于beg edge末尾前进100米,刚好走完end edge。

三、Simulation

配置仿真环境,编写sumolympics.sumocfg:

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

这里面引用了两个rou.xml文件,分别是汽车和行人设置文件。两个文件同属一个文件夹下,用逗号分隔即可,注意逗号前后不要留有空格。

<lateral-resolution>可以将车道进一步划分为子车道,这一点在本实验中主要体现在自行车道的表现上。在前面sumolympics.rou.xml文件中设置自行车占用道路宽度为0.8(<vType width=”0.8″>),如果不设置<lateral-resolution>,那么自行车道上每个x position只会有一辆自行车在行驶,和汽车的行驶效果一致。但是自行车占据道路宽度较窄,车道上可以同时有多个自行车并列、甚至超车行驶,让车道上每个位置只有一辆自行车行驶是不贴合实际的。为此设置<lateral-resolution>,value=”1.”指的是将当前的自行车道按照宽度为1划分为多个子车道,每个子车道上可以行驶一辆宽度<=1的车辆,那么整个车道就可以有多个自行车并驾齐驱了。



版权声明:本文为weixin_40908748原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。