SUMO文档014:TraCI的Python接口

TraCI的命令主要分为13个方面:

1.        gui,

2.        lane,

3.        poi(point of interest),

4.        simulation,

5.        traffic lights,

6.        vehicle type,

7.        edge,

8.        induction loop,

9.        junction,

10.    multi-entry/exit,

11.    polygon,

12.    route,

13.    person and vehicle.

关于更详细的内容,可以阅读相关的文档: pydoc generated documentation。源代码可以在此查看

1、在脚本中导入traci

为了使用库,安装目录的/tools文件夹必须在python的加载路径中。这通常是通过一小段代码实现,如下这样的:

mportos, sys
 if 'SUMO_HOME' in os.environ:
     tools =os.path.join(os.environ['SUMO_HOME'], 'tools')
     sys.path.append(tools)
 else:  
     sys.exit("please declare environmentvariable 'SUMO_HOME'")

这里,其实把tools目录加进path环境变量中就可以吧?

关于SUMO_HOME的环境变量设置在脚本执行前需设置,阅读:。另外,你也可以直接在命令中声明路径:

sys.path.append(os.path.join('c:', os.sep, 'whatever', 'path', 'to', 'sumo', 'tools'))

2、走出第一步

一般,通过python和SUMO进行交互并不难(下面的例子为tutorial/traci_tls的修改);

首先,你需要启动SUMO或者SUMO-GUI,并添加选项–remote-port,或者你直接在python脚本中写:

import subprocess
PORT = 8813
sumoBinary = "/path/to/sumo-gui"
sumoProcess = subprocess.Popen([sumoBinary, "-c", "yourConfiguration.sumocfg", "--remote-port", str(PORT)], stdout=sys.stdout, stderr=sys.stderr)
然后,使用你的脚本连接仿真:

import traci
traci.init(PORT) 
step = 0
while step < 1000:
   traci.simulationStep()
   no = traci.inductionloop.getLastStepVehicleNumber("0")
   traci.trafficlights.setRedYellowGreenState("0", "GrGr")
   step += 1
 
traci.close()
随着选项—remote-port选项的执行,脚本打开了和sumo的连接。直到你关闭连接,你可以发送多种命令,执行仿真的步骤。

3、订阅(subscriptions)

订阅可以被看作是一个用于检索变量的批处理模式。代替重复请求相同的变量,在每个时间步长中,你可以自动检索感兴趣的值。TraCI订阅在每一个模块基础上执行处理。您可以在每个时间步长后请求当前订阅的模块的结果。为了订阅变量,你需要直到他们的变量ID,这些ID可以在traci/constants.py文件中查询。

import traci
import traci.constants as tc
 
PORT = 8813
traci.init(PORT) 
traci.vehicle.subscribe(vehID, (tc.VAR_ROAD_ID, tc.VAR_LANEPOSITION))
print traci.vehicle.getSubscriptionResults(vehID)
for step in range(3):
   print "step", step
   traci.simulationStep()
   print traci.vehicle.getSubscriptionResults(vehID)
traci.close()
检索的值总是从最后一个时间步骤的,它是不可能检索旧的值。

4、来自相同TraCI脚本的并行模拟

Traci可以在同一时间使用同一脚本进行多倍的仿真运行。为了实现运行,每个仿真必须有自己的port端口号,通过—remote-port设置。函数traci.init()有一个可选的标签参数,允许您多次调用不同的端口和标签。函数traci.switch()可以用来转到任何标签的初始化阶段。

traci.init(8813, label="sim1")
 traci.init(8814, label="sim2")
 traci.switch("sim1")
 traci.simulationStep() # run 1 step for sim1
 traci.switch("sim2")
 traci.simulationStep() # run 1 step for sim2
请注意,每一个模拟步骤(即使是不同的模拟)都会清除所有的订阅结果。

5、嵌入式python

作为一个实验特征,让SUMO直接与python连接,并且在SUMO中直接运行脚本都是可能的。语法完全相同,除非你leave out了 init和close的调用,你需要通过—python-script启动sumo。这个功能目前不支持GUI版本的sumo。

由于该功能还没有得到很好的测试,当创建SUMO您需要启用嵌入式Python(在发布版本和nightly build中不可以)。为了实现此功能,你需要进行以下几步:

5.1Linux

n  安装python开发包文件

n  使用—with-python选项调用配置文件

n  像往常一样制作&&制作安装

5.2windows

1.        确保python已经安装并且设置了环境变量path

2.        调用tools\build\pythonPropsMSVC.py去生成/修改文件build\msv10\config.props

3.        像往常创建win32 release版本

4.        调试版本(debug)涉及比较多,默认是不可用的。以下的指令来源于:taken from here

1)        下载适合你版本的python源代码

2)        在Visual Studio的pcbuild目录下打开pcbuild.sln

3)        开始win32 Debug的创建,,将会报很多的错,但是核心部分成功。

4)        从PCbuld目录下复制:

Ø  python27_d.dll到python安装目录下(如c:\Python27)

Ø  python27_d.dll,python27_d.pdb,python27_d.exp到libs目录下;(如c:\python27\libs)

Ø  每个*_d.pyd到DLLs文件下(比如c:python27\DLLs)

4)通过修改build\msvc10\win32.props实现pythondebug创建

5)现在你能够为SUMO创建win32 debug

注意:

连接SUMO Debug build对应的python版本并不容易(其他的库可能存在)。 If you just need SUMO with debugging symbols, and don'twant to build the python debug lib, use the Fastbuild configuration.

VS更早版本和64位机器可能并不合适,但是程序员可以能够修改代码实现。

6、其他功能函数

当使用TraCI时,一些普遍的任务并没有包含在TraCI库中,比如:

1)        分析道路网络

2)        解析仿真输出

针对这些功能,可以阅读: Tools/Sumolib

7、缺陷与解决方案

注意,字符串,如果交换,必须是ASCII编码。

如果你通过python脚本的subprocess.Popen,结束脚本前确保调用wait()在结果处理中。否则你将失去输出。(意思是看不到输出,因为不等的话,就会一闪而过

  • 2
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值