Routes 如何使用change“;更改车辆路线”;使用纹理、相扑和Omnet++;?

Routes 如何使用change“;更改车辆路线”;使用纹理、相扑和Omnet++;?,routes,omnet++,veins,sumo,Routes,Omnet++,Veins,Sumo,我正在使用一个简单的网络来改变以下车辆的路线。我的代码没有显示任何错误。SUMO和omnet++都能正常工作;然而,这些车辆并没有改变路线。我已经用给定的静脉演示网络进行了尝试,但仍然不起作用。到目前为止,我已经尝试了几种在不同来源中找到的方法(您可以在我在注释中留下的实际代码中看到),但仍然没有任何车辆改变路线。 我的rou.xml是: 更改路径是TraCIDemo11p.cc中的更改路径 void TraCIDemo11p::onWSM(BaseFrame1609_4* frame)

我正在使用一个简单的网络来改变以下车辆的路线。我的代码没有显示任何错误。SUMO和omnet++都能正常工作;然而,这些车辆并没有改变路线。我已经用给定的静脉演示网络进行了尝试,但仍然不起作用。到目前为止,我已经尝试了几种在不同来源中找到的方法(您可以在我在注释中留下的实际代码中看到),但仍然没有任何车辆改变路线。

我的rou.xml是:


更改路径是TraCIDemo11p.cc中的更改路径

void TraCIDemo11p::onWSM(BaseFrame1609_4* frame){
TraCIDemo11pMessage* wsm = check_and_cast<TraCIDemo11pMessage*>(frame);

findHost()->getDisplayString().setTagArg("i", 1, "green");

//traciVehicle->changeVehicleRoute({"-gneE11","-gneE11"});
// mobility = TraCIMobilityAccess().get(getParentModule());
// traci = mobility->getCommandInterface();
//traciVehicle = mobility->getVehicleCommandInterface();
// traciVehicle->changeRoute("-gneE11", 6);

if (mobility->getRoadId()[0] != ':'){traciVehicle->changeRoute("-gneE11", 3600);}

if (!sentMessage) {
    sentMessage = true;
    // repeat the received traffic update once in 2 seconds plus some random delay
    wsm->setSenderAddress(myId);
    wsm->setSerial(3);
    scheduleAt(simTime() + 2 + uniform(0.01, 0.2), wsm->dup());
}
void TraCIDemo11p::onWSM(BaseFrame1609_4*frame){
TraCIDemo11pMessage*wsm=检查和强制转换(帧);
findHost()->getDisplayString().setTagArg(“i”,1,“绿色”);
//traciVehicle->ChangeVehiclerRoute({“-gneE11”,“-gneE11”});
//mobility=TraCIMobilityAccess().get(getParentModule());
//traci=mobility->getCommandInterface();
//traciVehicle=mobility->getVehicleCommandInterface();
//跟踪车辆->变更路线(“-gneE11”,6);
if(mobility->getRoadId()[0]!=':'){traciVehicle->changeRoute(“-gneE11”,3600);}
如果(!sentMessage){
sentMessage=true;
//每隔2秒重复接收到的流量更新一次,再加上一些随机延迟
wsm->setSenderAddress(myId);
wsm->setSerial(3);
scheduleAt(simTime()+2+uniform(0.01,0.2),wsm->dup());
}

}

如果您想了解各种相扑方法的功能,我建议您直接查看源代码,例如。您将看到,您的代码所做的是更改车辆的路线,以承担edge
-gneE11
3600的工作量(1小时,即大量工作量)。此边缘不是您车辆路线的一部分,因此您的车辆都不关心:他们打算走的路线仍然“非常好”

对于替代方案,请参见方法,其中的方法调用了Velse 5.1中实现的所有SUMO方法一次,以查看它们是否按照预期的方式运行。例如,将(对于一辆车)边缘
42
的假定作用力更改为
9999
,然后(稍后)检查车辆是否确实避开了该边缘

从您注释掉的代码判断,中的代码更符合您想要做的事情:为车辆提供一条新路线

void TraCIDemo11p::onWSM(BaseFrame1609_4* frame){
TraCIDemo11pMessage* wsm = check_and_cast<TraCIDemo11pMessage*>(frame);

findHost()->getDisplayString().setTagArg("i", 1, "green");

//traciVehicle->changeVehicleRoute({"-gneE11","-gneE11"});
// mobility = TraCIMobilityAccess().get(getParentModule());
// traci = mobility->getCommandInterface();
//traciVehicle = mobility->getVehicleCommandInterface();
// traciVehicle->changeRoute("-gneE11", 6);

if (mobility->getRoadId()[0] != ':'){traciVehicle->changeRoute("-gneE11", 3600);}

if (!sentMessage) {
    sentMessage = true;
    // repeat the received traffic update once in 2 seconds plus some random delay
    wsm->setSenderAddress(myId);
    wsm->setSerial(3);
    scheduleAt(simTime() + 2 + uniform(0.01, 0.2), wsm->dup());
}