Omnet++ 静脉内避免意外

Omnet++ 静脉内避免意外,omnet++,veins,traffic-simulation,Omnet++,Veins,Traffic Simulation,我正在实施一项预防事故计划。我修改了TracIDemo11p.cc并更改了onData函数,如下所示- void TraCIDemo11p::onData(WaveShortMessage* wsm) { findHost()->getDisplayString().updateWith("r=16,green"); annotations->scheduleErase(1, annotations->drawLine(wsm->getSenderPos(

我正在实施一项预防事故计划。我修改了TracIDemo11p.cc并更改了onData函数,如下所示-

void TraCIDemo11p::onData(WaveShortMessage* wsm) {
    findHost()->getDisplayString().updateWith("r=16,green");
    annotations->scheduleErase(1, annotations->drawLine(wsm->getSenderPos(), traci->getPositionAt(simTime()), "blue"));
    if (!sentMessage)
    {
        traci->commandSlowDown(0.0,4);  //speed changes smoothly to 0 in 4sec
        sendMessage(wsm->getWsmData());
    }
}
我希望车辆在收到信息后4秒内减速并停止。但这件事没有发生。发生事故时,第一辆车立即刹车,其余车辆照常停车。我哪里做错了?请建议。

如我所写;我认为你的问题的原因是相扑自动模拟司机对事故或障碍物的反应。如果司机看到事故,他们的反应是打破一个特定的模式。相扑是由交通科学界开发的,以某种程度的现实主义反映这种行为


据我所知,
命令减速
是一项附加功能,例如,当您想模拟车辆因SUMO无法模拟的其他原因减速时。特别是,当您收到距离较远的事故信息(例如,多跳)时,可以使用减速。我怀疑这可能是您试图实现的目标,因此您确定其他车辆也收到了该消息吗?

默认情况下,事故避免行为会覆盖TraCI命令。您需要使用“速度模式”命令明确启用不安全驾驶。请参见

是,所有车辆都会接收到这些信息,因为车辆管理器具有在整个车辆排上广播信息的代码,并且作为响应的车辆会更改其路线。同样,我想将响应更改为紧急制动,而不是更改路线。我该在哪里换钱?我不知道你的意思。如果你想禁用或更改相扑的紧急破坏行为,你可能应该在相扑邮件列表上询问你的问题——不幸的是,我对相扑不够熟悉,无法提出一个好的方法来处理你试图做的事情。或者,你可能想看看Michele Segeta的工作,它涉及排队(可能也有类似的问题)。