Как использовать traci и sumo в python? - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь смоделировать пересечение со светофором и детекторами и обучить классификатор машинного обучения, чтобы использовать информацию от детекторов для установки фазы светофора.

Я могу запустить симуляцию, используя:

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

Однако я не знаю, как получить информацию об автомобилях. У меня есть детекторы e2, но я не знаю, как использовать их выход. Я не понимаю документацию traci и sumo.

Я попробовал этот код:

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 или любых других способах получения информации об автомобилях.

1 Ответ

0 голосов
/ 02 ноября 2018

Нет необходимости создавать экземпляр самостоятельно. Просто используйте 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

Также закрытие не обязательно.

...