Несколько клиентских объектов Python, подключающихся к одной симуляции сумо - PullRequest
0 голосов
/ 03 января 2019

Я новичок в СУМО.У меня есть .net, .rou (содержит 300 автомобилей с отправлением транспортных средств, id, атрибуты краев маршрута), .trip и .sumoconfig файл, представляющий сценарий трафика.Я хочу создать эти 300 транспортных средств в виде объекта Python Vehicle, генерирующего из класса Vehicle, содержащего другие функции, для связи друг с другом.Как они могут динамически подключаться к сумо и связываться с этими 300 автомобилями в сценарии?Я могу написать сервер, который прослушивает эти объекты и принимает соединение, но как пересылать или связывать их с этими средствами сценария сумо?Любая подсказка или ссылка или ссылка на код будет принята с благодарностью.

1 Ответ

0 голосов
/ 05 января 2019

Примером, наиболее близким к тому, чего вы хотите достичь, является, вероятно, учебник по CityMobil, см. http://sumo.dlr.de/wiki/Tutorials/CityMobil, но он сводится к чему-то такому:

import traci
import traci.constants as tc

traci.start(["sumo", "my.sumocfg"])
traci.simulation.subscribe()
while True:
    moveNodes = {}
    traci.simulationStep()
    # update the position of all running vehicles
    for veh, subs in traci.vehicle.getAllSubscriptionResults().items():
        moveNodes[veh] = (subs[tc.VAR_ROAD_ID], subs[tc.VAR_LANEPOSITION])
    # add new departed vehicles
    for v in traci.simulation.getSubscriptionResults()[tc.VAR_DEPARTED_VEHICLES_IDS]:
        traci.vehicle.subscribe(v)
        subs = traci.vehicle.getSubscriptionResults(v)
        moveNodes[v] = (subs[tc.VAR_ROAD_ID], subs[tc.VAR_LANEPOSITION])

Это дает вам карту с сохранением актуальных позиций для всех транспортных средств. Обратите внимание, что карта перестраивается каждый шаг с нуля, поэтому вам не нужно заботиться об оставлении транспортных средств. Если объекты вашего автомобиля сохраняются дольше, вам нужно будет удалить их, как только для них больше не будет результатов подписки.

...