问题
In sumo, my simulation has a traffic light called 539320442
.
I want that a RSU (that exists in veins) changes this traffic light's phase.
So I created a Trafficlight
variable in the TraCIDemoRSU11p.h
as it follows:
TraCICommandInterface::Trafficlight* RSU_traffic_light;
Now I would like to get this traffic light that has id: 539320442
and change its phase by using:
void TraCICommandInterface::Traffic_light::setPhase(string, integer)
The problem is that in the TraCIDemoRSU11p.cc
I couldn't get the traffic light and save it in:
RSU_traffic_light;
So I was wondering how can I get this traffic light and save it in RSU_traffic_light
:
RSU_traffic_light = getTrafficLightbyID("539320442");
Would it be something like that? What is the exactly syntax for it?
回答1:
Setting a traffic light's program and phase is what the simple test application included in Veins 4.5 does. You can refer to its source code to see how it changes traffic light phases:
#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);
Note that this uses the SUMO traffic light id and phase id of the test scenario, that is,
<tlLogic id="10" type="static" programID="myProgramRed" offset="0">
<phase duration="999" state="GggGGgrrr"/>
<phase duration="999" state="GggGGgrrr"/>
</tlLogic>
Your scenario will likely use a different traffic light ID and phase ID.
来源:https://stackoverflow.com/questions/42574586/how-can-i-get-a-traffic-light-that-exists-in-sumo-and-change-its-phase-in-veins