如何使用omnet ++在模拟汽车网络中停放汽车?

时间:2019-01-02 10:59:59

标签: omnet++ veins sumo

在模拟中,我需要将汽车停在停车场中,当汽车离开停车场时,它会将其信息传输到停车场内的其余汽车中。停车场,其与停车场外部或停车场内部的通信不应中断。

我正在使用omnetpp-5.0,sumo-0.25.0和静脉-静脉-4.4。我试图对基静脉进行更改,但没有得到结果。

如何在不中断与停车场内部和外部的通信的情况下停放汽车?

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

我不是静脉专家,所以我只能说相扑面。您只需在车辆路线上添加一个停车站并标记为这样的停车位即可:

<vehicle id="1" depart="0">
    <route edges="edge1 edge2"/>
    <stop lane="edge2_0" endPos="100" duration="100" parking="true"/>
</vehicle>

如果由于停车将车辆从网络中移出而无法工作,并由于不再有可靠的位置而可能导致通信中断,则此操作不起作用,请在网络中创建一条单独的街道:

<vehicle id="1" depart="0">
    <route edges="edge1 edge2a parking edge2b"/>
    <stop lane="parking_0" endPos="100" duration="100"/>
</vehicle>

“停车”处的车道比edge2多出至少一个车道,因此车辆可以超车。 (我是从内存中编写示例的,未经测试,因此其中可能有错误。)

答案 1 :(得分:0)

以下摘录可能会有所帮助,因为它演示了车辆在临时停靠点(模拟停车)。有关详细信息,请查看静脉中的 TraCIMobility.cc

void TraCIMobility::handleSelfMsg(cMessage *msg)
{
    if (msg == startAccidentMsg) {
        commandSetSpeed(0);
        simtime_t accidentDuration = par("accidentDuration");
        scheduleAt(simTime() + accidentDuration, stopAccidentMsg);
        accidentCount--;
    }
    else if (msg == stopAccidentMsg) {
        commandSetSpeed(-1);
        if (accidentCount > 0) {
            simtime_t accidentInterval = par("accidentInterval");
            scheduleAt(simTime() + accidentInterval, startAccidentMsg);
        }
    }
}