Search code examples
omnet++veins

How to get collisions in Veins 4.7.1


I want to get the number of collisions in Veins. I am using Instant Veins 4.7.1 and I just modified the scenario to get a high density of vehicles without a RSU. The application only send beacons (BasicSafetyMessages) with an interval and transmission power as follows:

*.**.nic.mac1609_4.txPower = 50mW
*.node[*].appl.sendBeacons = true
*.node[*].appl.beaconInterval = 0.1s

I modified the next part of Mac1609_4.cc:

else if (msg->getKind() == Decider80211p::BITERROR || msg->getKind() == Decider80211p::COLLISION) {
    statsSNIRLostPackets++;
    DBG_MAC << "A packet was not received due to biterrors" << std::endl;
    if (msg->getKind() == Decider80211p::COLLISION)
        statsCollisions++;
    else if (msg->getKind() == Decider80211p::BITERROR)
        statsBitErrors++;
}

but all lost packets I get are due to biterrors and none due to collisions. Is there a default configuration of Veins that is not allowing me to get collisions?


Solution

  • Veins allows to collect statistics about collisions natively. However, it is disabled by default, since it increases simulation time. To enable it, just add the following line to your omnetpp.ini:

    *.**.nic.phy80211p.collectCollisionStatistics = true
    

    This enables collision statistics in Decider80211p on all nodes in your scenario which then record ncollisions.