У меня есть своя собственная симуляция SUMO для алгоритма управления перекрестками, где я генерирую транспортные средства онлайн, получаю их информацию, принимаю решения о планировании и контролирую каждое транспортное средство. Я предполагал совершенную связь между транспортными средствами и агентом пересечения в симуляции. Теперь я хочу смоделировать реалистичное общение, используя вены. Тем не менее, после прочтения многих постов и успешного изучения учебника по венам, у меня все еще нет четкого представления о том, как его реализовать.
Примерно я узнал, что у меня есть два варианта:
1. реализовать алгоритм, используя файлы TraCIDemo11p для поведения автомобиля и файлы TraCIDemoRSU11p для агента пересечения. Проблема в том, что мне нужно делать все заново, используя C ++, и я не эксперт в C ++.
2. Я прочитал пост:
https://groups.google.com/forum/#!topic/omnetpp/XEazGbgq3eA
Проблема, заданная в письме, очень похожа на мою проблему. Кристоф предложил следующее решение:
Для такого сложного взаимодействия, возможно, лучше всего объединить все
мультиплексирование функциональности в вашем скрипте Python и запустить
симуляция без traci-launchd.
Когда Veins запускается, он пытается подключиться к настроенному серверу TraCI.
(localhost на TCP-порт 9999 по умолчанию), затем отправьте команду TraCI
дать команду серверу запустить SUMO, после чего
запросы на подписку.
В ходе вашей симуляции Вены будут неоднократно отправлять CMD_SIMSTEP
команды и ждать результатов подписки (то есть, отправления узлов,
переезд, прибытие).
Ваш скрипт может задержать передачу каждой команды CMD_SIMSTEP из Вен в
SUMO (и передача результатов обратно в Вену), пока он не будет готов к
обработать следующий шаг
Если ваш скрипт прослушивает порт 9999, читает команды TraCI, сбрасывает
самое первое сообщение, затем передает оставшиеся команды
(уже) запущенный экземпляр SUMO, он может служить этим мультиплексированием
точка.
вы можете использовать один дополнительный поток сообщений TraCI из Veins в ваш скрипт
который обновляет свою сохраненную копию информации о подключении на каждом временном шаге.
По сути, мне нужно соединить вены и код симуляции с SUMO. Каждый раз, когда вены считывают следы движения из SUMO и имитируют связь один раз, затем мой алгоритм считывает данные связи из вен и данные транспортного средства из SUMO, а затем отправляет управляющую команду в SUMO. Наконец, SUMO имитирует один шаг и возвращается в вену.
Мои вопросы:
1. Правильно ли мое понимание? Возможны ли эти два подхода?
2. Я предпочитаю второй подход, так как он может потребовать меньше времени. Но я не знаю, как я могу отделить команду CMD_SIMSTEP от вен данных, отправляемых в SUMO? Я считаю, что я должен изменить функцию forward_connection () в sumo-launchd.py, но я не уверен, как изменить переменную данных.
3. Для копирования информации о подключении в венах, я не знаю, где их взять?
Большое спасибо за вашу помощь.
Обновление: из документации SUMO:
Клиент должен запускать каждый шаг моделирования в SUMO с помощью команд, связанных с TraCI / Control # Команда 0x02: Команда шага моделирования. Если какие-либо подписки были выполнены, подписанные значения возвращаются. Симуляция перейдет к следующему, как только все клиенты отправят команду шага симуляции.
Итак, для второго вопроса, означает ли это, что мне не нужно ничего изменять в функции forward_connection (). Мне нужно только выяснить, как соединить SUMO с обоими клиентами (omnetpp и моя программа алгоритма)?
Обновление: я смог успешно следовать учебнику по венам, и теперь я могу изменить sumo-launchd.py, чтобы позволить другому клиенту подключаться к SUMO. Я пытаюсь выяснить, как получить данные о связи с венами / omnetpp.