静脉事故规避

Accident Avoidance in Veins

我正在 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秒内减速停车。但是这件事没有发生。当事故发生时,第一辆车立即刹车,其余车辆照常停车。我哪里错了?请提出建议。

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

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

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