Sumo 单个交叉口仿真实例

实验目的

根据交通调查所得交通量等数据,使用 Sumo 仿真一个交叉口。具体需求为:

  • 仿真时间内交通量的变化。要求仿真的时间为 7:00-19:00,共12h,其中包括两个交通量高峰时段,分别为 7:00-9:00 和 17:00-19:00,其余时段 9:00-17:00 为平峰时段。高峰时段和平峰时段的小时交通量不相同,需要将仿真时间分段处理。
  • 仿真时间内信号配时方案的切换。在所需仿真时间内,共有两种交叉口信号配时方案,分别为高峰时段配时方案和平峰时段配时方案。在高峰时段的仿真中,应采用高峰时段的方案,平峰时段同理。
  • 交叉口某个车流的时空图绘制。

实验环境

  • win10
  • sumo 1.8
  • python 3.8 (matplotlib)

仿真准备

仿真配置文件 mybs.sumocfg

在 sumocfg 文件中,除了必须的 net 文件和 rou 文件,还有 additional 文件,这个文件用信号灯的切换。



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

    <input>
        <net-file value="mybs.net.xml"/>
        <route-files value="mybs.rou.xml"/>
        <additional-files value="output_alllight.add.xml"/>
    input>

    <time>
        <begin value="0"/>
        <end value="43200"/>
    time>

configuration>

路网文件 mybs.net.xml

net 文件需要使用 netedit.exe 工具手绘一个十字交叉口。并对交叉口渠化方案进行绘制,设置路段限速值,设置信号配时方案。

车流文件 mybs.rou.xml

rou 文件为交叉口路段加载车流。根据要求,分三个时段进行车流加载,分别输入每个 flow 的小时交通量,并为每个 flow 设置 route,开始时间 begin 和结束时间 end。根据观测得到的速度数据,为车流设置与车辆运动相关的参数。其中,sigma 与驾驶人操作的随机性有关,length 为车辆长度,minGap 为停车时车辆之间的间隔,maxSpeed 为最大速度,speedFactorspeedDev 为控制车速随机的相关参数。


<routes>
   
  <vType id="MorningHighEast" sigma="0.5" length="5" minGap="0.5" maxSpeed="14" speedFactor="1.2" speedDev="0.1" />
  <vType id="MorningHighWest" sigma="0.5" length="5" minGap="0.5" maxSpeed="15" speedFactor="1.2" speedDev="0.1" />
  <vType id="MorningHighSouth" sigma="0.5" length="5" minGap="0.5" maxSpeed="17" speedFactor="1.2" speedDev="0.1" />
  <vType id="MorningHighNorth" sigma="0.5" length="5" minGap="0.5" maxSpeed="13" speedFactor="1.2" speedDev="0.1" />
  
  <vType id="FlatEast" sigma="0.5" length="5" minGap="0.5" maxSpeed="16" speedFactor="1.2" speedDev="0.1" />
  <vType id="FlatWest" sigma="0.5" length="5" minGap="0.5" maxSpeed="16" speedFactor="1.2" speedDev="0.1" />
  <vType id="FlatSouth" sigma="0.5" length="5" minGap="0.5" maxSpeed="19" speedFactor="1.2" speedDev="0.1" />
  <vType id="FlatNorth" sigma="0.5" length="5" minGap="0.5" maxSpeed="15" speedFactor="1.2" speedDev="0.1" />

  <vType id="EveningHighEast" sigma="0.5" length="5" minGap="0.5" maxSpeed="15" speedFactor="1.2" speedDev="0.1" />
  <vType id="EveningHighWest" sigma="0.5" length="5" minGap="0.5" maxSpeed="12" speedFactor="1.2" speedDev="0.1" />
  <vType id="EveningHighSouth" sigma="0.5" length="5" minGap="0.5" maxSpeed="18" speedFactor="1.2" speedDev="0.1" />
  <vType id="EveningHighNorth" sigma="0.5" length="5" minGap="0.5" maxSpeed="14" speedFactor="1.2" speedDev="0.1" />

  
   
   
  
    <route edges="-gneE2 -gneE12 gneE14 gneE3"/>
  flow>

  
    <route edges="-gneE2 -gneE12 gneE13 gneE0 -gneE22"/>
  flow>

  
    <route edges="-gneE2 gneE16 gneE1 gneE19 gneE20"/>
  flow>

  
    <route edges="-gneE3 -gneE14 gneE12 gneE2"/>
  flow>

  
    <route edges="-gneE3 -gneE14 gneE11 gneE1 gneE19 gneE20"/>
  flow>

  
    <route edges="-gneE3 gneE18 gneE0 -gneE22"/>
  flow>

  
    <route edges="--gneE22 -gneE0 -gneE13 gneE11 gneE1 gneE19 gneE20"/>
  flow>

  
    <route edges="--gneE22 -gneE0 -gneE13 gneE14 gneE3"/>
  flow>

  
    <route edges="--gneE22 -gneE0 gneE15 gneE2"/>
  flow>

  
    <route edges="-gneE20 -gneE19 -gneE1 -gneE11 gneE13 gneE0 -gneE22"/>
  flow>

  
    <route edges="-gneE20 -gneE19 -gneE1 -gneE11 gneE12 gneE2"/>
  flow>

  
    <route edges="-gneE20 -gneE19 -gneE1 gneE17 gneE3"/>
  flow>
   
   
  
    <route edges="-gneE2 -gneE12 gneE14 gneE3"/>
  flow>

  
    <route edges="-gneE2 -gneE12 gneE13 gneE0 -gneE22"/>
  flow>

  
    <route edges="-gneE2 gneE16 gneE1 gneE19 gneE20"/>
  flow>

  
    <route edges="-gneE3 -gneE14 gneE12 gneE2"/>
  flow>

  
    <route edges="-gneE3 -gneE14 gneE11 gneE1 gneE19 gneE20"/>
  flow>

  
    <route edges="-gneE3 gneE18 gneE0 -gneE22"/>
  flow>

  
    <route edges="--gneE22 -gneE0 -gneE13 gneE11 gneE1 gneE19 gneE20"/>
  flow>

  
    <route edges="--gneE22 -gneE0 -gneE13 gneE14 gneE3"/>
  flow>

  
    <route edges="--gneE22 -gneE0 gneE15 gneE2"/>
  flow>

  
    <route edges="-gneE20 -gneE19 -gneE1 -gneE11 gneE13 gneE0 -gneE22"/>
  flow>

  
    <route edges="-gneE20 -gneE19 -gneE1 -gneE11 gneE12 gneE2"/>
  flow>

  
    <route edges="-gneE20 -gneE19 -gneE1 gneE17 gneE3"/>
  flow>
   
   
  
    <route edges="-gneE2 -gneE12 gneE14 gneE3"/>
  flow>

  
    <route edges="-gneE2 -gneE12 gneE13 gneE0 -gneE22"/>
  flow>

  
    <route edges="-gneE2 gneE16 gneE1 gneE19 gneE20"/>
  flow>

  
    <route edges="-gneE3 -gneE14 gneE12 gneE2"/>
  flow>

  
    <route edges="-gneE3 -gneE14 gneE11 gneE1 gneE19 gneE20"/>
  flow>

  
    <route edges="-gneE3 gneE18 gneE0 -gneE22"/>
  flow>

  
    <route edges="--gneE22 -gneE0 -gneE13 gneE11 gneE1  gneE19 gneE20"/>
  flow>

  
    <route edges="--gneE22 -gneE0 -gneE13 gneE14 gneE3"/>
  flow>

  
    <route edges="--gneE22 -gneE0 gneE15 gneE2"/>
  flow>

  
    <route edges="-gneE20 -gneE19 -gneE1 -gneE11 gneE13 gneE0 -gneE22"/>
  flow>

  
    <route edges="-gneE20 -gneE19 -gneE1 -gneE11 gneE12 gneE2"/>
  flow>

  
    <route edges="-gneE20 -gneE19 -gneE1 gneE17 gneE3"/>
  flow>

routes>

附加文件 output_alllight.add.xml

add 文件用于按要求改变信号灯状态。add 文件中有两个信号配时方案,一个是高峰时期配时方案 High,一个是平峰时期配时方案 Flat。根据要求,切换为 High 配时的时间为 0s 和 36001s,切换为 Flat 配时的时间为 7201s。



<additional xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/additional_file.xsd">
    <tlLogic id="gneJ9" type="static" programID="High" offset="0">
        <phase duration="40" state="GGGrrrrrGGGrrrrr"/>
        <phase duration="3" state="YYYrrrrrYYYrrrrr"/>
        <phase duration="20" state="rrrGGrrrrrrGGrrr"/>
        <phase duration="3" state="rrrYYrrrrrrYYrrr"/>
        <phase duration="42" state="rrrrrrrrrrrrrGGG"/>
        <phase duration="3" state="rrrrrrrrrrrrrYYY"/>
        <phase duration="31" state="rrrrrGGGrrrrrrrr"/>
        <phase duration="3" state="rrrrrYYYrrrrrrrr"/>
    tlLogic>
    
    <tlLogic id="gneJ9" type="static" programID="Flat" offset="0">
        <phase duration="19" state="rrrrrrrrGGGGGrrr"/>
        <phase duration="3" state="rrrrrrrrGGGYYrrr"/>
        <phase duration="23" state="GGGrrrrrGGGrrrrr"/>
        <phase duration="3" state="GGGrrrrrYYYrrrrr"/>
        <phase duration="19" state="GGGGGrrrrrrrrrrr"/>
        <phase duration="3" state="YYYYYrrrrrrrrrrr"/>
        <phase duration="27" state="rrrrrrrrrrrrrGGG"/>
        <phase duration="3" state="rrrrrrrrrrrrrYYY"/>
        <phase duration="27" state="rrrrrGGGrrrrrrrr"/>
        <phase duration="3" state="rrrrrYYYrrrrrrrr"/>
    tlLogic>

    <WAUT startProg="High" id="w1">
        <wautSwitch to="Flat" time="7201"/>
        <wautSwitch to="High" time="36001"/>
    WAUT>

    <wautJunction junctionID="gneJ9" wautID="w1">wautJunction>
additional>

开始仿真

方法一

将以上四个文件放在同一个文件夹下,并在命令行中切换到该文件夹,输入:

sumo -c mybs.sumocfg

如果想要看到可视化界面,则输入:

sumo-gui -c mybs.sumocfg

方法二

同样,将以上四个文件放在同一个文件夹下,并在命令行中切换到该文件夹,输入:

sumo -c mybs.sumocfg -a output_alllight.add.xml

如果想要看到可视化界面,则输入:

sumo-gui -c mybs.sumocfg -a output_alllight.add.xml

如果使用这种方法,那么在 sumocfg 文件中,就不需要写这行代码:

<additional-files value="output_alllight.add.xml"/>

(实际这两种方法是一样的,只不过刚开始只会在命令行中输入 -a 来调用 add 文件,后来才学会像方法一那样在仿真开始之前就把 add 文件写在 sumocfg 的文件 中,这里记录一下)

绘制时空图(车辆轨迹图)

在 sumocfg 中,将仿真时间改为 300s。(仿真太久车辆轨迹太多,影响绘图效果)
然后,同样在命令行中,将目录切换为你存放文件的目录,输入命令:

sumo -c mybs.sumocfg -a output_alllight.add.xml --fcd-output fcd.xml

接下来是绘图命令:

python38 D:\sumo\tools\plot_trajectories.py fcd.xml -t td -o plot.png -s

绘制效果如图
Sumo 单个交叉口仿真实例_第1张图片
如果想看的更清楚,可以只绘制一条车流的时空图,使用 --filter-route 选项过滤路径:

python38 D:\sumo\tools\plot_trajectories.py fcd.xml -t td -o plot.png -s --filter-route -gneE2,-gneE12,gneE14,gneE3

绘制效果如图
Sumo 单个交叉口仿真实例_第2张图片

绘图命令选项

选项 -t (–trajectory-type) 支持多种不同的绘图风格:
td: time vs distance
ts: time vs speed
ta: time vs acceleration
ds: distance vs speed
da: distance vs acceleration
当选项 -s 被设置,将打开一个交互图,允许通过各自的线路来识别车辆。
选项 --filter-route EDGE1,EDGE2,… 将只绘制包含给定边集的轨迹。

你可能感兴趣的:(车联网)