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