SUMO 中的交通信号灯设置
引言
交通信号灯的控制是智能交通系统的核心问题之一。本文主要介绍 SUMO 中交通信号灯的设置方法和各参数含义。详细说明可以参考官网教程.
基本设置
traffic light 可以在 netedit 中设置,也可以通过 additional file 的形式加入到仿真中。考虑如下的交通路口场景
SUMO_tl1.pngadditional file 中可以包含如下内容:
<additional>
<tlLogic id="0" type="static" programID="0" offset="0">
<phase duration="31" state="GrGr"/>
<phase duration="6" state="yryr"/>
<phase duration="31" state="rGrG"/>
<phase duration="6" state="ryry"/>
</tlLogic>
</additional>
其中,
- id 和 type 与 traffic_light 的 node id 和 type 对应
- type 分为三种
static: fixed phase durations,
actuated: phase prolongation based on time gaps between vehicles
delay_based: on accumulated time loss of queued vehicles - programID 为该红绿灯转换机制的ID,一个 traffic light 可以有多个 program,以最后的 program 为准。若要修改某个 net.xml 中的转换机制,可以通过添加 add.xml 文件的方式用新的 program 覆盖之前的 program。
phase 中各条 lane 的 index 是从12 点钟方向 edge 的右转 lane 开始,顺时针方向,依次经过中间的 lane,左转 lane,然后到下一个 edge, 依次编号。因此,图中场景就对应了 state: GrGr.
关于 颜色字母含义的说明:
SUMO_tl2.pngr, y, G 这三个符号就对应了我们最常用的 红、黄、绿信号。对于绿灯时左转礼让直行的情形,应该将左转 lane 设置为 g,即让对面直行车辆先通过,再左转。
actuated traffic light
除了上述固定时间的交通灯控制机制,SUMO 还提供了更加智能的自适应机制。
actuated traffic light 情况下交通灯可以检测通过的车流,如果某条道路有持续的车流,则延长相应道路上的绿灯时间,否则当车辆之间的 time gap 超过一定时间,则转到下一个 phase。这是一种动态调整红绿灯时长的机制。
为了使用 actuated traffic light,可以把 tlLogic 的 type 设置为 actuated,如下:
<tlLogic id="0" programID="my_program" offset="0" type="actuated">
<param key="max-gap" value="3.0"/>
<param key="detector-gap" value="2.0"/>
<param key="show-detectors" value="false"/>
<param key="file" value="NULL"/>
<param key="freq" value="300"/>
<phase duration="31" minDur="5" maxDur="45" state="GGggrrrrGGggrrrr"/>
...
</tlLogic>
在这种设置下,还需要设置更多的参数,其中
-
phase tag 要设置 minDur 和 maxDur。如果只有 duration 或者 minDur==maxDur,则还是固定时长的 phase.
-
max-gap: 两车最大时间间隔,单位 s
-
detector-gap: 从 detector 到 stop line 的时间间隔,以该 lane 的最大速度计算。
delay_based traffic light
除了上述 actuated 调节方式,还有 delay_based 方式,这种机制是为了均衡各条道路的延迟,基本设置如下:
<tlLogic id="0" programID="my_program" offset="0" type="delay_based">
<param key="detectorRange" value="100" />
<param key="minTimeLoss" value="1" />
<param key="file" value="NULL"/>
<param key="freq" value="300"/>
<param key="show-detectors" value="false"/>
<phase duration="31" minDur="5" maxDur="45" state="GGggrrrrGGggrrrr"/>
...
</tlLogic>
其中 type 设置为 delay_based。
-
detectorRange 为检测范围。如果车辆进入该范围,就计算其时间延迟 1-v/v_max。
-
minTimeLoss: 如果道路的时间延迟积累超过该数值,则增加下次绿灯的时长。