SUMO教程011:TraCI教程(上)

来源:互联网 发布:淘宝双11多久发货 编辑:程序博客网 时间:2024/05/17 13:44

这篇教程展示了如何使用Traffic Control Interface (in short TraCI),以一个简单例子为基础。TraCI可以允许我们控制正在运行的交通仿真。TraCI采用了一种基于TCP的客户端/服务器体系结构,SUMO作为服务器,相应的脚本文件为客户端(也称控制器)。在这个教程中,控制器为python脚本,用于获取仿真状态的信息并回复指令。

假定你已经知道了如何常见一个道路网络和路由的定义,如果不知道可以访问:Tutorials/Hello Sumo or Tutorials/Quick Start.

在这部教程中提到的所有教程你都可以找到:<SUMO_HOME>/docs/tutorial/traci_tls。最新的版本可以存在于:<SUMO_HOME>/tests/complex/tutorial/traci_tls/.

1、例子描述

我们的例子是在一个简单的信号四道交叉口的控制。我们仅仅在水平轴方向设置交通状况,重要的交通工具(如电车、火车、消防车、…)从北到南的垂直轴。在北方的方向,我们有一个感应回路,以识别进入车辆。当没有车辆从北方进入,我们给所有的时间在水平轴上的绿色。但是当车辆进入感应回路时,我们立即切换信号,使车辆可以及时通过交叉路口没有停止。【就是南北方向只要有车就设置路灯,否则一直是东西方向绿。】

2、运行一个例子

运行程序,你需要执行python脚本:

pythonrunner.py

注意:要允许GUI运行。

3、数据准备

相关的net生成所需文件可以在文件中找到:cross.nod.xml,cross.edg.xml,cross.con.xml和cross.det.xml。路由数据由脚本随机生成。车辆离开源根据由一个二项分布近似的泊松过程。因此,一个参数P = 1 / 30在脚本中意味着平均每30秒就产生一次汽车。

4、代码

逻辑控制代码在python脚本runner.py中。它生成路径、执行服务和控制信号灯。它使用了捆绑于SUMO的TraCI python API实现。关于此API的描述可以移步至: TraCI/Interfacing_TraCI_from_Python。查阅更详细的函数列表可以查看:pydoc generated documentation

5、仿真

主要的程序都是在脚本中的。因此,我们首先生成路由按照上面的描述。 SUMO-GUI 程序通过配置文件cross.sumocfg启动,附加服务器参数–remote-port 8873。

下一步,脚本通过调用traci.init连接服务器。然后我们就可以控制仿真。我们让服务器模拟一个模拟步骤,读取感应回路,并切换到交通灯的阶段,直到最后到达没有车辆存在这条道路上了。如果我们发现一辆汽车在感应回路上了,相位被切换,使得南北方向信号灯变绿。如果没有车辆在探测器上,我们还没有在切换的过程中(所以电子战仍然是绿色的),我们试图保持这个阶段,通过简单地重新设置。在最后,我们关闭连接

6、TraCI

我们想在SUMO上运行程序,作为服务器。控制信号依赖于实际的仿真状态。针对这次的人物,TraCI提供了详细咋命令,可以阅读:TraCI。在这个例子中我们仅仅用到四个命令:SimulationStepGet InductionLoop VariableChangeTraffic Lights State and Close.。

命令嵌入在TCP报文,直接的客户端-服务器通信对用户是不透明的。在本教程中所需要的四个命令在以下方法中实现:

traci.simulationStep(step)traci.inductionloop.getLastStepVehicleNumber(IndLoopID),traci.trafficlights.setPhase(TLID, phase) , traci.close().

7、附录

发送和接收信息的方法_recvExact()和_sendExact()分别隐藏在脚本文件__init__.py中,没有必要直接去调用它们。在这一节中我们将展示一个使用traci.trafficlights.setredyellowgreenstate的命令实例组成。

7.1、setPhase

该方法设置了一个交通灯的相位,它获取交通灯的ID,新的相位作为参数。相位的定义可以从SUMO网络中读取,阅读更多可以移步:Simulation/TrafficLights#Loading new TLS-Programs。如果相位已经是目前的了,那么重新开始。命令描述: TraCI/Change Traffic Lights State

0 0