How can I get a traffic light that exists in sumo and change its phase in veins?

…衆ロ難τιáo~ 提交于 2019-12-05 08:16:16

问题


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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!