Wiki

Clone wiki

VMaSC Clustering / Home

Multihop-Cluster-Based IEEE 802.11p and LTE Hybrid Architecture for VANET Safety Message Dissemination

Several vehicular ad hoc network (VANET) studies have focused on communication methods based on IEEE 802.11p, which forms the standard for wireless access for vehicular environ- ments. In networks employing IEEE 802.11p only, the broadcast storm and disconnected network problems at high and low vehicle densities, respectively, degrade the delay and delivery ratio of safety message dissemination. Recently, as an alternative to the IEEE 802.11p-based VANET, the usage of cellular technologies has been investigated due to their low latency and wide-range communication. However, a pure cellular-based VANET commu- nication is not feasible due to the high cost of communication between the vehicles and the base stations and the high number of handoff occurrences at the base station, considering the high mobility of the vehicles. This paper proposes a hybrid architecture, namely, VMaSC–LTE, combining IEEE 802.11p-based multihop clustering and the fourth-generation (4G) cellular system, i.e., Long-Term Evolution (LTE), with the goal of achieving a high data packet delivery ratio (DPDR) and low delay while keep- ing the usage of the cellular architecture at a minimum level. In VMaSC–LTE, vehicles are clustered based on a novel ap- proach named Vehicular Multihop algorithm for Stable Clustering (VMaSC). The features of VMaSC are cluster head (CH) selection using the relative mobility metric calculated as the average relative speed with respect to the neighboring vehicles, cluster connection with minimum overhead by introducing a direct connection to the neighbor that is already a head or a member of a cluster instead of connecting to the CH in multiple hops, disseminating cluster mem- ber information within periodic hello packets, reactive clustering to maintain the cluster structure without excessive consumption of network resources, and efficient size- and hop-limited cluster merging mechanism based on the exchange of cluster information among CHs. These features decrease the number of CHs while increasing their stability, therefore minimizing the usage of the cellular architecture. From the clustered topology, elected CHs operate as dual-interface nodes with the functionality of the IEEE 802.11p and LTE interface to link the VANET to the LTE network. This bitbucket repository contains the developed ns-3 codes for Multihop-Cluster-Based IEEE 802.11p and LTE Hybrid Architecture for VANET Safety Message Dissemination

##Mobility VMaSC is tested with the vehicle mobility input from the Simulation of Urban MObility SUMO.SUMO, generated by the German Aerospace Center, is an open-source, space-continuous, discrete- time traffic simulator capable of modeling the behavior of individual drivers. The acceleration and overtaking decision of the vehicles are determined by using the distance to the leading vehicle, traveling speed, dimension of vehicles and profile of acceleration-deceleration.Used road topology consists of a two-lane and two-way road of length 5 km. The total simulation time is 355 s. The clustering process starts at 55 s when all the vehicles have entered the road. Injection of vehicles into road is modeled according to Poisson process with a rate equals to 2. There are two classes of vehicles; the type of a vehicle 1 and vehicle 2 with different maximum speed ranges where type 1 vehicles have maximum speed up to 10 m/s and speed of type 2 vehicles changes from 10 m/s to 35 m/s. The reason for having two classes of vehicles with different maximum speed ranges is to create a scenario with heterogeneous vehicles on road (e.g., car versus bus, truck). All the performance metrics are evaluated for the remaining 300 s. For example, the simulation with 35 m/s scenarios contains two different car types with the following type declarations;

#!xml

<vtype id="CarA" accel="1.0" decel="2.0"  sigma="0.5" length="4.0" maxspeed="10.0"  /> 
<vtype id="CarB" accel="5.0" decel="5.0"  sigma="0.5" length="4.0" maxspeed="35.0"  /> 

The VMaSC simulation starts with the importing the SUMO mobility. To import the SUMO generated mobilities, InitMobilityModel(string file) method is used. "InitMobilityModel" uses the ns-3 WayPointMobilityModel where we define the vehicle position and speed value within a specific time. The code block can be found below;

#!c++
m_node->GetObject<WaypointMobilityModel>()->AddWaypoint(Waypoint(Seconds(time),Vector(x, y, 0),DoubleValue(speed)));
After importing the vehicle mobilities, simulation injects vehicles into road. This injection is done with the Poisson process with a rate 2 where for a second, average 2 vehicles will enter the road. This vehicle injection is done with the xml configuration file which is below;

#!xml

<vehicle type="CarB"  id="veh1" depart="0"  departLane="1" departPos="free" departSpeed="3.0" arrivalLane="current"    arrivalPos="max"  > <route edges="D2 D6"/>  </vehicle> 
<vehicle type="CarA"  id="veh2" depart="0"  departLane="0" departPos="free" departSpeed="3.0" arrivalLane="current"    arrivalPos="max"  > <route edges="D1 D3"/>  </vehicle> 
<vehicle type="CarB"  id="veh3" depart="0"  departLane="1" departPos="free" departSpeed="3.0" arrivalLane="current"    arrivalPos="max"  > <route edges="D2 D6"/>  </vehicle> 
<vehicle type="CarA"  id="veh4" depart="1"  departLane="0" departPos="free" departSpeed="3.0" arrivalLane="current"    arrivalPos="max"  > <route edges="D1 D3"/>  </vehicle>
.
.
<vehicle type="CarB"  id="veh99" depart="43"  departLane="1" departPos="free" departSpeed="3.0" arrivalLane="current"    arrivalPos="max"  > <route edges="D2 D6"/>  </vehicle> 
<vehicle type="CarA"  id="veh100" depart="45"  departLane="0" departPos="free" departSpeed="3.0" arrivalLane="current"    arrivalPos="max"  > <route edges="D1 D3"/>  </vehicle> 
</routes> 
From xml configuration file, we can see that vehicles depart at different time scale which creates a real network with different car type. After vehicle injection, at time 55 the clustering process is triggered. Program main function can be found below;

#!c++

int main (int argc, char *argv[])
{

  ns3::PacketMetadata::Enable ();
  ns3::Packet::EnablePrinting ();
  Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold", StringValue ("2200"));
  Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("0"));

  double simTime = 0.0;
  bool plot = false;
  uint vn = 100;
  uint runNumber = 1;

  Ptr<Roads> roads = CreateObject<Roads> ();
  Ptr<Controller> controller = CreateObject<Controller> ();

  // Bind an experiment (controller) to the roads
  controller->SetVehiclesNumber (vn);
  controller->SetRoads (roads);
  controller->Plot = plot;

  //Simulation time = 355.0
  simTime = controller->getSimulationTime();


  // Bind the Roads/Vehicle events to the event handlers, so that Controller
  // will catch them.
  roads->SetControlVehicleCallback (MakeCallback (&Controller::ControlVehicle,controller));
  roads->SetInitVehiclesCallback (MakeCallback (&Controller::InitVehicles,controller));

  // Setup seed and run-number (to affect random variable outcome of different runs)
  if (runNumber < 1) runNumber = 1;


  SeedManager::SetSeed (1);
  SeedManager::SetRun (runNumber);

  // Schedule and run simulation
  Simulator::Schedule (Seconds (55.0), &Start, roads);
  Simulator::Schedule (Seconds (simTime), &Stop, roads);

  Simulator::Stop (Seconds (simTime));
  Simulator::Run ();


  Simulator::Destroy ();

  return 0;
}
In simulation, we have different kind of packet where we identify them based on the packet identifies. Some used packet ids are as follows;

#!c++

const int HELLO= 0;
const int DATA = 1;
const int JOINREQ = 2;
const int JOINRESPONSE = 3;
const int CH_ADV = 4;
const int CLUSTERINFO = 5;

The simulation has 3 objects namely road, vehicle and a controller. Controller is responsible for timer based operation. It catches the state timers and perfrom necessary operation. The most important part of the code is in Vehicle class. In VMaSC, vehicles can be in one of state which given as;

#!c++
class Initial;
class StateElection;
class ClusterGuest;
class ClusterMember;
class ClusterHead;
class IsoClusterHead
During the implementation of VMaSC State Diagram, State Design Pattern is used State patterns indicates that each state has same functionalities however each of them behaves based on vehicles state. Each state has to response some actions such that receive hello packet, receive data packet and so on. The action in each state is coded under state correlated function. One exception is done in isolated cluster head where the state is identical to cluster head. To keep the isolated cluster head, an extra boolean variable is used.

Updated