如何在 Veins 下重新实现事故?

How to reimplement accidents under Veins?

我想知道 Veins 2.0 和一般情况下(使用 TraciMobility 模块)如何实施事故? 我检查了最后一个代码版本,似乎事故模拟背后的机制是一样的。

我注意到,负责的代码如下:

//in TraCIMobility::initialize() method

if (accidentCount > 0) {
        simtime_t accidentStart = par("accidentStart");
        startAccidentMsg = new cMessage("scheduledAccident");
        stopAccidentMsg = new cMessage("scheduledAccidentResolved");
        scheduleAt(simTime() + accidentStart, startAccidentMsg);
}


//in TraCIMobility::handleSelfMsg() method

if (msg == startAccidentMsg) {
        commandSetSpeed(0);
        simtime_t accidentDuration = par("accidentDuration");
        scheduleAt(simTime() + accidentDuration, stopAccidentMsg);
        accidentCount--;
}

所以,如果我没理解错的话,这个机制只是将车辆的当前速度设置为0,而不是命令它停止移动并停留在当前位置?!

假设我想通过命令车辆直接停在当前位置来模拟事故?我怎样才能实现它?通过使用停止 Traci 命令 ?

谢谢,

通过 Command 0xc4 0x40 设置车辆的速度会立即生效并一直有效,直到设置为不同的速度或重置(通过传递值 -1)。

您可以在其 TraCI 的 SUMO 文档中找到更多详细信息 API。

最后,

Veins 2.0下的accidents实现(我猜上个版本也是一样的)就像我之前说的,设置speed为0(使用Traci command/variable : Change Vehicle State(0xc4) /speed (0x40)).

如果有人想以不同的方式实现事故,例如将汽车停在 Y 路下的 X 位置,则必须使用 Traci command/variable 重新实现事故:更改车辆状态(0xc4)/停止(0x12),此命令将位置 X 和道路 Y 作为参数。

祝你好运,