如何在python中使用traci和sumo?

时间:2018-11-01 19:16:59

标签: python sumo

我正在尝试模拟交通信号灯和检测器的交叉点,并训练机器学习分类器以使用来自检测器的信息来设置交通信号灯相位。

我可以使用以下方式运行仿真:

import traci
traci.start(sumoCmd) 
step = 0
while step < 1000:
    traci.simulationStep()
    step += 1
traci.close()

但是,我不知道如何获取有关汽车的信息。我有e2检测器,但我不知道如何使用其输出。我不了解traci和相扑文档。

我尝试了以下代码:

import traci
traci.start(sumoCmd) 
step = 0
lanearea = traci._lanearea.LaneAreaDomain()
detlist = lanearea.getIDList()
while step < 1000:
    traci.simulationStep()
    print([lanearea.getLastStepVehicleNumber(det) for det in detlist])
    step += 1
traci.close()

但不起作用。我收到此错误

detlist = lanearea.getIDList()
return self._getUniversal(tc.ID_LIST, "")
result = self._connection._sendReadOneStringCmd(self._cmdGetID, varID, objectID)
AttributeError: 'NoneType' object has no attribute '_sendReadOneStringCmd'

谁能告诉我如何解决此代码?或更一般而言,如果有人知道的话,如何使用http://sumo.dlr.de/wiki/TraCI/Lane_Area_Detector_Value_Retrieval中的任何功能或任何其他方式来获取有关汽车的信息。

2 个答案:

答案 0 :(得分:1)

不需要自己实例化Lanearea。只需使用traci.lanearea.getIDList()traci.lanearea.getLastStepVehicleNumber(det),您的程序应如下所示:

import traci
traci.start(sumoCmd) 
step = 0
detlist = traci.lanearea.getIDList()
while step < 1000:
    traci.simulationStep()
    print([traci.lanearea.getLastStepVehicleNumber(det) for det in detlist])
    step += 1

也不需要关闭。

答案 1 :(得分:0)

您还可以使用以下方法获取车辆ID列表

vehicle_id_list = traci.vehicle.getIDList()

然后获得的ID可用于获取各种参数,例如

  1. 等待时间:traci.vehicle.getAccumulatedWaitingTime(vehicle_id)
  2. 道路编号:traci.vehicle.getRoadID(vehicle_id) 等等。