本教程展示如何使用交通控制接口(简称 TraCI)构建行人触发式人行横道。本教程假定您已熟悉 Tutorials/TraCI4Traffic_Lights 中构建车辆触发式控制器的内容。有关行人建模的更多信息,请参见 Simulation/Pedestrians。
此处提到的所有文件也可以在您的安装目录的 ***<SUMO_HOME>****/docs/tutorial/traci_pedestrian 中找到。最新版本可以在代码库的 <SUMO_HOME>/tests/complex/tutorial/traci_pedestrian_crossing/ 中找到。
示例描述#
该场景由一条被人行道横穿的单一道路组成。人行横道由交通信号灯控制,并应在行人通过按钮触发时切换。为了模拟按按钮的行为,假定到达红灯处的行人如果发现按钮未被激活,则会激活该按钮。为了防止对车辆交通造成不当干扰,车辆绿灯相位设有 15 秒的最短持续时间。

要运行此示例,您需要使用 python 执行脚本 runner.py
python runner.py
Caution
您需要在模拟 GUI 中按“开始”来运行本教程。
代码#
控制逻辑位于 python 脚本 runner.py 中。它构建网络(通过 netconvert),生成行人路径(通过 [1]),并与模拟交互以控制交通信号灯。它利用了 SUMO 捆绑的 TraCI python API。有关 API 的描述,请参见 TraCI/Interfacing_TraCI_from_Python。有关可用函数的详细列表,请参见 pydoc 生成的文档。
交通信号灯控制#
交通信号灯遵循如下定义的固定相位周期。以下定义取自 pedcrossing.tll.xml
<tlLogic id="C" type="static" programID="custom" offset="0">
<phase duration="100000" state="GGGGr"/>
<phase duration="4" state="yyyyr"/>
<phase duration="10" state="rrrrG"/>
<phase duration="10" state="rrrrr"/>
</tlLogic>
相位 0 的持续时间被设置为一个非常大的值。这是车辆的绿灯相位,在没有行人的情况下应无限期延长。当在相位 0 期间检测到有等待的行人时,交通信号灯会切换到下一个相位,然后自动继续其周期。使用的唯一与交通信号灯相关的 TraCI 函数是 traci.trafficlights.getPhase() 和 traci.trafficlights.setPhase()。
与人员相关的 TraCI 函数#
为了模拟按按钮,必须知道是否有行人正在等待通过十字路口。使用了以下 TraCI 函数:
- traci.edge.getLastStepPersonIDs() : 用于查找十字路口的行人
- traci.person.getNextEdge(): 用于确定行人是即将通过人行横道还是正在离开十字路口
- traci.person.getWaitingTime(): 用于确定行人是否已到达人行横道并被迫等待
traci.edge.getLastStepPersonIDs() 的输入以及 traci.person.getNextEdge() 的输出引用了特定于行人模拟的网络元素。在脚本 runner.py 中,这些元素定义为
WALKINGAREAS = [':C_w0', ':C_w1']
CROSSINGS = [':C_c0']
有关行人网络元素的描述,请参见 Simulation/Pedestrians。
