静脉中的意外避免

时间:2016-03-13 20:04:01

标签: omnet++ veins traffic-simulation

我正在Veins实施事故避免计划。我修改了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秒内减速并停止。但事情并没有发生。当发生事故时,第一辆车立即刹车,其余车辆照常停车。我哪里错了?请建议。

2 个答案:

答案 0 :(得分:1)

正如我写的on the mailing list;我认为问题的原因是SUMO自动模拟驾驶员对事故或障碍的反应。如果司机发现事故,他们的反应是打破特定的模式。 SUMO由交通科学界开发,以某种程度的现实主义反映这种行为。

据我所知,commandSlowDown旨在作为附加功能,例如当您想要模拟车辆因SUMO无法模拟的其他原因而减速时。特别是,当您收到有关更远的事故(例如,多次跳跃)的信息时,您可以使用减慢速度。我怀疑这可能是你想要实现的目标,所以你确定其他车辆也收到了这个消息吗?

答案 1 :(得分:0)

默认情况下,事故避免行为会覆盖TraCI命令。您需要使用'速度模式'明确启用不安全驾驶?命令。见http://sumo.dlr.de/wiki/TraCI/Change_Vehicle_State#speed_mode_.280xb3.29