• 【SUMO学习】初级 SUMOlympics


    目录

    一、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

    1. <routes>
    2. <vType id="pkw" length="5" maxSpeed="50" accel="2.6" decel="4.5" sigma="0.2" speedDev="0.2" vClass="passenger"/>
    3. <vType id="bus" length="15" maxSpeed="30" accel="1.2" decel="2.5" sigma="0.1" speedDev="0.1" vClass="bus"/>
    4. <vType id="tram" length="40" maxSpeed="13" accel="0.8" decel="0.5" sigma="0.1" speedDev="0.1" vClass="rail_urban"/>
    5. <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"/>
    6. <flow id="pkw" type="pkw" from="beg" to="end" begin="0" end="0" number="66" departPos="last"/>
    7. <flow id="bus" type="bus" from="beg" to="end" begin="0" end="0" number="5" departPos="last"/>
    8. <flow id="tram" type="tram" from="beg" to="end" begin="0" end="0" number="2" departPos="last"/>
    9. <flow id="bike" type="bike" from="beg" to="end" begin="0" end="0" number="100" departPos="last"/>
    10. </routes>

    2. 定义行人

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

    1. outfile = "D:/desny/sumo/sumolympics/sumolympicWalks.rou.xml"
    2. startEdge = "beg"
    3. endEdge = "end"
    4. departTime = 0.
    5. departPos = -30.
    6. arrivalPos = 100.
    7. numberTrips = 100
    8. xml_string = "<routes>\n"
    9. for i in range(numberTrips):
    10. xml_string += ' <person depart="%f" id="p%d" departPos="%f">\n' % (departTime, i, departPos)
    11. xml_string += ' <walk edges="%s %s" arrivalPos="%f"/>\n' % (startEdge, endEdge, arrivalPos)
    12. xml_string += ' </person>\n'
    13. xml_string += "</routes>\n"
    14. with open(outfile, "w") as f:
    15. print(outfile)
    16. f.write(xml_string)

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

    三、Simulation

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

    1. <configuration>
    2. <input>
    3. <net-file value="sumolympics.net.xml"/>
    4. <route-files value="sumolympics.rou.xml,sumolympicWalks.rou.xml"/>
    5. </input>
    6. <processing>
    7. <lateral-resolution value="1." />
    8. </processing>
    9. </configuration>

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

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

     

  • 相关阅读:
    Cesium中自定义材质material
    正则表达式
    961题库 北航计算机 计算机网络 附答案 简答题形式
    gorm day8
    【神兵利器】介绍一款支持屏幕录制、滚动截图、高清长图、图片编辑、图片转PDF格式、屏幕取色的截图软件:FastStone Capture
    RKE2部署高可用Rancher2.6.5
    音视频编码
    Python武器库开发-基础篇(三)
    transformer
    泰国数字加密平台Bitkub创始人到访和数集团:以数字化创新探索科技前沿密码
  • 原文地址:https://blog.csdn.net/weixin_40908748/article/details/125542633