• 【SUMO】初级 Public Transport - 1


    目录

    一、Network

    1. 创建5条边edges,4个顶点的位置如图所示

    2. 将中间斜着的边改为有轨电车道

    3. 每条边加一个反向,使每条边都有双向车道

    4. 在道路两侧添加人行道

    5. 添加公交站牌

    6. 为有轨电车道增加一个掉头的方向

    7. 保存Network和Additional文件

    二、Demand

    1. vehicle + route (公交车)

    2. flow (有轨电车)

    三、Simulation


    目标:创建有公交站牌的交通路线,公交车和有轨电车遇到站牌会停留一段时间。

    一、Network

    创建一个上图所示的路网。

    1. 创建5条边edges,4个顶点的位置如图所示

    2. 将中间斜着的边改为有轨电车道

    操作步骤:Inspect Mode 单击这条边 -> 左侧栏选中"allow" -> 反选(Disallow all vehicles) -> 选中有轨电车的几项

    改完有轨电车路网如下图:

    3. 每条边加一个反向,使每条边都有双向车道

    操作步骤:在边上右键 -> edge operations -> Add reverse direction for edge

    4. 在道路两侧添加人行道

    添加人行道的位置:有轨电车道两侧、下方道路两侧、右方道路两侧

    操作步骤:道路右键 -> lane operations -> add restricted lane -> Sidewalk

    添加人行道后的路网如下图 (图中标注边id):

    5. 添加公交站牌

    操作步骤:选中公交站牌标识 -> 在要添加的道路上单击(注意不是人行道) -> 切换成inspect Mode,按下图修改相应参数

    startPos和endPos都是相对于站牌所在的lane而言的。比如上图所示的tram_A0站牌,它位于lane E4_1上,这条路的方向是左上至右下,所以startPos指的是与左上角点的距离为22.33,endPos与左上角点的距离是42.33。

    endPos - startPos就是站牌的长度。在本文中设置的有轨电车站牌长度为20,公交车站牌长度为10。如果设置的有轨电车站牌较小,如长度也是10,那么在仿真时会报Warning。

    6. 为有轨电车道增加一个掉头的方向

    (针对的路口为右下角)

    操作步骤:选择规划交通方向的标识 -> 先单击中间edge左边的lane,然后单击右边的lane -> 在左侧栏点击OK,保存修改

    这样有轨电车就可以在右下角的路口实现掉头

    7. 保存Network和Additional文件

    注意,车站牌属于Additionals,要作为add.xml另外保存。所以一共需要保存两个文件:bus.net.xml和bus.add.xml

    二、Demand

    在Demand中需要为公交车和有轨电车创建运动路径。本实验采用两种不同的方式,①vehicle+route;②flow来创建运动路径。

    1. vehicle + route (公交车)

    这种方式会创建一辆在环路上不停循环跑的公交车。

    1. <vType id="bus" vClass="bus"/>
    2. <route id="busRoute" edges="E3 E0 E1 E2" repeat="10">
    3. <stop busStop="stop_A0" duration="20"/>
    4. <stop busStop="stop_B0" duration="20"/>
    5. route>
    6. <vehicle id="bus" type="bus" depart="0.0" route="busRoute"/>

    内容解释:

    vType -> 创建的汽车类型是公交车

    route -> 创建一个环形路线。因为是环形的,所以可以重复运行。repeat="10"代表重复10次。

    指的是沿线遇到stop点必须停一会儿,停的位置是busStop,这个id与additional文件中的定义相对应。duration是停的时长。

    vehicle -> 创建一辆公交车,按照指定的路线行驶(route="busRoute")。depart="0.0"指的是vehicle出现在network上的时间点。

    2. flow (有轨电车)

    这种方式在指定时间段内,每隔一段时间就会插入一辆有轨电车跑指定路线。

    1. <vType id="tram" vClass="tram"/>
    2. <flow id="tram1" type="tram" begin="0.00" end="3600.00" period="80">
    3. <route edges="E4 -E4"/>
    4. <stop busStop="tram_A0" duration="15"/>
    5. <stop busStop="tram_A1" duration="15"/>
    6. flow>

    内容解释:

    vType -> 创建的汽车类型是有轨电车

    flow -> 创建一个汽车流。begin和end指的是这个汽车流执行的时间段。

    period="100"是在80秒这个时间段内均匀地在network上插入汽车。像本实验只有一辆有轨电车,那么每80秒就会生成一辆有轨电车跑指定路线。如下方动图在80秒的时候又生成了一辆电车:

    route -> 指定路线 (不是环路也可以,只是车会在终点消失)

    注:无论是flow还是route里定义的stop,都必须是路线能经过的stop,否则报错。

    完整的Demand文件如下所示:(注意别忘了标签)

    1. <routes>
    2. <vType id="bus" vClass="bus"/>
    3. <vType id="tram" vClass="tram"/>
    4. <route id="busRoute" edges="E3 E0 E1 E2" repeat="10">
    5. <stop busStop="stop_A0" duration="20"/>
    6. <stop busStop="stop_B0" duration="20"/>
    7. route>
    8. <vehicle id="bus" type="bus" depart="0.0" route="busRoute"/>
    9. <flow id="tram1" type="tram" begin="0.00" end="3600.00" period="80">
    10. <route edges="E4 -E4"/>
    11. <stop busStop="tram_A0" duration="15"/>
    12. <stop busStop="tram_A1" duration="15"/>
    13. flow>
    14. routes>

    三、Simulation

    仿真文件bus.sumocfg如下:

    1. <configuration>
    2. <input>
    3. <net-file value="bus.net.xml"/>
    4. <route-files value="bus.rou.xml"/>
    5. <additional-files value="bus.add.xml"/>
    6. input>
    7. configuration>

    仿真效果动图如下:

     

  • 相关阅读:
    速卖通、lazada店铺增加销量有哪些技巧,你知道吗?
    socket选项
    虚拟化+docker容器引擎概念基本介绍
    AES加密有什么用,AES加密算法安全性如何
    Gloss优化
    SQL零基础入门教程,贼拉详细!贼拉简单! 速通数据库期末考!(七)
    [21天学习挑战赛——内核笔记](九)——sysfs相关API
    2021最新中高级Java面试题目,Java面试题汇总
    协程简单使用
    使用Excel批量生成SQL语句,用过的人都说好
  • 原文地址:https://blog.csdn.net/weixin_40908748/article/details/125892306