这部分教程通过TraCI实现行人过街演示程序。假设你已经熟悉了前面的第一部分的例子 Tutorials/TraCI4Traffic_Lights ,知道如何创建车辆驱动控制器。
在本部分提到的所有文件均可以在目录<sumo_home>/docs/tutorial/traci_pedestrian中,或者在新版的目录:<SUMO_HOME>/tests/complex/tutorial/traci_pedestrian_crossing/.
1、例子描述
这个脚本包括一个道路被人行路穿过人行通道通过信号灯控制通行,通过触发push-button的行人,改变信号的转换。为了模拟按动按扭的操作,假设行人到达时是红灯的激活按钮。为防止车辆交通的不适当干扰,车辆的绿色期最少有15秒的绿灯时间。
为了运行程序,可以通过执行脚本:
python runner.py
1.1代码
控制逻辑写在文件runner.py中。它创建网络(通过BETCONVERT),生成行人路由(通过randomTrips),通过仿真进行交互。它使用了绑定SUMO的Traci python APIs。关于接口API的更多信息可以阅读:TraCI/Interfacing_TraCI_from_Python。阅读更多的函数列表,可以阅读文档:pydoc generated documentation。
1.2交通灯控制
交通灯遵循固定的周期按照如下的定义。如下的代码定义来源于: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被设置为非常大的值。这是车辆的绿色阶段,并应在行人的情况下无限期延长。当在这个阶段有行人被侦测到,交通信号灯将会转变到下一个阶段,然后自动循环。在TraCI中有关信号灯的函数有traci.trafficlights.getPhase()和traci.trafficlight.setPhase()。
1.3和traci函数有关的行人(Personrelated traci functions)
为了模拟按钮(行人的触发),它必须知道是否行人正在等待交叉路口。以下的TraCI函数被利用的:
traci.edge.getLastStepPersonIDs():发现在交叉口的行人。
traci.person.getNextEdge():去决定行人是否通过交叉口或者正在李凯交叉口;
traci.person.getWaitingTime():确定行人是否已到达十字路口,并被迫等待。
traci.edge.getLastStepPersonIDs()的输入和traci.person.getNextEdge()的输出引用了对于仿真至关重要的网络元素(network elements)。在runner.py脚本中定义为:
WALKINGAREAS = [':C_w0', ':C_w1']
CROSSINGS = [':C_c0']
对于行人网络元素的描述,可以阅读更多: Simulation/Pedestrians。