SUMO入门(六) - 交通灯
Simulation/Traffic Lights
通常,NETCONVERT 和 NETGENERATE 在计算网络期间为交叉口生成交通信号灯和程序。 尽管如此,这些计算出的程序通常与现实中的程序不同。
要使用真实的交通灯程序提供模拟,可以使用其他程序定义运行SUMO / SUMO-GUI。
此外,SUMO / SUMO-GUI允许加载定义,描述一组交通灯何时以及如何从一个程序切换到另一个程序。
两者都将在以下子章节中讨论。 另一种可能性是在NETEDIT中直观地编辑交通灯计划。
自动生成的TLS程序
– 所有交通信号灯都以固定周期生成,默认周期时间为90秒。可以使用选项 –tls.cycle.time 更改此设置。
– 所有绿色阶段之后是黄色阶段。黄色阶段的长度是根据进入道路的最大速度计算的,但可以使用选项 –tls.yellow.time 进行自定义
– 如果交叉路口的速度低于70km/h的阈值(可通过选项 tls.minor-left.max-speed 进行配置),则允许左转弯与迎面而来的直线交通同时发生但必须屈服。这被称为 green minor ,并在状态定义中用 小写 g 表示。否则,左转流必须使用受保护的左转相位(见下文)。如果由于没有专用的转弯车道而无法建造这样的车道,则无论如何都允许绿色小车,但会发出警告。
– 实际上,通常存在所有流都是红灯以允许清空交叉口的相位。 SUMO默认不构建这些相位。要使每个绿色相位都以全红色相位开头,可以使用选项 –tls.allred.time
默认的 4-arm 交叉口(layout opposites)
默认情况下,程序生成4个绿色相位:
– 直行相位
– 左转相位(仅当有专门的左转车道时)
– 与第一个方向正交的直行相位
– 与第一个方向正交的左转相位(仅当有专用的左转车道时)
根据上面说明的默认时序,绿色阶段通常持续31秒。
如果节点类型设置为 traffic_light_right_on_red 而不是 traffic_light,则在所有相位允许从所有侧面右转(在进入当前具有绿灯的交通流之前停止之后)。
交叉口 layout incoming
– 交叉口的每个进入edge都有一个单独的绿色相位,允许所有方向移动
– 如果节点类型设置为 traffic_light_right_on_red 而不是 traffic_light,则允许同时兼容的右转弯
其他交叉路口
– 如果在十字路口有超过4条道路相遇,则会生成其他绿色相位
– 如果在交叉路口会合的道路在转弯流上具有最高的道路优先级,则可以生成 layout incoming 而不是 layout opposites
– 如果交通灯路口没有任何冲突的道路,则默认情况下不会出现红色相位。通过设置选项 –tls.red.time 可以生成单个红色相位
利用有关交通需求的知识改进生成的计划
为了获得动态适应需求的交通灯,使用选项 –tls.default-type 启动网络。这将自动生成启动的交通灯。要转换现有的 .net.xml 文件以启动所有交通信号灯,请执行以下步骤:
netconvert -s orig.net.xml --plain-output-prefix plain
netconvert -e plain.edg.xml -n plain.nod.xml -x plain.con.xml -o updated.net.xml --ignore-errors.edge-type --tls.default-type actuated
工具 tlsCycleAdaptation.py 可用于修改绿色阶段持续时间以适应给定的交通需求。
tlsCoordinator.py 工具可用于修改程序偏移,以便为给定的交通需求生成绿波。
定义新的TLS程序
您可以将交通灯的新定义作为 additional-file 的一部分加载。 加载后,将使用最后一个程序。
可以通过 WAUTs / TraCI 在程序之间切换。 此外,可以使用 GUI上下文菜单 在它们之间切换。
additional-file 中红绿灯程序的定义类似如下:
<additional>
<tlLogic id="0" programID="my_program" offset="0" type="static">
<phase duration="31" state="GGggrrrrGGggrrrr"/>
<phase duration="5" state="yyggrrrryyggrrrr"/>
<phase duration="6" state="rrGGrrrrrrGGrrrr"/>
<phase duration="5" state="rryyrrrrrryyrrrr"/>
<phase duration="31" state="rrrrGGggrrrrGGgg"/>
<phase duration="5" state="rrrryyggrrrryygg"/>
<phase duration="6" state="rrrrrrGGrrrrrrGG"/>
<phase duration="5