2

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

4

2 回答 2

1

正如我在邮件列表中所写的那样;我认为您的问题的原因是 SUMO 自动模拟驾驶员对事故或障碍物的反应。如果司机看到事故,他们的反应是打破特定的模式。SUMO 是由交通科学界开发的,以一定程度的真实性来反映这种行为。

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

于 2016-03-14T08:02:29.327 回答
0

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

于 2016-05-31T06:04:07.607 回答