如何在 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 作为参数。
祝你好运,
我想知道 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 作为参数。
祝你好运,