Difference between revisions of "Avrora"
JohnRegehr (talk | contribs) |
JohnRegehr (talk | contribs) |
||
Line 33: | Line 33: | ||
= Simulating TinyOS Applications = | = Simulating TinyOS Applications = | ||
− | It is assumed that you have TinyOS 2.x installed and can build applications. | + | It is assumed that you have TinyOS 2.x installed and can build applications. First simulator a trivial single-node network: |
<pre> | <pre> | ||
Line 73: | Line 73: | ||
Total throughput: 16.543306 mhz | Total throughput: 16.543306 mhz | ||
</pre> | </pre> | ||
+ | |||
+ | Next simulate a collection of nodes: | ||
+ | |||
+ | <pre> | ||
+ | cd $TOSROOT/apps/RadioCountToLeds | ||
+ | make micaz | ||
+ | mv build/micaz/main.exe RadioCountToLeds.elf | ||
+ | java avrora.Main -platform=micaz -simulation=sensor-network -seconds=10 -monitors=leds,packet -nodecount=3 -stagger-start=1000000 RadioCountToLeds.elf | ||
+ | </pre> | ||
+ | |||
+ | It is not clear in what situations the <tt>stagger-start</tt> option is needed. Sometimes, without this option, simulations can fail to start due to all nodes being in lock-step. | ||
+ | |||
+ | The output will be voluminous and should end up with something like this: | ||
+ | |||
+ | <pre> | ||
+ | 0 72595584 <==== 00.00.00.0F.A7.0F.41.88.22.22.00.FF.FF.01.00.3F.06.00.23.CE.BB 0.660 ms | ||
+ | 1 73169483 on off on | ||
+ | 1 73169491 on on on | ||
+ | 1 73169500 off on on | ||
+ | 1 73355979 ----> 00.00.00.0F.A7.0F.41.88.23.22.00.FF.FF.01.00.3F.06.00.24.62.C1 0.660 ms | ||
+ | 0 73356225 <==== 00.00.00.0F.A7.0F.41.88.23.22.00.FF.FF.01.00.3F.06.00.24.CE.B3 0.660 ms | ||
+ | 2 73356225 <==== 00.00.00.0F.A7.0F.41.88.23.22.00.FF.FF.01.00.3F.06.00.24.CE.B3 0.660 ms | ||
+ | ============================================================================== | ||
+ | Simulated time: 73728000 cycles | ||
+ | Time for simulation: 4.349 seconds | ||
+ | Total throughput: 50.85859 mhz | ||
+ | Throughput per node: 16.952862 mhz | ||
+ | =={ Packet monitor results }================================================== | ||
+ | Node sent (b/p) recv (b/p) corrupted (b) lostinMiddle(p) | ||
+ | ------------------------------------------------------------------------------ | ||
+ | 0 756 / 36 1491 / 71 0 0 | ||
+ | 1 756 / 36 1491 / 71 0 0 | ||
+ | 2 735 / 35 1491 / 71 0 0 | ||
+ | </pre> | ||
+ | |||
+ | The important bit is at the bottom, where the packet monitor is telling us that all 3 nodes have both transmitted and received packets. | ||
+ | |||
+ | = TODO = | ||
+ | |||
+ | Add sections on: | ||
+ | |||
+ | * Talking to Avrora using the serial forwarder. | ||
+ | * What monitors are available and how to use them. | ||
+ | * Troubleshooting. |
Revision as of 12:30, 21 April 2009
What is Avrora?
Avrora is a cycle-accurate simulator for sensor network programs. The MicaZ and Mica2 platforms are supported. The main Avrora web page contains a lot of good information but is not actively maintained; Avrora development has moved to Sourceforge.
Installing Avrora
Avrora works fine on Linux and Windows. The main prerequisite is a Java 5 or 6 development environment. Download the latest CVS snapshot:
cvs -d:pserver:anonymous@avrora.cvs.sourceforge.net:/cvsroot/avrora login cvs -z3 -d:pserver:anonymous@avrora.cvs.sourceforge.net:/cvsroot/avrora co -P avrora
The following will assume that you have set $AVRORA to be the absolute path to this avrora directory.
Build Avrora:
cd $AVRORA make avrora
There should not be any error messages.
Add $AVRORA/bin to your CLASSPATH. Ensure that you can run Avrora:
java avrora.Main
The output should be a bunch of usage information. On Cygwin the colors may not show up properly in which case you'll want to invoke Avrora using the -colors=false command line option.
Simulating TinyOS Applications
It is assumed that you have TinyOS 2.x installed and can build applications. First simulator a trivial single-node network:
cd $TOSROOT/apps/Blink make micaz mv build/micaz/main.exe Blink.elf java avrora.Main -platform=micaz -simulation=sensor-network -seconds=3 -monitors=leds Blink.elf
The output should be something like this:
Avrora [Beta 1.7.107] - (c) 2003-2007 UCLA Compilers Group Loading Blink.elf...[OK: 0.068 seconds] =={ Simulation events }======================================================= Node Time Event ------------------------------------------------------------------------------ 0 8006682 off off on 0 8006684 off on on 0 8006686 on on on 0 8006688 on on off 0 8006690 on off off 0 8006692 off off off 0 9793689 off off on 0 11579289 off off off 0 11579762 off on off 0 13364889 off on on 0 15150489 off on off 0 15150962 off off off 0 15151490 on off off 0 16936089 on off on 0 18721689 on off off 0 18722162 on on off 0 20507289 on on on ============================================================================== Simulated time: 22118400 cycles Time for simulation: 1.337 seconds Total throughput: 16.543306 mhz
Next simulate a collection of nodes:
cd $TOSROOT/apps/RadioCountToLeds make micaz mv build/micaz/main.exe RadioCountToLeds.elf java avrora.Main -platform=micaz -simulation=sensor-network -seconds=10 -monitors=leds,packet -nodecount=3 -stagger-start=1000000 RadioCountToLeds.elf
It is not clear in what situations the stagger-start option is needed. Sometimes, without this option, simulations can fail to start due to all nodes being in lock-step.
The output will be voluminous and should end up with something like this:
0 72595584 <==== 00.00.00.0F.A7.0F.41.88.22.22.00.FF.FF.01.00.3F.06.00.23.CE.BB 0.660 ms 1 73169483 on off on 1 73169491 on on on 1 73169500 off on on 1 73355979 ----> 00.00.00.0F.A7.0F.41.88.23.22.00.FF.FF.01.00.3F.06.00.24.62.C1 0.660 ms 0 73356225 <==== 00.00.00.0F.A7.0F.41.88.23.22.00.FF.FF.01.00.3F.06.00.24.CE.B3 0.660 ms 2 73356225 <==== 00.00.00.0F.A7.0F.41.88.23.22.00.FF.FF.01.00.3F.06.00.24.CE.B3 0.660 ms ============================================================================== Simulated time: 73728000 cycles Time for simulation: 4.349 seconds Total throughput: 50.85859 mhz Throughput per node: 16.952862 mhz =={ Packet monitor results }================================================== Node sent (b/p) recv (b/p) corrupted (b) lostinMiddle(p) ------------------------------------------------------------------------------ 0 756 / 36 1491 / 71 0 0 1 756 / 36 1491 / 71 0 0 2 735 / 35 1491 / 71 0 0
The important bit is at the bottom, where the packet monitor is telling us that all 3 nodes have both transmitted and received packets.
TODO
Add sections on:
- Talking to Avrora using the serial forwarder.
- What monitors are available and how to use them.
- Troubleshooting.