Как мне получить светофор, который есть в сумо, и поменять его фазу по венам?

В сумо в моем симуляторе есть светофор под названием 539320442.

Я хочу, чтобы RSU (существующий в жилах) изменял фазу этого светофора.

Итак, я создал переменную Trafficlight в TraCIDemoRSU11p.h следующим образом:

TraCICommandInterface::Trafficlight* RSU_traffic_light;

Теперь я хотел бы получить этот светофор с id: 539320442 и изменить его фазу, используя:

void TraCICommandInterface::Traffic_light::setPhase(string, integer)

Проблема в том, что в TraCIDemoRSU11p.cc мне не удалось включить светофор и сохранить его в:

RSU_traffic_light;

Поэтому мне было интересно, как мне получить этот светофор и сохранить его в RSU_traffic_light:

RSU_traffic_light = getTrafficLightbyID("539320442");

Было бы что-то подобное? Какой у него синтаксис?


person pb772    schedule 03.03.2017    source источник
comment
вы пишете, часть кода не работает. Не могли бы вы подробнее рассказать? Какие альтернативы пробовали? Что вы ожидали, что произойдет? Что случилось?   -  person Christoph Sommer    schedule 07.03.2017
comment
Подредактирую еще раз, нашел именно там, где основная проблема.   -  person pb772    schedule 07.03.2017
comment
Вы упомянули, что пытались использовать метод с подписью TraCICommandInterface::Traffic_light::setPhase(string, integer). В Венах такого метода нет. Не существует и класса Traffic_light. Может быть, вы ориентируетесь на документацию по разному программному обеспечению (может быть, SUMO C ++ API?).   -  person Christoph Sommer    schedule 07.03.2017


Ответы (1)


Установка программы и фазы светофора - это то, что делает простое тестовое приложение, включенное в Veins 4.5. Вы можете обратиться к его исходный код, чтобы увидеть, как он меняет фазы светофора:

#include "veins/modules/mobility/traci/TraCIMobility.h"
#include "veins/modules/mobility/traci/TraCICommandInterface.h"

TraCIMobility* mobility;
TraCICommandInterface* traci;

mobility = TraCIMobilityAccess().get(getParentModule());
traci = mobility->getCommandInterface();
traci->trafficlight("10").setProgram("myProgramGreenRed");
traci->trafficlight("10").setPhaseIndex(1);

Обратите внимание, что здесь используются идентификатор светофора SUMO и идентификатор фазы тестовый сценарий, то есть

<tlLogic id="10" type="static" programID="myProgramRed" offset="0">
 <phase duration="999" state="GggGGgrrr"/>
 <phase duration="999" state="GggGGgrrr"/>
</tlLogic>

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

person Christoph Sommer    schedule 07.03.2017