Предотвращение несчастных случаев в венах
Я внедряю схему предотвращения несчастных случаев в Венах. Я изменил 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 ответа
Как я написал в списке рассылки; Я думаю, что причиной вашей проблемы является то, что SUMO автоматически моделирует реакцию водителей на аварии или препятствия. Если водители видят аварию, их реакция заключается в нарушении определенной схемы. SUMO разработан сообществом специалистов по дорожному движению, чтобы отразить это поведение с некоторой степенью реалистичности.
Насколько я знаю, commandSlowDown
предназначена как дополнительная функция, например, если вы хотите симулировать замедление движения транспортных средств по другим причинам, которые SUMO не симулирует. В частности, вы можете использовать для замедления, когда вы получаете информацию об аварии, которая находится дальше (например, через несколько прыжков). Я подозреваю, что это может быть то, что вы пытаетесь достичь, так что вы уверены, что другие транспортные средства также получают сообщение?
Поведение по предотвращению несчастных случаев переопределяет команды TraCI по умолчанию. Вам необходимо явно включить небезопасное вождение с помощью команды "скоростной режим". См. http://sumo.dlr.de/wiki/TraCI/Change_Vehicle_State