静脉事故规避
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
我正在 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