Hi All, Our website moved to a new URL. Please bookmark the new link: https://ns2bloggers.blogspot.com/

Tuesday, 22 December 2015

STEPS TO INSTALL NS2 ON MAC

Now a days, MAC OS conquering the world. So it is needed to adapt software to be compatible with MAC OS. Older NS2 versions are not compatible with this and also installing is little bit harder because of necessity of setting and configuring too many setup and configuration files. But after researches and latest upgrades, it is easy to install new version of ns2[ns2.35 RC8] on mac os.  For installing ns2, we need a developer package called as "XCODE". And we can download it easily from apple developer website http://developer.apple.com/xcode/ 
So, first download xcode and after that download NS2 version from following link; http://www.isi.edu/nsnam/dist/release-2.35/RC8/

Installation Steps

1. Download and install xcode.

2. Download ns-2.35-RC8.tar.gz.and untar it using command.

3. Execute the command ./install inside the directory i.e 

    cd Desktop  
    cd ns-allinone-2.35-RC8
    ./install

The installation procedure will take a few minutes..........


4. After compleating the installation type the following command in the command window

    gedit ~/.bashrc

5. Now an editor window appears,please copy and paste the follwing codes

export PATH=$PATH:/home/user/Desktop/ns-allinone-2.35-RC8/bin:/home/user/Desktop/ns-allinone-2.35-RC8/tcl8.5.8/unix:/home/user/Desktop/ns-allinone-2.35-RC8/tk8.5.8/unix

and also one more path called LD_LIBRARY_PATH
export LD_LIBRARY_PATH= <paths>

6. Save and close the text editor and then type the following command on the terminal

    source ~/.bashrc

7. Close the terminal window and start a new terminal window and now change the directory to ns-2.35 and validate ns-2.35 by exicuting the following command ( it takes 30 to 45 minutes)

    cd ns-2.35
    ./validate

8.  If the installation is successful, then you will be able to see % at the command prompt while typing the following command

    ns

9. Now type

    exit

Monday, 14 December 2015

CONTIKIi OS WITH COOJA SIMULATOR: A Framework For IOT Simulation

Contiki is an open source OS for networked and memory constrained systems with a focus on low power wireless Internet of things devices. It mainly deals with tiny low cost micro controllers and sensors which are connect to the internet. The major use of contiki is that street lighting systems, sound monitoring for smart cities, radiation monitoring systems, and alarm systems. Contiki is preffered because it supports various internet standards , dedicated hardwares, rapid developments, active community for help and also big commercial and customer support with open source licence. This was created by Adam Dunkels in 2002 and further development were done by Texas Instruments, Atmel, Cisco, ENEA, ETH Zurich, Redwire, RWTH Aachen University, Oxford University, SAP, Sensinode, Swedish Institute of Computer Science, ST Microelectronics, Zolertia, and many others. The name Contiki comes from Thor Heyerdahl's famous Kon-Tiki raft. Despite providing multitasking and a built-in TCP/IP stack, Contiki only needs about 10 kilobytes of RAM and 30 kilobytes of ROM. A full system, complete with a graphical user interface, needs about 30 kilobytes of RAM.

Instant Contiki is an entiredevelopment environment for contiki and it is a linux based virtual machine and that runs in VMWare Player. It has development tools, compilers, and simulators used in Contiki development installed. In real, contiki is a complex software, but cooja and instant contiki make it simple to install and start with.

For more, Click here

Wednesday, 18 November 2015

SETTING UP TINYOS AND NS2 IN UBUNTU-BASED SYSTEMS

TinyOS is an open source software component-based operating system and platform targeting wireless sensor networks (WSNs). TinyOS is an embedded operating system written in the nesC programming language as a set of cooperating tasks and processes. It is intended to be incorporated into smartdust. TinyOS started as a collaboration between the University of California, Berkeley in co-operation with Intel Research and Crossbow Technology, and has since grown to be an international consortium, the TinyOS Alliance.

INSTALL TINY OS

To get a copy of TinyOs and its dependencies.
sudo apt-add-repository "deb http://tinyos.stanford.edu/tinyos/dists/ubuntu natty main"
apt-get update
apt-get install tinyos-2.1.2 python-dev automake subversion g++

Now we have the dependencies we can get a more up-to-date version.
cd ~
mkdir -p local/src
cd local/src
svn checkout http://tinyos-main.googlecode.com/svn/trunk/ tinyos-2.x

cd tinyos-2.x/tools
./Bootstrap
./configure --prefix=$HOME/local
make all
make install

Add to bottom of .profile
export PATH=$HOME/local/bin:$PATH
export TOSROOT=$HOME/local/src/tinyos-2.x
export TOSDIR=$TOSROOT/tos
export MAKERULES=$TOSROOT/support/make/Makerules
export CLASSPATH=$TOSROOT/support/sdk/java/tinyos.jar:.
export PYTHONPATH=.:$TOSROOT/support/sdk/python:$PYTHONPATH
export PATH=$TOSROOT/support/sdk/c:$PATH
export MOTECOM=serial@/dev/ttyUSB0:115200

For AODV
Extract system and interfaces from NST-AODV.tar.gz into ~/local/src/tinyos-2.x/tos
Extract libraries into ~/local/src/tinyos-2.x/tos/system

Copy over modified files
To reject packets with failed CRC errors
Modify $TOSROOT/support/sdk/python/tos.py
if crc != packet_crc:
    print "Warning: wrong CRC! %x != %x %s" % (crc, packet_crc, ["%2x" % i for i in packet])
    return None

For permission to write to the USB port
sudo usermod -a -G dialout USERNAME

Errors

Fatal error: Python.h
If you get /opt/tinyos-2.1.1/tos/lib/tossim/tossim_wrap.cxx:139:20: fatal error: Python.h: No such file or directory compilation terminated.
Change PYTHON_VERION from 2.5 to 2.7 in /opt/tinyos-2.1.1/support/make/sim.extra

No permissions to write to the USB port
Either just chmod 777 the USB port, however this needs to be done each time the device is plugged in or you can add the current user to the dialout group.

NST-AODV
In AODV.h put "#include <message.h>"
Make sure the code you are compiling has "component PrintfC"

Contiki

Install guide

Summary of https://github.com/g-oikonomou/contiki-sensinode/wiki/Prepare-your-System
Grab the latest tarball of the SDCC source from http://sourceforge.net/projects/sdcc/files/snapshot_builds/sdcc-src/ and extract the folder somewhere. Now do the following.
cd SDCC
wget https://github.com/g-oikonomou/contiki-sensinode/wiki/contiki-sdcc.patch
patch -p0 < contiki-sdcc.patch
sudo apt-get install libboost-graph-dev flex bison
./configure --disable-gbz80-port --disable-z80-port --disable-ds390-port --disable-ds400-port --disable-pic14-port --disable-pic16-port --disable-hc08-port --disable-r2k-port --disable-z180-port --disable-sdcdb --disable-ucsim
make
sudo make install
cd ..
git clone https://github.com/g-oikonomou/contiki-sensinode.git
cd contiki-sensinode/examples/cc2530dk/
make

All done!

NS-2

I have currently implemented a Ns-2 application, aimed to connect Ns-2 which is written in C++ and Tcl to Python in order to provide a simple way to develop scenarios.

Ubuntu 10.10 Installation
If it cant find sources add 'deb-src http://uk.archive.ubuntu.com/ubuntu/ oneiric universe' to '/etc/apt/sources.list'.
sudo apt-get build-dep ns2
apt-get source ns2
cd ns2-2.35~RC6
gedit ./common/mobilenode.cc
gedit Makefile.in
./configure
make

Self-Defined Packets
Some programming tips for applications which are defining their own packet structures is to include 'agent_->set_pkttype(PT_CBR);' into the body of the application. I think this is only needed if the underlying agent is UDP, as this will tag all the packet types as UDP, which are classified as non-data packets, and thus will not cause routing protocols such as AODV to attempt route recovery.
802.15.4 Broadcast Bug
Another interesting bug that I found was when causing 20 nodes in the same proximity to broadcast at the exact same instant, whilst using the 802.15.4 physical layer.
This causes a 'Program received signal SIGFPE, Arithmetic exception' error, which is at 'lq = (int)(tmpf * 128);' in 'wpan/p802_15_4phy.cc:499'.
The line before this calculates tmpf which is 'tmpf = p->txinfo_.RxPr/RXThresh_;', with RxPr being in watts (according to here).
Normally this is around 0.000192w, but in this case jumps to 0.281838w, which then causes an error when later cast to an integer. This could perhaps be fixed by checking the overflow condition first, however simply removing the highly unlikely simultaneous broadcasting should do the trick.
802.15.4 AODV Sending Limit
So all seems well, however after some time my simulations just stopped receiving packets. This was interesting as it's the same sequence of data being sent at the same time intervals every period. After some investigation I found a way to make the simulation work, but I'm not sure of the side effects.
In p802_15_4phy.cc, on line 509 do a check to see if HDR_LRWPAN(p)->rxTotPower == 0 and if it is set lq2 to 255. This is due to the following step sometimes causing a division by 0 error on this line.
In the same file, on line 772 override the "else if (p != rxPkt)" by putting && false in the if, or similar. According to the comment this section checks if the packet is corrupted or un-detectable, so this modification will most likely have side effects, but for now it works.
Other Fixes
For the random TCL error below when using 802.11 comment out 'tcl.evalf("%s reset-state", str);' at common/mobilenode.cc:205
_o1725 off
ns: _o1728 reset-state: 
(_o1728 cmd line 1)
invoked from within
"_o1728 cmd reset-state"
invoked from within
"catch "$self cmd $args" ret"
invoked from within
"if [catch "$self cmd $args" ret] {
set cls [$self info class]
global errorInfo
set savedInfo $errorInfo
error "error when calling class $cls: $args" $..."
(procedure "_o1728" line 2)
(SplitObject unknown line 2)
invoked from within
"_o1728 reset-state"
Still working on the remaining 802.15.4 errors.
Quick install guide
apt-get source ns2
apt-get package-dep ns2
gedit ns.../common/mobilenode.cc
gedit Makefile.in
./configure
make

For More: Click here
For TinyOS Programming, Click here




Friday, 11 September 2015

CONGESTION WINDOW "cwnd" IN NS2

In TCP Networks, the most important factor that determines behavior is its congestion window size. In NS2, we can handle it with using cwnd command. In NS, every TCP type classes have a variable named "cwnd" that contains the congestion window size of the TCP Module. In here we can use 'set' command to return a value. 

We can write it as;
set  tcp1  [new  Agent/TCP/Reno]
set  cwnd1  [ $tcp1  set  cwnd_ ]

To obtain TCP's CWND value frquently;

  • We can easily make the NS simulation system repeatedly read the value (say, after every 0.1 sec of simulation time).
  • Schedule a read operation repeatedly

Proc plotWindow {tcpSource outfile} {
     global ns

     set now [$ns now]
     set cwnd [$tcpSource set cwnd_]

  #  Print TIME CWND   for  gnuplot to plot progressing on CWND   
     puts  $outfile  "$now $cwnd"

     $ns at [expr $now+0.1] "plotWindow  $tcpSource  $outfile"
  }

  • The procedure plotWindow takes a paramter tcpSource which is a TCP agent.So you can use the procedure to plot the CWND from any number of TCP flows.


  • The procedure plotWindow takes an output file ID outfile.You should first open an output file (or use "stdout") in the main program.

Examining progressing of CWND in TCP (Reno)

#Make a NS simulator   
  set ns [new Simulator]

  # Define a 'finish' procedure
  proc finish {} {
     exit 0
  }

  # Create the nodes:
  set n0 [$ns node]
  set n1 [$ns node]
  set n2 [$ns node]
  set n3 [$ns node]
  set n4 [$ns node]
  set n5 [$ns node]

  # Create the links:
  $ns duplex-link $n0 $n2   2Mb  10ms DropTail
  $ns duplex-link $n1 $n2   2Mb  10ms DropTail
  $ns duplex-link $n2 $n3 0.3Mb 200ms DropTail
  $ns duplex-link $n3 $n4 0.5Mb  40ms DropTail
  $ns duplex-link $n3 $n5 0.5Mb  30ms DropTail

  # Add a TCP sending module to node n0
  set tcp1 [new Agent/TCP/Reno]
  $ns attach-agent $n0 $tcp1

  # Add a TCP receiving module to node n4
  set sink1 [new Agent/TCPSink]
  $ns attach-agent $n4 $sink1

  # Direct traffic from "tcp1" to "sink1"
  $ns connect $tcp1 $sink1

  # Setup a FTP traffic generator on "tcp1"
  set ftp1 [new Application/FTP]
  $ftp1 attach-agent $tcp1
  $ftp1 set type_ FTP               (no necessary)

  # Schedule start/stop times
  $ns at 0.1   "$ftp1 start"
  $ns at 100.0 "$ftp1 stop"

  # Set simulation end time
  $ns at 125.0 "finish"    (Will invoke "exit 0")   


  ##################################################
  ## Obtain CWND from TCP agent
  ##################################################

  proc plotWindow {tcpSource outfile} {
     global ns

     set now [$ns now]
     set cwnd [$tcpSource set cwnd_]

  ###Print TIME CWND   for  gnuplot to plot progressing on CWND
     puts  $outfile  "$now $cwnd"

     $ns at [expr $now+0.1] "plotWindow $tcpSource  $outfile"
  }

  $ns  at  0.0  "plotWindow $tcp1  stdout"   // Start the probe !!    


  # Run simulation !!!!
  $ns run


his NS Prog prints the (time, cwnd) to the terminal: click here
This NS Prog prints the (time, cwnd) to the output file "WinFile": click here

To plot the window progressing from "winfile", do:

UNIX>> gnuplot
gnuplot>> plot "WinFile" using 1:2 title "Flow 1" with lines 1

Note:
In case you wonder why the cwnd plot look so different, It's because the setting of some parameters.
Add the following statements to the simulation to get the one I used in class:

  # ########################################################
  # Set Queue Size of link (n2-n3) to 10 (default is 50 ?)
  # ########################################################
  $ns queue-limit $n2 $n3 10


  # ########################################################
  # TCP parameters:
  # ########################################################    
  $tcp1 set window_ 8000
  $tcp1 set packetSize_ 552

This NS Prog will draw the CWND: click here

Postscript: Analyzing multiple TCP flows

The easiest way to analyze the behavior of multiple TCP is to open one file to store the progression of one TCP agent's variable values.

 TCP Agents

  set tcp1 [new Agent/TCP/Reno]
  ...
  set tcp2 [new Agent/TCP/Reno]
  ...


  set outfile1  [open  "WinFile1"  w]
  set outfile2  [open  "WinFile2"  w]


  $ns  at  0.0  "plotWindow $tcp1  $outfile1"

  $ns  at  0.0  "plotWindow $tcp2  $outfile2"     

Plot data of  TCP 1 will be store in file "WinFile1"

Plot data of  TCP 2 will be store in file "WinFile2"

Friday, 4 September 2015

NETWORK EMULATOR: AN OVERVIEW

Emulators are characters with the emulation ability.Emulation means the ability to introduce the simulator into a live situation/network. Special objects within the simulator are capable of introducing live traffic into the simulator and injecting traffic from the simulator into the live network. There are two primary types of uses for such a facility, depending on whether the simulator appears to end stations as a router or as another end station. In the first case, live traffic can pass through the simulator (transparently to endpoints) and be affected by objects within the simulation, or by other traffic on the live network. In the second case, the simulator can include traffic sources or sinks that communicate with real-world entities. The first type of use is currently more developed than the second type.
The emulation facility can be subdivided into two modes:
  • opaque mode -- live data treated as opaque data packets
  • protocol mode -- live data may be interpreted/generated by simulator

In opaque mode, the simulator treats network data as uninterpreted packets. In particular, real-world protocol fields are not directly manipulated by the simulator. In opaque mode, live data packets may be dropped, delayed, re-ordered, or duplicated, but because no protocol processing is performed, protocol-specific traffic manipulation scenarios (e.g. ``drop the TCP segment containing a re transmission of sequence number 23045'') may not be performed. In protocol mode, the simulator is able to interpret and/or generate live network traffic containing arbitrary field assignments.
The interface between the simulator and live network is provided by a collection of objects including tap agents and network objects. Tap agents embed live network data into simulated packets and vice-versa. Network objects are installed in tap agents and provide an entry point for the sending and receipt of live data. Figure 1 illustrates how these objects are used for emulation. Both objects are described in the following sections.
 Interaction of emulator objects with the simulator

When using the emulation mode, a special version of the system scheduler is used: the RealTime scheduler. This scheduler uses the same underlying structure as the standard calendar-queue based scheduler, but ties the execution of events to real-time.
  • OPAQUE MODEL
 Packets are passed through the simulator without being interpreted
The simulator acts like a router allowing real-world traffic to be passed through without being manipulated. The ns packet contain a pointer to the network packet. Network packets may be dropped, delayed, re-ordered or duplicated by the simulator. Opaque mode is useful in evaluating the behavior of real-world implementations when subjected to adverse network conditions that are not protocol specific.
  • PROTOCOL MODEL
Packets are generated by a TCP agent that interacts transparently with a real-world TCP server.


The simulator is used as an end-point to generate TCP traffic. A TCP agent within ns interacts with a real-world TCP server and can receive data from the external application. nse allow supports ICMP, ARP and TCP NAT agents. The protocol mode can be used for end to end application testing, protocol and conformance testing.

Real-Time Scheduler
The real-time scheduler implements a soft real-time scheduler which ties event execution within the simulator to real time. Provided sufficient CPU horsepower is available to keep up with arriving packets, the simulator virtual time should closely track real-time. If the simulator becomes too slow to keep up with elapsing real time, a warning is continually produced if the skew exceeds a pre-specified constant ``slop factor'' (currently 10ms).

Tap Agents
The class TapAgent is a simple class derived from the base Agent class. As such, it is able to generate simulator packets containing arbitrarily-assigned values within the ns common header. The tap agent handles the setting of the common header packet size field and the type field. It uses the packet type PT_LIVE for packets injected into the simulator. Each tap agent can have at most one associated network object, although more than one tap agent may be instantiated on a single simulator node.

Network Objects
Network objects provide access to a live network (or to a trace file of captured network packets). There are several forms of network objects, depending on the protocol layer specified for access to the underlying network, in addition to the facilities provided by the host operating system. Use of some network objects requires special access privileges where noted. Generally, network objects provide an entrypoint into the live network at a particular protocol layer (e.g. link, raw IP, UDP, etc) and with a particular access mode (read-only, write-only, or read-write). Some network objects provide specialized facilities such as filtering or promiscuous access (i.e. the pcap/bpf network object) or group membership (i.e. UDP/IP multicast). The C++ class Network is provided as a base class from which specific network objects are derived. Three network objects are currently supported: pcap/bpf, raw IP, and UDP/IP. Each are described below.

Pcap/BPF Network Objects
These objects provide an extended interface to the LBNL packet capture library (libpcap). The pcap library is available from LBNL here. This library provides the ability to capture link-layer frames in a promiscuous fashion from network interface drivers (i.e. a copy is made for those programs making use of libpcap). It also provides the ability to read and write packet trace files in the ``tcpdump'' format. The extended interface provided by ns also allows for writing frames out to the network interface driver, provided the driver itself allows this action. Use of the library to capture or create live traffic may be protected; one generally requires at least read access to the system's packet filter facility which may need to be arranged through a system administrator.
The packet capture library works on several UNIX-based platforms. It is optimized for use with the Berkeley Packet Filter (BPF) and provides a filter compiler for the BPF pseudomachine machine code. On most systems supporting it, a kernel-resident BPF implementation processes the filter code, and applies the resulting pattern matching instructions to received frames. Those frames matching the patterns are received through the BPF machinery; those not matching the pattern are otherwise unaffected. BPF also supports sending link-layer frames. This is generally not suggested, as an entire properly-formatted frame must be created prior to handing it off to BPF. This may be problematic with respect to assigning proper link-layer headers for next-hop destinations. It is generally preferable to use the raw IP network object for sending IP packets, as the system's routing function will be used to determine proper link-layer encapsulating headers.

Pcap/File Network Objects
These objects are similar to the Pcap/BPF objects, except that network data is taken from a trace file rather than the live network. As such, the notion of promiscuous mode and the naming of a particular interface (available to the BPF objects) are not available for the file objects. In addition, the ability to create trace files is still under development. This facility will provide the ability to create tcpdump-compatible trace files.

IP Network Objects
These objects provide raw access to the IP protocol, and allow the complete specification of IP packets (including header). The implementation makes use of a raw socket. In most UNIX systems, access to such sockets requires super-user privileges. In addition, the interface to raw sockets is somewhat less standard than other types of sockets. The class Network/IP provides raw IP functionality plus a base class from which other network objects implementing higher-layer protocols are derived.

UDP/IP Network Objects
These objects provide access to the system's UDP implementation along with support for IP multicast group membership operations.

Courtesy: NS2 Official

Thursday, 30 July 2015

WI-MAX MODULE FOR NS 2.28 SIMULATOR

Introduction
The Network Simulator 2 (NS-2) is a popular discrete event simulator target at networking research. This tool can suport simulation of TCP, routing, and MAC protocols over wired and wireless networks. Although it's possible to simulate wireless local area network (IEEE 802.11), ad hoc networks and satellites networks, ns does not provide a WiMAX module. This project implements a WiMAX module based on the IEEE 802.16 standard for the ns-2 simulator, release 2.28. The focus of this implementation is the MAC layer and its mechanisms for bandwidth allocation and QoS support. The module implements the 802.16 five service flow types and their bandwidth request/grant mechanisms; moreover, it allows users to configure the QoS requirements of applications. Service flows are modeled by finite sate machines that capture how each service type react to different events. This module supports TDD mode and PMP topology. The wireless channel available in the ns-2 simulator is used. The module design was based on a module (http://portal.acm.org/citation.cfm?id=1273047) designed to simulate the DOCSIS standard. Although code reuse was possible, several modifications in the DOCSIS module code were necessary to make it compliant to the IEEE 802.16 standard.

Installation

To install the patch, follow the instructions below:

  • Download the software ns-allinone-2.28 package
  • Download the latest ns-2 WiMAX module source code.
  •  Unzip the ns-2 WiMAX module source code file.
  • Put the files from "mac" directory into ns-allinone-2.28\ns-2.28\mac.
  • Put the files which are in common and tcl respectively into ns-allinone-2.28\ns-2.28\common and ns-allinone-2.28\ns-2.28\tcl.
  • Modify the Makefile.in as follows;After the sentence mac/mac-802_3.o add:
  1. mac/mac-802_16-base.o mac/mac-802_16-ss.o mac/mac-802_16-bs.o \
  2. mac/mac-802_16-FSM.o mac/mac-802_16-timers.o \

  • Go to the ns-allinone-2.28/ns-2.28 directory and execute "./configure", "make clean" and "make".

Download


Documentation
The paper "Simulator for WiMAX networks", accepted for publication in Simulation Modelling Practice and Theory, presents a detailed description for the WiMAX module.
Description of the WiMAX module available from the IEEE Xplore Digital Library and presented at PIMRC 2007, Athens, Greece.
Document of the WiMAX module implementation - Download pdf or View html
Description of the uplink scheduler implemented in the WiMAX module available from the IEEE Xplore Digital Library and presented at GLOBECOM 2007, Washington DC, USA.

For More, Click Here

Friday, 24 July 2015

DRIVER LESS CARS...........TESTING STARTED......!!!!

Imagine a town with crosswalks but no pedestrians, cars and trucks but no drivers. Welcome to Mcity, a fake "town" built by researchers who are testing out the driverless cars of the future.
The controlled test environment, which opened today (July 20) at the University of Michigan (U-M) in Ann Arbor, covers 32 acres (the size of about 24 football fields) and contains all the trappings of a real suburb or small city. There is an entire network of roads lined with sidewalks, streetlights, stop signs and traffic signals. There's even a "downtown" area complete with fake building facades and outdoor dining areas.The idea behind Mcity is simple: test out new driverless car innovations in a human-free environment before these technologies are unleashed in the real world."Mcity is a safe, controlled, and realistic environment where we are going to figure out how the incredible potential of connected and automated vehicles can be realized quickly, efficiently and safely," Peter Sweatman, director of the Mobility Transformation Center (MTC) at U-M, said in a statement.
The roads of Mcity are built to stand up to "rigorous, repeatable" testing, according to MTC officials. While Mcity drivers don't have to contend with real pedestrians, there will be one mechanical foot-traveler (a robotlike machine named Sebastian) that steps out into traffic to see whether the automated cars can hit the brakes in time. The simulated city also features a traffic circle, a bridge, a tunnel, some unpaved roads, and even a four-lane highway with entrance and exit ramps, according to a report by Bloomberg Business.
In addition to evaluating fully automated, or driverless, cars, the researchers also hope to test out so-called connected vehicles within Mcity's limits. Connected cars can either communicate with one another (vehicle-to-vehicle control, or V2V) or with pieces of equipment, such as traffic lights, that are located near roadways (vehicle-to-infrastructure control, or V2I).
Even the smallest details of Mcity have been planned out in advance to replicate conditions that connected and automated vehicles could face in the real world. For example, there are street signs covered up with graffiti, and faded yellow and white lane markings line the streets.
Mcity is just one part of a much larger project that MTC and its partner organizations are establishing in an effort to get a whole fleet of connected and driverless cars on the road in Ann Arbor by 2021. In addition to the fake city, MTC is also continuing to launch connected and semi-autonomous cars on real roadways. Eventually, the University of Michigan and the Michigan Department of Transportation said they hope to put 20,000 connected cars on the roads of southern Michigan.

Courtesy: livescience