本文介绍traci英文文档(主要是与python的接口)。
第一个接口已有较多参考,故从第二个开始介绍。
可以将“subscribe”视为用于检索变量的批处理模式。 您可以在每个时间步骤后自动检索感兴趣的值,而不必一遍又一遍地询问相同的变量。 TraCI的subscribe按每个模块进行处理。 也就是说,您可以在每个时间步之后向模块询问所有当前subscribe的结果。 为了subscribe变量,您需要知道它们的变量ID,可以在traci / constants.py文件中查找它们。
下面展示一些 代码
。
import traci
import traci.constants as tc
traci.start(["sumo", "-c", "my.sumocfg"])
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))#每隔3步,输出订阅结果
traci.close()
TraCI的context subscriptions按每个模块进行处理。 也就是说,可以在每个时间步之后向模块询问所有当前订阅的结果。 为了context subscriptions变量,您需要获取要检索的对象的域ID,以及可以在traci / constants.py文件中查找的变量ID。 域ID的格式始终为CMD_GET_ _VARIABLE。
下面展示一些 检索路口范围(42m)内的所有车速和等待时间(隐式检索车辆ID)
。
import traci
import traci.constants as tc
traci.start(["sumo", "-c", "my.sumocfg"])
traci.junction.subscribeContext(junctionID, tc.CMD_GET_VEHICLE_VARIABLE, 42, [tc.VAR_SPEED, tc.VAR_WAITING_TIME])
print(traci.junction.getContextSubscriptionResults(junctionID))
for step in range(3):
print("step", step)
traci.simulationStep()
print(traci.junction.getContextSubscriptionResults(junctionID))
traci.close()
和第一节的subscribe的区别在于,context指定所要订阅变量的域(范围)。也就是在上面代码中,指定交叉口junction的ID,指定domain是vehicle,指定范围“42”,就能搜索该范围内的车辆的速度和时间。
其中,subscribeContext的函数表示,Subscribe to objects of the given domain (specified as domain=traci.constants.CMD_GET__VARIABLE),
which are closer than dist to the object specified by objectID.。
下面展示 addSubscriptionFilter
用法。
traci.vehicle.subscribeContext("ego", tc.CMD_GET_VEHICLE_VARIABLE, 0.0, [tc.VAR_SPEED])
#获取以车辆为“ego”为中心,0米范围内所有车辆的速度。
traci.vehicle.addSubscriptionFilterLanes(lanes, noOpposite=True, downstreamDist=100, upstreamDist=50)
#增加lane的过滤器,下游距离100,上游距离50
通常,每次调用traci.simulationStep()时都需要调用一个函数,以使其自动发生,可以添加StepListener对象“ listener”(更确切地说是 traci.StepListener的子类),即:
下面展示一些 代码
。
class ExampleListener(traci.StepListener):
def step(self, t=0):
# do something at every simulaton step
print("ExampleListener called at time %s ms." % t)
# indicate that the step listener should stay active in the next step
return True
listener = ExampleListener()
traci.addStepListener(listener)
链接: link.