<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wsn.cse.wustl.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gwh2</id>
	<title>Cyber-Physical Systems Laboratory - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://wsn.cse.wustl.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gwh2"/>
	<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=Special:Contributions/Gwh2"/>
	<updated>2026-11-15T16:57:07Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.34.4</generator>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=CSE730x_Research_Seminar&amp;diff=1617</id>
		<title>CSE730x Research Seminar</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=CSE730x_Research_Seminar&amp;diff=1617"/>
		<updated>2011-03-11T05:30:37Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: /* Mar 11, 2011 - Greg Hackmann */ add paper&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
 | __TOC__&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
* '''Instructors:''' [http://www.cse.wustl.edu/~lu Chenyang  Lu] and [http://www.cse.wustl.edu/~roman Gruia-Catalin Roman]&lt;br /&gt;
* '''Time: Friday at 2-3:30pm, Location: Jolley 542'''&lt;br /&gt;
&lt;br /&gt;
This seminar examines fundamental and emerging concepts in concurrency and distribution by studying seminal papers and recent research results.  Broad topics of interest include models of concurrency, mobile computing, parallel architectures, sensor networks, distributed algorithms, and specialized protocols. Each semester, the seminar emphasizes different themes reflecting the current research interests of the participants.&lt;br /&gt;
&lt;br /&gt;
The theme of this semester's seminar is Wireless Sensor Networks. We will read and discuss papers from recent major conferences on mobile, wireless, and sensor networks and systems.  These conferences include:&lt;br /&gt;
&lt;br /&gt;
* SenSys ([http://sensys.acm.org/2010/index.html])&lt;br /&gt;
* IPSN ([http://ipsn.acm.org/2010/])&lt;br /&gt;
* Sigcomm ([http://conferences.sigcomm.org/sigcomm/2010/])&lt;br /&gt;
* MobiCom ([http://www.sigmobile.org/mobicom/2010/])&lt;br /&gt;
* MobiSys ([http://www.sigmobile.org/mobisys/2010/])&lt;br /&gt;
* NSDI ([http://www.usenix.org/events/nsdi11/])&lt;br /&gt;
* SOSP ([http://www.sigops.org/sosp/sosp09/])&lt;br /&gt;
* OSDI ([http://www.usenix.org/events/osdi10/index.html])&lt;br /&gt;
* RTSS ([http://www.rtss.org/])&lt;br /&gt;
* RTAS ([http://www.rtas.org/rtas2010/index.htm])&lt;br /&gt;
* Wireless Health ([http://www.wirelesshealth2010.org])&lt;br /&gt;
* BodyNets ([http://bodynets.org])&lt;br /&gt;
* BSN ([http://www.bsn2011.org])&lt;br /&gt;
&lt;br /&gt;
=== Jan 21, 2011 - Mo Sha ===&lt;br /&gt;
&lt;br /&gt;
Ian Rose and Matt Welsh, Mapping the Urban Wireless Landscape with Argos. 8th ACM Conference on Embedded Networked Sensor Systems (SenSys'10), November 2010.&lt;br /&gt;
&lt;br /&gt;
Links: [http://www.eecs.harvard.edu/~ianrose/pubs/argos-sensys10.pdf Paper]&lt;br /&gt;
Links: [http://www.eecs.harvard.edu/~ianrose/talks/argos-sensys10.ppt Slides]&lt;br /&gt;
&lt;br /&gt;
=== Jan 28, 2011  - Chengjie Wu ===&lt;br /&gt;
&lt;br /&gt;
Georg Wittenburg, Norman Dziengel, Christian Wartenburger and Jochen Schiller. A System for Distributed Event Detection in Wireless Sensor Networks. 9th ACM/IEEE International Conference on Information Processing in Sensor Networks (IPSN'10), April 2010.&lt;br /&gt;
&lt;br /&gt;
Links: [http://page.mi.fu-berlin.de/eke/wittenburg10system.pdf Paper]&lt;br /&gt;
Links: [http://page.mi.fu-berlin.de/eke/wittenburg10system_slides.pdf Slides]&lt;br /&gt;
&lt;br /&gt;
=== Feb 4, 2011 -  Greg Hackmann ===&lt;br /&gt;
&lt;br /&gt;
Dan Halperin, Wenjun Hu, Anmol Sheth, and David Wetherall. Predictable 802.11 Packet Delivery From Wireless Channel Measurements. Annual conference of the ACM Special Interest Group on Data Communication (SIGCOMM) on the applications, technologies, architectures, and protocols for computer communication (Sigcomm'10), August 2010.&lt;br /&gt;
&lt;br /&gt;
Links: [http://ccr.sigcomm.org/online/files/p159_0.pdf Paper]&lt;br /&gt;
[http://www.cs.washington.edu/homes/dhalperi/pubs/effsnr_sigcomm10_slides.pdf Slides]&lt;br /&gt;
&lt;br /&gt;
=== Feb 11, 2011 - Bo Li ===&lt;br /&gt;
&lt;br /&gt;
Fabien Massé, Julien Penders, Aline Serteyn, Martien van Bussel, and Johan Arends. Miniaturized Wireless ECG-Monitor for Real-Time Detection of Epileptic Seizures. Wireless Health 2010.&lt;br /&gt;
&lt;br /&gt;
Links: [http://portal.acm.org/citation.cfm?id=1921095&amp;amp;dl=ACM Paper]&lt;br /&gt;
&lt;br /&gt;
=== Feb 18, 2011 - Abusayeed Saifullah ===&lt;br /&gt;
Qing Yu, Jiming Chen, Yanfei Fan, Xuemin Sherman Shen, and Youxian Sun. Multi-channel assignment in wireless sensor networks: A game theoretic approach. The 29th IEEE Conference on Computer Communications (Infocom'10), March 2010.&lt;br /&gt;
&lt;br /&gt;
Links: [http://portal.acm.org/citation.cfm?id=1833687&amp;amp;dl= Paper]&lt;br /&gt;
&lt;br /&gt;
=== Feb 25, 2011 - Fei Yu ===&lt;br /&gt;
&lt;br /&gt;
Thurmon E. Lockhart, Adam T. Barth, Xiaoyue Zhang, Rahul Songra, Emaad Abdel-Rahman, and John Lach. Portable, Non-Invasive Fall Risk Assessment in End Stage Renal Disease Patients on Hemodialysis. Wireless Health 2010.&lt;br /&gt;
&lt;br /&gt;
Links: [http://portal.acm.org/citation.cfm?id=1921092&amp;amp;preflayout=tabs Paper]&lt;br /&gt;
&lt;br /&gt;
=== Mar 4, 2011 - Rahav Dor ===&lt;br /&gt;
A presentation on the Current art of Fall detection [[http://www.cse.wustl.edu/wsn/images/9/9c/Fall_detection_Rahav.pdf]]. Compiled from the following 3 research papers surveying the field:&lt;br /&gt;
&lt;br /&gt;
[[http://www.cse.wustl.edu/wsn/images/2/2d/Survey_and_Evaluation_of_Real-Time_Fall_Detection_Approaches.pdf Survey and Evaluation of Real-Time Fall Detection Approaches (High-Capacity Optical Networks and Enabling Technologies (HONET), 2009 6th International Symposium)]]&lt;br /&gt;
&lt;br /&gt;
[[http://www.cse.wustl.edu/wsn/images/3/37/Approaches_and_Principles_in_Fall_detection.pdf Approaches and Principles of Fall detection for Elderly patients (e-health Networking, Applications and Services, 2008. HealthCom 2008. 10th International Conference)]]&lt;br /&gt;
&lt;br /&gt;
=== Mar 11, 2011 - Greg Hackmann ===&lt;br /&gt;
Hyduke Noshadi, Foad Dabiri, Saro Meguerdichian, Miodrag Potkonjak and&lt;br /&gt;
Majid Sarrafzadeh. Energy Optimization in Wireless Medical Systems Using&lt;br /&gt;
Physiological Behavior. Wireless Health 2010.&lt;br /&gt;
&lt;br /&gt;
Links: [http://cs.ucla.edu/~dabiri/papers/WH-2010.pdf Paper]&lt;br /&gt;
&lt;br /&gt;
=== March 18, 2010 - N/A ===&lt;br /&gt;
&lt;br /&gt;
''Canceled due to Spring Break.'' &lt;br /&gt;
&lt;br /&gt;
=== Mar 25, 2011 - Mo Sha ===&lt;br /&gt;
&lt;br /&gt;
=== Apr 1, 2011 - Abusayeed Saifullah ===&lt;br /&gt;
&lt;br /&gt;
=== Apr 8, 2011 - Fei Yu ===&lt;br /&gt;
&lt;br /&gt;
=== Apr 15, 2011 - Chengjie Wu ===&lt;br /&gt;
&lt;br /&gt;
=== Apr 22, 2011 - Bo Li ===&lt;br /&gt;
&lt;br /&gt;
=== Apr 29, 2011 - Rahav Dor ===&lt;br /&gt;
&lt;br /&gt;
=== May 6, 2011 - ===&lt;br /&gt;
&lt;br /&gt;
=== Interesting Papers ===&lt;br /&gt;
&lt;br /&gt;
PIE in the Sky: Online Passive Interference Estimation for Enterprise WLANs Vivek Shrivastava, Shravan Rayanchu, Suman Banerjee, and Dina Papagiannaki. 8th USENIX Symposium on Networked Systems Design and Implementation (NSDI'11), March 2011.&lt;br /&gt;
&lt;br /&gt;
SpecNet: Spectrum Sensing Sans Frontieres Anand Iyer, Krishna Chintalapudi, Vishnu Navda, Ramachandran Ramjee, Venkata N. Padmanabhan, and Chandra R. Murthy. 8th USENIX Symposium on Networked Systems Design and Implementation (NSDI'11), March 2011.&lt;br /&gt;
&lt;br /&gt;
Hyduke Noshadi, Foad Dabiri, Saro Meguerdichian, Miodrag Potkonjak and Majid Sarrafzadeh. Energy Optimization in Wireless Medical Systems Using Physiological Behavior. Wireless Health 2010.&lt;br /&gt;
&lt;br /&gt;
Sidharth Nabar, Ayan Banerjee, Sandeep K.S. Gupta, and Radha Poovendran. Evaluation of Body Sensor Network Platforms: A Design Space and Benchmarking Analysis. Wireless Health 2010.&lt;br /&gt;
&lt;br /&gt;
==Previous Semesters==&lt;br /&gt;
* [[Seminar Fall 2010|Fall 2010]]&lt;br /&gt;
* [[Seminar Spring 2010|Spring 2010]]&lt;br /&gt;
* [[Seminar Fall 2009|Fall 2009]]&lt;br /&gt;
* [[Seminar Summer 2009|Summer 2009]]&lt;br /&gt;
* [[Seminar Spring 2009|Spring 2009]]&lt;br /&gt;
* [[Seminar Fall 2008|Fall 2008]]&lt;br /&gt;
* [[Seminar Summer 2008|Summer 2008]]&lt;br /&gt;
* [[Seminar Spring 2008|Spring 2008]]&lt;br /&gt;
* [[Fall 2007]]&lt;br /&gt;
* [[Summer 2007]]&lt;br /&gt;
* [[Spring 2007]]&lt;br /&gt;
* [[Fall 2006]]&lt;br /&gt;
* [[Spring 2006]]&lt;br /&gt;
* [[Fall 2005]]&lt;br /&gt;
* [[Spring 2005]]&lt;br /&gt;
* [[Fall 2004]]&lt;br /&gt;
* [[Spring 2004]]&lt;br /&gt;
* [[Fall 2003]]&lt;br /&gt;
* [[Spring 2003]]&lt;br /&gt;
* [[Fall 2002]]&lt;br /&gt;
* [http://userfs.cec.wustl.edu/~cs673/spring.2002.html Spring 2002]&lt;br /&gt;
* [http://userfs.cec.wustl.edu/~cs673/fall.2001.html Fall 2001]&lt;br /&gt;
* [http://userfs.cec.wustl.edu/~cs673/spring.2001.html Spring 2001]&lt;br /&gt;
* [[Fall 2000]]&lt;br /&gt;
* [http://userfs.cec.wustl.edu/~cs673/spring.2000.html Spring 2000]&lt;br /&gt;
* [http://cec.wustl.edu/~cs673/backUp/fall.1998.html Fall 1998]&lt;br /&gt;
* [http://cec.wustl.edu/~cs673/backUp/spring.1998.html Spring 1998]&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=CSE730x_Research_Seminar&amp;diff=1573</id>
		<title>CSE730x Research Seminar</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=CSE730x_Research_Seminar&amp;diff=1573"/>
		<updated>2011-02-02T04:34:07Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: /* Feb 4, 2011 -  Greg Hackmann */ add paper&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
 | __TOC__&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
* '''Instructors:''' [http://www.cse.wustl.edu/~lu Chenyang  Lu] and [http://www.cse.wustl.edu/~roman Gruia-Catalin Roman]&lt;br /&gt;
* '''Time: Friday at 2-3:30pm, Location: Jolley 542'''&lt;br /&gt;
&lt;br /&gt;
This seminar examines fundamental and emerging concepts in concurrency and distribution by studying seminal papers and recent research results.  Broad topics of interest include models of concurrency, mobile computing, parallel architectures, sensor networks, distributed algorithms, and specialized protocols. Each semester, the seminar emphasizes different themes reflecting the current research interests of the participants.&lt;br /&gt;
&lt;br /&gt;
The theme of this semester's seminar is Wireless Sensor Networks. We will read and discuss papers from recent major conferences on mobile, wireless, and sensor networks and systems.  These conferences include:&lt;br /&gt;
&lt;br /&gt;
* SenSys ([http://sensys.acm.org/2010/index.html])&lt;br /&gt;
* IPSN ([http://ipsn.acm.org/2010/])&lt;br /&gt;
* Sigcomm ([http://conferences.sigcomm.org/sigcomm/2010/])&lt;br /&gt;
* MobiCom ([http://www.sigmobile.org/mobicom/2010/])&lt;br /&gt;
* MobiSys ([http://www.sigmobile.org/mobisys/2010/])&lt;br /&gt;
* NSDI ([http://www.usenix.org/events/nsdi11/])&lt;br /&gt;
* SOSP ([http://www.sigops.org/sosp/sosp09/])&lt;br /&gt;
* OSDI ([http://www.usenix.org/events/osdi10/index.html])&lt;br /&gt;
* RTSS ([http://www.rtss.org/])&lt;br /&gt;
* RTAS ([http://www.rtas.org/rtas2010/index.htm])&lt;br /&gt;
&lt;br /&gt;
=== Jan 21, 2011 - Mo Sha ===&lt;br /&gt;
&lt;br /&gt;
Ian Rose and Matt Welsh, Mapping the Urban Wireless Landscape with Argos, 8th ACM Conference on Embedded Networked Sensor Systems (SenSys'10), November 2010.&lt;br /&gt;
&lt;br /&gt;
Links: [http://www.eecs.harvard.edu/~ianrose/pubs/argos-sensys10.pdf Paper]&lt;br /&gt;
Links: [http://www.eecs.harvard.edu/~ianrose/talks/argos-sensys10.ppt Slides]&lt;br /&gt;
&lt;br /&gt;
=== Jan 28, 2011  - Chengjie Wu ===&lt;br /&gt;
&lt;br /&gt;
Georg Wittenburg, Norman Dziengel, Christian Wartenburger and Jochen Schiller. A System for Distributed Event Detection in Wireless Sensor Networks. In Proceedings of the 9th ACM/IEEE International Conference on Information Processing in Sensor Networks (IPSN'10), Stockholm, Sweden.&lt;br /&gt;
&lt;br /&gt;
Links: [http://page.mi.fu-berlin.de/eke/wittenburg10system.pdf Paper]&lt;br /&gt;
Links: [http://page.mi.fu-berlin.de/eke/wittenburg10system_slides.pdf Slides]&lt;br /&gt;
&lt;br /&gt;
=== Feb 4, 2011 -  Greg Hackmann ===&lt;br /&gt;
&lt;br /&gt;
Dan Halperin, Wenjun Hu, Anmol Sheth, and David Wetherall.  Predictable 802.11 Packet Delivery From Wireless Channel Measurements.  SIGCOMM 2010.&lt;br /&gt;
&lt;br /&gt;
Links: [http://ccr.sigcomm.org/online/files/p159_0.pdf Paper]&lt;br /&gt;
[http://www.cs.washington.edu/homes/dhalperi/pubs/effsnr_sigcomm10_slides.pdf Slides]&lt;br /&gt;
&lt;br /&gt;
=== Feb 11, 2011 - Bo Li ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Feb 18, 2011 - Abu Sayeed Saifullah ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Feb 25, 2011 - Fei Yu ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Previous Semesters==&lt;br /&gt;
* [[Seminar Fall 2010|Fall 2010]]&lt;br /&gt;
* [[Seminar Spring 2010|Spring 2010]]&lt;br /&gt;
* [[Seminar Fall 2009|Fall 2009]]&lt;br /&gt;
* [[Seminar Summer 2009|Summer 2009]]&lt;br /&gt;
* [[Seminar Spring 2009|Spring 2009]]&lt;br /&gt;
* [[Seminar Fall 2008|Fall 2008]]&lt;br /&gt;
* [[Seminar Summer 2008|Summer 2008]]&lt;br /&gt;
* [[Seminar Spring 2008|Spring 2008]]&lt;br /&gt;
* [[Fall 2007]]&lt;br /&gt;
* [[Summer 2007]]&lt;br /&gt;
* [[Spring 2007]]&lt;br /&gt;
* [[Fall 2006]]&lt;br /&gt;
* [[Spring 2006]]&lt;br /&gt;
* [[Fall 2005]]&lt;br /&gt;
* [[Spring 2005]]&lt;br /&gt;
* [[Fall 2004]]&lt;br /&gt;
* [[Spring 2004]]&lt;br /&gt;
* [[Fall 2003]]&lt;br /&gt;
* [[Spring 2003]]&lt;br /&gt;
* [[Fall 2002]]&lt;br /&gt;
* [http://userfs.cec.wustl.edu/~cs673/spring.2002.html Spring 2002]&lt;br /&gt;
* [http://userfs.cec.wustl.edu/~cs673/fall.2001.html Fall 2001]&lt;br /&gt;
* [http://userfs.cec.wustl.edu/~cs673/spring.2001.html Spring 2001]&lt;br /&gt;
* [[Fall 2000]]&lt;br /&gt;
* [http://userfs.cec.wustl.edu/~cs673/spring.2000.html Spring 2000]&lt;br /&gt;
* [http://cec.wustl.edu/~cs673/backUp/fall.1998.html Fall 1998]&lt;br /&gt;
* [http://cec.wustl.edu/~cs673/backUp/spring.1998.html Spring 1998]&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=CSE730x_Research_Seminar&amp;diff=1535</id>
		<title>CSE730x Research Seminar</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=CSE730x_Research_Seminar&amp;diff=1535"/>
		<updated>2010-08-30T17:12:51Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: /* Sep 3, 2010 - Greg Hackmann */ add paper&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
 | __TOC__&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
* '''Instructors:''' [http://www.cse.wustl.edu/~lu Chenyang  Lu] and [http://www.cse.wustl.edu/~roman Gruia-Catalin Roman]&lt;br /&gt;
* '''Time: Friday at 2-3:30pm, Location: Bryan 509C'''&lt;br /&gt;
&lt;br /&gt;
This seminar examines fundamental and emerging concepts in concurrency and distribution by studying seminal papers and recent research results.  Broad topics of interest include models of concurrency, mobile computing, parallel architectures, sensor networks, distributed algorithms, and specialized protocols. Each semester, the seminar emphasizes different themes reflecting the current research interests of the participants.&lt;br /&gt;
&lt;br /&gt;
The theme of this semester's seminar is Wireless Sensor Networks. We will read and discuss papers from recent major conferences on mobile, wireless, and sensor networks and systems.  These conferences include:&lt;br /&gt;
&lt;br /&gt;
* [http://sensys.acm.org/ SenSys]&lt;br /&gt;
* IPSN ([http://portal.acm.org/citation.cfm?id=984626&amp;amp;amp;coll=portal&amp;amp;amp;dl=ACM&amp;amp;amp;CFID=26359144&amp;amp;amp;CFTOKEN=96957034 ACM Archive])&lt;br /&gt;
* MobiCom ([http://portal.acm.org/toc.cfm?id=SERIES395&amp;amp;amp;type=series&amp;amp;amp;coll=ACM&amp;amp;amp;dl=ACM&amp;amp;amp;CFID=26358907&amp;amp;amp;CFTOKEN=49744667 ACM archive])&lt;br /&gt;
* MobiSys ([http://portal.acm.org/toc.cfm?id=SERIES11190&amp;amp;amp;type=series&amp;amp;amp;coll=ACM&amp;amp;amp;dl=ACM&amp;amp;amp;CFID=26358907&amp;amp;amp;CFTOKEN=49744667 ACM archive])&lt;br /&gt;
* NSDI ([http://www.usenix.org/events/nsdi07/ USENIX Website])&lt;br /&gt;
* [http://sosp.org/ SOSP]&lt;br /&gt;
* OSDI ([http://www.informatik.uni-trier.de/%7Eley/db/conf/osdi/ Archive website])&lt;br /&gt;
* RTSS ([http://ieeexplore.ieee.org/xpl/conhome.jsp?punumber=1000619 IEEE Archive])&lt;br /&gt;
* RTAS (IEEE Archive: [http://ieeexplore.ieee.org/xpl/conhome.jsp?punumber=1000616 part1] [http://ieeexplore.ieee.org/xpl/conhome.jsp?punumber=1000621 part2])&lt;br /&gt;
&lt;br /&gt;
=== Sep 3, 2010 - Greg Hackmann ===&lt;br /&gt;
&lt;br /&gt;
On Hierarchical Routing in Wireless Sensor Networks.  Konrad Iwanicki, Maarten van Steen.  IPSN 2009.&lt;br /&gt;
&lt;br /&gt;
Links: [http://www.few.vu.nl/~iwanicki/publications/2009-04-IPSN/iwanicki-IPSN2009.pdf Paper] [http://www.few.vu.nl/~iwanicki/talks/2009-04-13-IPSN2009/ipsn.ppt Slides]&lt;br /&gt;
&lt;br /&gt;
=== Sep 10, 2010 - Chengjie Wu ===&lt;br /&gt;
&lt;br /&gt;
=== Sep 17, 2010 -  Jianli Pan ===&lt;br /&gt;
&lt;br /&gt;
=== Sep 24, 2010 -  Mo Sha ===&lt;br /&gt;
&lt;br /&gt;
=== Oct 1, 2010 - Bo Li ===&lt;br /&gt;
&lt;br /&gt;
=== Oct 8, 2010 - Abu Sayeed Saifullah ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Previous Semesters==&lt;br /&gt;
* [[Seminar Spring 2010|Spring 2010]]&lt;br /&gt;
* [[Seminar Fall 2009|Fall 2009]]&lt;br /&gt;
* [[Seminar Summer 2009|Summer 2009]]&lt;br /&gt;
* [[Seminar Spring 2009|Spring 2009]]&lt;br /&gt;
* [[Seminar Fall 2008|Fall 2008]]&lt;br /&gt;
* [[Seminar Summer 2008|Summer 2008]]&lt;br /&gt;
* [[Seminar Spring 2008|Spring 2008]]&lt;br /&gt;
* [[Fall 2007]]&lt;br /&gt;
* [[Summer 2007]]&lt;br /&gt;
* [[Spring 2007]]&lt;br /&gt;
* [[Fall 2006]]&lt;br /&gt;
* [[Spring 2006]]&lt;br /&gt;
* [[Fall 2005]]&lt;br /&gt;
* [[Spring 2005]]&lt;br /&gt;
* [[Fall 2004]]&lt;br /&gt;
* [[Spring 2004]]&lt;br /&gt;
* [[Fall 2003]]&lt;br /&gt;
* [[Spring 2003]]&lt;br /&gt;
* [[Fall 2002]]&lt;br /&gt;
* [http://userfs.cec.wustl.edu/~cs673/spring.2002.html Spring 2002]&lt;br /&gt;
* [http://userfs.cec.wustl.edu/~cs673/fall.2001.html Fall 2001]&lt;br /&gt;
* [http://userfs.cec.wustl.edu/~cs673/spring.2001.html Spring 2001]&lt;br /&gt;
* [[Fall 2000]]&lt;br /&gt;
* [http://userfs.cec.wustl.edu/~cs673/spring.2000.html Spring 2000]&lt;br /&gt;
* [http://cec.wustl.edu/~cs673/backUp/fall.1998.html Fall 1998]&lt;br /&gt;
* [http://cec.wustl.edu/~cs673/backUp/spring.1998.html Spring 1998]&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=CSE730x_Research_Seminar&amp;diff=1523</id>
		<title>CSE730x Research Seminar</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=CSE730x_Research_Seminar&amp;diff=1523"/>
		<updated>2010-04-23T21:46:36Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: Update for 4/23 paper&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
 | __TOC__&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
* '''Instructors:''' [http://www.cse.wustl.edu/~lu Chenyang  Lu] and [http://www.cse.wustl.edu/~roman Gruia-Catalin Roman]&lt;br /&gt;
* '''Time: Friday at 2-3:30pm, Location: Bryan 509C'''&lt;br /&gt;
&lt;br /&gt;
This seminar examines fundamental and emerging concepts in concurrency and distribution by studying seminal papers and recent research results.  Broad topics of interest include models of concurrency, mobile computing, parallel architectures, sensor networks, distributed algorithms, and specialized protocols. Each semester, the seminar emphasizes different themes reflecting the current research interests of the participants.&lt;br /&gt;
&lt;br /&gt;
The theme of this semester's seminar is Wireless Sensor Networks. We will read and discuss papers from recent major conferences on mobile, wireless, and sensor networks and systems.  These conferences include:&lt;br /&gt;
&lt;br /&gt;
* [http://sensys.acm.org/ SenSys]&lt;br /&gt;
* IPSN ([http://portal.acm.org/citation.cfm?id=984626&amp;amp;amp;coll=portal&amp;amp;amp;dl=ACM&amp;amp;amp;CFID=26359144&amp;amp;amp;CFTOKEN=96957034 ACM Archive])&lt;br /&gt;
* MobiCom ([http://portal.acm.org/toc.cfm?id=SERIES395&amp;amp;amp;type=series&amp;amp;amp;coll=ACM&amp;amp;amp;dl=ACM&amp;amp;amp;CFID=26358907&amp;amp;amp;CFTOKEN=49744667 ACM archive])&lt;br /&gt;
* MobiSys ([http://portal.acm.org/toc.cfm?id=SERIES11190&amp;amp;amp;type=series&amp;amp;amp;coll=ACM&amp;amp;amp;dl=ACM&amp;amp;amp;CFID=26358907&amp;amp;amp;CFTOKEN=49744667 ACM archive])&lt;br /&gt;
* NSDI ([http://www.usenix.org/events/nsdi07/ USENIX Website])&lt;br /&gt;
* [http://sosp.org/ SOSP]&lt;br /&gt;
* OSDI ([http://www.informatik.uni-trier.de/%7Eley/db/conf/osdi/ Archive website])&lt;br /&gt;
* RTSS ([http://ieeexplore.ieee.org/xpl/conhome.jsp?punumber=1000619 IEEE Archive])&lt;br /&gt;
* RTAS (IEEE Archive: [http://ieeexplore.ieee.org/xpl/conhome.jsp?punumber=1000616 part1] [http://ieeexplore.ieee.org/xpl/conhome.jsp?punumber=1000621 part2])&lt;br /&gt;
&lt;br /&gt;
=== January 22, 2010 - Chengjie Wu ===&lt;br /&gt;
&lt;br /&gt;
Paper:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Konrad Lorincz, Bor-rong Chen, Geoffrey Werner Challen, Atanu Roy Chowdhury, Shyamal Patel, Paolo Bonato and Matt Welsh. &lt;br /&gt;
&lt;br /&gt;
Mercury: A Wearable Sensor Network Platform for High-Fidelity Motion Analysis. SenSys'09. ACM, Berkeley, California, November 4-6, 2009. &lt;br /&gt;
&lt;br /&gt;
DOI= http://www.eecs.harvard.edu/~mdw/papers/mercury-sensys09.pdf &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== January 29, 2010 - Louis Thomas ===&lt;br /&gt;
&lt;br /&gt;
Paper:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Arvind Thiagarajan, Lenin Sivalingam, Katrina LaCurts, Sivan Toledo, Jakob Eriksson, Sam Madden and Hari Balakrishnan. VTrack: Accurate, Energy-Aware Traffic Delay Estimation Using Mobile Phones. SenSys'09 (Best Paper Award). ACM, Berkeley, California, November 4-6, 2009. DOI= http://web.mit.edu/arvindt/www/vtrack-cr-submission.pdf&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== February 5, 2010 - Mo Sha ===&lt;br /&gt;
&lt;br /&gt;
Paper:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Muhammad Hamad Alizai, Olaf Landsiedel, Jo Agila Bitsch Link, Stefan Goetz and Klaus Wehrle. Bursty Traffic over Bursty Links. SenSys'09. ACM, Berkeley, California, November 4-6, 2009. DOI= http://ds.informatik.rwth-aachen.de/publications/2009/pdfs/2009-11-alizai-bursty-traffic-over-bursty-links.pdf&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== February 12, 2010 - Greg Hackmann ===&lt;br /&gt;
&lt;br /&gt;
Paper:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Omprakash Gnawali, Rodrigo Fonseca, Kyle Jamieson, David Moss, and Philip Levis. Collection Tree Protocol. SenSys'09. ACM, Berkeley, California, November 4-6, 2009. DOI= http://sing.stanford.edu/pubs/sensys09-ctp.pdf&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== February 19, 2010 - Justin Wilson ===&lt;br /&gt;
&lt;br /&gt;
Paper:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Niels Brouwers, Koen Langendoen and Peter Corke. Darjeeling, A Feature-Rich VM for the Resource Poor. SenSys'09. ACM, Berkeley, California, November 4-6, 2009. DOI= http://www.es.ewi.tudelft.nl/papers/2009-Brouwers-darjeeling.pdf&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== February 26, 2010 - Abu Sayeed Saifullah ===&lt;br /&gt;
&lt;br /&gt;
Paper:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;S. Misra, G. Xue, and D. Yang. Polynomial time approximations for multi-path routing with bandwidth and delay constraints. INFOCOM'09. IEEE, Rio de Janeiro, Brazil, April 19-25, 2009. DOI= http://www.public.asu.edu/~dyang16/doc/INFOCOM2009-MultiQos.pdf&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== March 5, 2010 - Chengjie Wu ===&lt;br /&gt;
&lt;br /&gt;
Paper:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Anirudh Natarajan, Buddhika De Silva, Kok Kiong Yap and Mehul Motani. Link Layer Behavior of Body Area Networks at 2.4 GHz. Mobicom'09. ACM, Beijing, China, September 20-25, 2009. DOI= http://portal.acm.org/citation.cfm?id=1614320.1614347&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== March 12, 2010 - N/A ===&lt;br /&gt;
&lt;br /&gt;
''Canceled due to Spring Break.'' &lt;br /&gt;
&lt;br /&gt;
=== March 19, 2010 - Jianli Pan ===&lt;br /&gt;
&lt;br /&gt;
Paper:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Daniel Aguayo, John Bicket, Sanjit Biswas, Glenn Judd, Robert Morris. Link-level Measurements from an 802.11b Mesh Network. SIGCOMM'04. ACM, Portland, Oregon, August 30-September 3, 2004. DOI= http://portal.acm.org/citation.cfm?doid=1030194.1015482.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== March 26, 2010 - Louis Thomas ===&lt;br /&gt;
&lt;br /&gt;
Paper:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Jung Il Choi, Maria A. Kazandjieva, Mayank Jain and Philip Levis. The case for a network protocol isolation layer. SenSys'09. ACM, Berkeley, California, November 4-6, 2009. DOI= http://sing.stanford.edu/pubs/sensys09-fwp.pdf&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== April 2, 2010 - Justin Wilson ===&lt;br /&gt;
&lt;br /&gt;
Paper:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Tamim I. Sookoor, Timothy W. Hnat, Pieter Hooimeijer, Westley Weimer and Kamin Whitehouse. Macrodebugging: Global Views of Distributed Program Execution. SenSys'09. ACM, Berkeley, California, November 4-6, 2009. DOI= http://www.cs.virginia.edu/sookoor/docs/sookoor09macrodebugging.pdf&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
=== April 9, 2010 - Jianli Pan ===&lt;br /&gt;
&lt;br /&gt;
Paper:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Xiaofan Jiang, Minh Van Ly, Jay Taneja, Prabal Dutta and David Culler. Experiences with A High-Fidelity Wireless Building Energy Auditing Network. SenSys'09. ACM, Berkeley, California, November 4-6, 2009. DOI= http://buzzing.cs.berkeley.edu/~xjiang/papers/jiang09sensys.pdf&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
=== April 16, 2010 - N/A ===&lt;br /&gt;
&lt;br /&gt;
''Canceled due to CPS Week.''&lt;br /&gt;
&lt;br /&gt;
=== April 23, 2010 - Greg Hackmann ===&lt;br /&gt;
&lt;br /&gt;
Paper:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Gregory Hackmann, Weijun Guo, Guirong Yan, Chenyang Lu, and Shirley Dyke. Cyber-Physical Codesign of Distributed Structural Health Monitoring With Wireless Sensor Networks. ICCPS 2010.  ACM/IEEE, Stockholm, Sweden, April 13-15, 2010. DOI= http://www.cse.wustl.edu/%7Elu/papers/iccps10-shm.pdf&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== April 30, 2010 - Mo Sha ===&lt;br /&gt;
&lt;br /&gt;
==Previous Semesters==&lt;br /&gt;
* [[Seminar Fall 2009|Fall 2009]]&lt;br /&gt;
* [[Seminar Summer 2009|Summer 2009]]&lt;br /&gt;
* [[Seminar Spring 2009|Spring 2009]]&lt;br /&gt;
* [[Seminar Fall 2008|Fall 2008]]&lt;br /&gt;
* [[Seminar Summer 2008|Summer 2008]]&lt;br /&gt;
* [[Seminar Spring 2008|Spring 2008]]&lt;br /&gt;
* [[Fall 2007]]&lt;br /&gt;
* [[Summer 2007]]&lt;br /&gt;
* [[Spring 2007]]&lt;br /&gt;
* [[Fall 2006]]&lt;br /&gt;
* [[Spring 2006]]&lt;br /&gt;
* [[Fall 2005]]&lt;br /&gt;
* [[Spring 2005]]&lt;br /&gt;
* [[Fall 2004]]&lt;br /&gt;
* [[Spring 2004]]&lt;br /&gt;
* [[Fall 2003]]&lt;br /&gt;
* [[Spring 2003]]&lt;br /&gt;
* [[Fall 2002]]&lt;br /&gt;
* [http://userfs.cec.wustl.edu/~cs673/spring.2002.html Spring 2002]&lt;br /&gt;
* [http://userfs.cec.wustl.edu/~cs673/fall.2001.html Fall 2001]&lt;br /&gt;
* [http://userfs.cec.wustl.edu/~cs673/spring.2001.html Spring 2001]&lt;br /&gt;
* [[Fall 2000]]&lt;br /&gt;
* [http://userfs.cec.wustl.edu/~cs673/spring.2000.html Spring 2000]&lt;br /&gt;
* [http://cec.wustl.edu/~cs673/backUp/fall.1998.html Fall 1998]&lt;br /&gt;
* [http://cec.wustl.edu/~cs673/backUp/spring.1998.html Spring 1998]&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=Cyber-Physical_Co-Design_of_Wireless_Monitoring_and_Control_for_Civil_Infrastructure&amp;diff=1522</id>
		<title>Cyber-Physical Co-Design of Wireless Monitoring and Control for Civil Infrastructure</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=Cyber-Physical_Co-Design_of_Wireless_Monitoring_and_Control_for_Civil_Infrastructure&amp;diff=1522"/>
		<updated>2010-04-20T14:30:14Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: Added new publication and changed dead link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the wiki of the [[Structural Health Monitoring]] group at [http://www.wustl.edu Washington University in St. Louis].  This site is fairly new, so it may be a while before we have a fair number of pages here.  You can also see us at our [http://www.cse.wustl.edu/~lu/shm/ WashU page].&lt;br /&gt;
&lt;br /&gt;
== Publications ==&lt;br /&gt;
* Hackmann, G., Guo, W., Yan, G., Lu, C., and Dyke, S., &amp;quot;Cyber-Physical Codesign of Distributed Structural Health Monitoring With Wireless Sensor Networks,&amp;quot; Proceedings of First International Conference on Cyber-Physical Systems (ICCPS 2010), 2010. [[http://www.cse.wustl.edu/~lu/papers/iccps10-shm.pdf PDF]] [[http://userfs.cec.wustl.edu/~gwh2/publications/hackmann10-cyber-physical.bib BibTeX]]&lt;br /&gt;
&lt;br /&gt;
* Hackmann, G., Sun, F., Castaneda, N., Lu, C., and Dyke, S., &amp;quot;A Holistic Approach to Decentralized Structural Damage Localization Using Wireless Sensor Networks,&amp;quot; Proceedings of 29th IEEE Real-Time Systems Symposium (RTSS 2008), 2008.&lt;br /&gt;
&lt;br /&gt;
: ''Published Version'':  [[http://www.cse.wustl.edu/~lu/papers/rtss08-shm.pdf PDF]] [[http://userfs.cec.wustl.edu/~gwh2/publications/hackmann08-a-holistic.bib BibTeX]]&lt;br /&gt;
: ''Extended Technical Report'': [[http://www.cse.seas.wustl.edu/Research/FileDownload.asp?799 PDF]] [[http://userfs.cec.wustl.edu/~gwh2/publications/hackmann08-a-holistic-tr.bib BibTeX]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* WS2 - The implementation of the damage localization application for Imote2 nodes. ''(updated 2008/11/20)''&lt;br /&gt;
** [[media:ws2_2008-11-20.zip|Source Code]]&lt;br /&gt;
** [[WS2 Installation Instructions|Installation Instructions]]&lt;br /&gt;
** [[WS2 Usage Instructions|Usage Instructions]]&lt;br /&gt;
&lt;br /&gt;
== Presentations ==&lt;br /&gt;
* Hackmann, G., &amp;quot;Cyber-Physical Codesign of Distributed Structural Health Monitoring With Wireless Sensor Networks&amp;quot;, ICCPS 2010 presentation, April 13, 2010.  [[http://userfs.cec.wustl.edu/~gwh2/publications/iccps10.pptx PPTX]] [[http://userfs.cec.wustl.edu/~gwh2/publications/iccps10.pdf PDF]]&lt;br /&gt;
* Hackmann, G., &amp;quot;A Holistic Approach to Decentralized Structural Damage Localization Using Wireless Sensor Networks&amp;quot;, RTSS 2008 presentation, December 1, 2008.  [[http://userfs.cec.wustl.edu/~gwh2/publications/rtss08.pptx PPTX]] [[http://userfs.cec.wustl.edu/~gwh2/publications/rtss08.pdf PDF]]&lt;br /&gt;
* &amp;quot;Implementation of Decentralized Damage Localization in Wireless Sensor Networks,&amp;quot; by Fei Sun. MS Defense.  In partial fulfillment of a Master's Degree in Computer Science.  May 9, 2008.  Download: [[media:fei-msp.pptx|pptx]], [[media:fei-msp.pdf|pdf]]&lt;br /&gt;
&lt;br /&gt;
== Further Reading ==&lt;br /&gt;
&lt;br /&gt;
* [[What is Structural Health Monitoring?]]&lt;br /&gt;
* [[Reading List]]&lt;br /&gt;
* [[Imote2 Notes]]&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=User:Gwh2/LaTeX_Best_Practices&amp;diff=1521</id>
		<title>User:Gwh2/LaTeX Best Practices</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=User:Gwh2/LaTeX_Best_Practices&amp;diff=1521"/>
		<updated>2010-04-08T22:30:59Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: /* Citation Formatting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General ==&lt;br /&gt;
&lt;br /&gt;
Add a line break after each sentence.  This makes it much easier to deal with version control, since CVS and SVN can automatically merge changes iff they happen on different lines.&lt;br /&gt;
&lt;br /&gt;
== Hyphens vs. Dashes ==&lt;br /&gt;
&lt;br /&gt;
Complex words use a single hyphen (&amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;): &amp;lt;code&amp;gt;standards-based&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;state-of-the-art&amp;lt;/code&amp;gt;.  Ranges use an en dash (&amp;lt;code&amp;gt;--&amp;lt;/code&amp;gt;): &amp;lt;code&amp;gt;1981--2009&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1--5&amp;lt;/code&amp;gt;.  Parentheticals use an em dash (&amp;lt;code&amp;gt;---&amp;lt;/code&amp;gt;): &amp;lt;code&amp;gt;the total energy consumption --- comprised of the network, sensing, and computation costs --- at each node&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Citation Formatting ==&lt;br /&gt;
&lt;br /&gt;
Add &amp;lt;code&amp;gt;\usepackage{cite}&amp;lt;/code&amp;gt; to your preamble to get nicer formatting for multiple-key citations.&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;code&amp;gt;text~\cite{key}&amp;lt;/code&amp;gt; rather than &amp;lt;code&amp;gt;text \cite{key}&amp;lt;/code&amp;gt; to keep LaTeX from breaking sentences like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
blah blah blah text&lt;br /&gt;
[1]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The same rules holds for Figures (&amp;lt;code&amp;gt;Figure~\ref{key}&amp;lt;/code&amp;gt;), Sections (&amp;lt;code&amp;gt;Section~\ref{key}&amp;lt;/code&amp;gt;), etc.&lt;br /&gt;
&lt;br /&gt;
== Image Formatting ==&lt;br /&gt;
&lt;br /&gt;
The '''One True Template''' for inserting images is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
\begin{figure}[htbp]&lt;br /&gt;
    \centering&lt;br /&gt;
    \includegraphics[width=\columnwidth]{filename-no-extension}&lt;br /&gt;
    \caption{Figure caption}&lt;br /&gt;
    \label{fig:section:filename-no-extension}&lt;br /&gt;
\end{figure}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* LaTeX is incredibly whiny about having the image, caption, and label in that order.  Get it wrong, and parts of your paper may have funny references.  &lt;br /&gt;
* Be sure to exclude the filename extension.  That way, when a conference changes its mind and demands an .EPS rather than a .PDF, you can just convert all of your .PDF/.PNG images to .EPS, run &amp;lt;code&amp;gt;latex&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;pdflatex&amp;lt;/code&amp;gt;, and not have to change any of your LaTeX code.&lt;br /&gt;
* Starting the label with &amp;quot;fig:section:&amp;quot; helps for code completion.  (You ''are'' using an editor with code completion, right?)&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=CSE730x_Research_Seminar&amp;diff=1473</id>
		<title>CSE730x Research Seminar</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=CSE730x_Research_Seminar&amp;diff=1473"/>
		<updated>2009-11-17T20:18:02Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: /* November 20, 2009 - Greg Hackmann */ add paper + links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
 | __TOC__&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
* '''Instructors:''' [http://www.cse.wustl.edu/~lu Chenyang  Lu] and [http://www.cse.wustl.edu/~roman Gruia-Catalin Roman]&lt;br /&gt;
* '''Time: Friday at 2-3:30pm, Location: Bryan 509C'''&lt;br /&gt;
&lt;br /&gt;
This seminar examines fundamental and emerging concepts in concurrency and distribution by studying seminal papers and recent research results.  Broad topics of interest include models of concurrency, mobile computing, parallel architectures, sensor networks, distributed algorithms, and specialized protocols. Each semester, the seminar emphasizes different themes reflecting the current research interests of the participants.&lt;br /&gt;
&lt;br /&gt;
The theme of this semester's seminar is Wireless Sensor Networks. We will read and discuss papers from recent major conferences on mobile, wireless, and sensor networks and systems.  These conferences include:&lt;br /&gt;
&lt;br /&gt;
* [http://sensys.acm.org/ SenSys]&lt;br /&gt;
* IPSN ([http://portal.acm.org/citation.cfm?id=984626&amp;amp;amp;coll=portal&amp;amp;amp;dl=ACM&amp;amp;amp;CFID=26359144&amp;amp;amp;CFTOKEN=96957034 ACM Archive])&lt;br /&gt;
* MobiCom ([http://portal.acm.org/toc.cfm?id=SERIES395&amp;amp;amp;type=series&amp;amp;amp;coll=ACM&amp;amp;amp;dl=ACM&amp;amp;amp;CFID=26358907&amp;amp;amp;CFTOKEN=49744667 ACM archive])&lt;br /&gt;
* MobiSys ([http://www.sigmobile.org/mobisys/2006/ 2006], [http://portal.acm.org/toc.cfm?id=SERIES11190&amp;amp;amp;type=series&amp;amp;amp;coll=ACM&amp;amp;amp;dl=ACM&amp;amp;amp;CFID=26358907&amp;amp;amp;CFTOKEN=49744667 ACM archive])&lt;br /&gt;
* NSDI ([http://www.usenix.org/events/nsdi07/ USENIX Website])&lt;br /&gt;
* [http://sosp.org/ SOSP]&lt;br /&gt;
* OSDI ([http://www.informatik.uni-trier.de/%7Eley/db/conf/osdi/ Archive website])&lt;br /&gt;
* RTSS ([http://ieeexplore.ieee.org/xpl/conhome.jsp?punumber=1000619 IEEE Archive])&lt;br /&gt;
* RTAS (IEEE Archive: [http://ieeexplore.ieee.org/xpl/conhome.jsp?punumber=1000616 part1] [http://ieeexplore.ieee.org/xpl/conhome.jsp?punumber=1000621 part2])&lt;br /&gt;
* SIGCOMM ([http://www.sigcomm.org/ Website])&lt;br /&gt;
When choosing a paper to present, you may look through the conferences mentioned above, or view the [[List of Potential Papers|list of potential papers]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== August 28, 2009 - Abu Sayeed Saifullah ===&lt;br /&gt;
&lt;br /&gt;
''WirelessHART''&lt;br /&gt;
&lt;br /&gt;
=== September 4, 2009 - Octav Chipara ===&lt;br /&gt;
&lt;br /&gt;
''Reliable Clinical Monitoring.''&lt;br /&gt;
&lt;br /&gt;
=== September 11, 2009 - Yong Fu ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Feedback Thermal Control for Real-time Systems&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== September 18, 2009 - Chengjie Wu ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt; Miroslav Pajic and Rahul Mangharam, Anti-Jamming for Embedded Wireless Networks, IPSN 09, Apr. 2009.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Paper: [http://mlab.seas.upenn.edu/node/109]&lt;br /&gt;
&lt;br /&gt;
=== September 25, 2009 - Weijun (Vincent) Guo ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Surviving Sensor Network Software Faults  &lt;br /&gt;
Yang Chen (University of Utah), Omprakash Gnawali (USC), Maria Kazandjieva (Stanford University), Philip Levis (Stanford University), John Regehr (University of Utah)  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&amp;lt;hr&amp;gt; &lt;br /&gt;
Abstract&lt;br /&gt;
We describe Neutron, a version of the TinyOS operating system that efficiently recovers from memory safety bugs.&lt;br /&gt;
Where existing schemes reboot an entire node on an error, Neutron’s compiler and runtime extensions divide programs&lt;br /&gt;
into recovery units and reboot only the faulting unit. The TinyOS kernel itself is a recovery unit: a kernel safety violation&lt;br /&gt;
appears to applications as the processor being unavailable for 10–20 milliseconds. Neutron further minimizes safety violation cost by supporting “precious” state that persists across reboots. Application data, time synchronization state, and routing tables&lt;br /&gt;
can all be declared as precious. Neutron’s reboot sequence conservatively checks that precious state is not the source of&lt;br /&gt;
a fault before preserving it. Together, recovery units and precious state allow Neutron to reduce a safety violation’s cost&lt;br /&gt;
to time synchronization by 94% and to a routing protocol by 99:5%. Neutron also protects applications from losing data.&lt;br /&gt;
Neutron provides this recovery on the very limited resources of a tiny, low-power microcontroller.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Paper: [http://www.sigops.org/sosp/sosp09/papers/chen-sosp09.pdf pdf][http://www.cse.wustl.edu/wsn/images/3/3b/Surviving_Sensor_Network_Software_Faults.pptx my slides]&lt;br /&gt;
&lt;br /&gt;
=== October 2, 2009 - Sisu Xi ===&lt;br /&gt;
&lt;br /&gt;
=== October 9, 2009 - N/A ===&lt;br /&gt;
''Canceled due to RTAS deadline.''&lt;br /&gt;
&lt;br /&gt;
=== October 16, 2009 - N/A ===&lt;br /&gt;
&lt;br /&gt;
''Fall Break''&lt;br /&gt;
&lt;br /&gt;
=== October 23, 2009 - Louis Thomas ===&lt;br /&gt;
* The Hitchhiker's Guide to Successful Wireless Sensor Network Deployments&amp;quot; by Barrenetxea et al. &lt;br /&gt;
** Link: http://www.csce.uark.edu/~nilanb/teaching/papers/Barrenetxea.pdf&lt;br /&gt;
&lt;br /&gt;
=== October 30, 2009 - N/A ===&lt;br /&gt;
''Canceled due to IPSN deadline''&lt;br /&gt;
&lt;br /&gt;
=== November 6, 2009 - Mo Sha ===&lt;br /&gt;
&lt;br /&gt;
=== November 13, 2009 - Yong Fu ===&lt;br /&gt;
&lt;br /&gt;
=== November 20, 2009 - Greg Hackmann ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;RACNet: A High-Fidelity Data Center Sensing Network.  Chieh-Jan Mike Liang, Jie Liu, Liqian Luo, Andreas Terzis, Feng Zhao.  SenSys 2009.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Links: [http://www.cs.jhu.edu/~cliang4/public/doc/2009_SenSys_RACNet.pdf Paper], [http://www.cs.jhu.edu/~cliang4/public/doc/2009_SenSys_RACNet_Slides.pdf Slides]&lt;br /&gt;
&lt;br /&gt;
=== November 27, 2009 - N/A ===&lt;br /&gt;
''Thanksgiving Break''&lt;br /&gt;
&lt;br /&gt;
=== December 4, 2009 -  Chien-Liang Fok ===&lt;br /&gt;
&lt;br /&gt;
=== December 11, 2009 - Abu Sayeed Saifullah ===&lt;br /&gt;
&lt;br /&gt;
=== December 18, 2009 - N/A ===&lt;br /&gt;
&lt;br /&gt;
''Winter Break''&lt;br /&gt;
&lt;br /&gt;
==Previous Semesters==&lt;br /&gt;
* [[Seminar Summer 2009|Summer 2009]]&lt;br /&gt;
* [[Seminar Spring 2009|Spring 2009]]&lt;br /&gt;
* [[Seminar Fall 2008|Fall 2008]]&lt;br /&gt;
* [[Seminar Summer 2008|Summer 2008]]&lt;br /&gt;
* [[Seminar Spring 2008|Spring 2008]]&lt;br /&gt;
* [[Fall 2007]]&lt;br /&gt;
* [[Summer 2007]]&lt;br /&gt;
* [[Spring 2007]]&lt;br /&gt;
* [[Fall 2006]]&lt;br /&gt;
* [[Spring 2006]]&lt;br /&gt;
* [[Fall 2005]]&lt;br /&gt;
* [[Spring 2005]]&lt;br /&gt;
* [[Fall 2004]]&lt;br /&gt;
* [[Spring 2004]]&lt;br /&gt;
* [[Fall 2003]]&lt;br /&gt;
* [[Spring 2003]]&lt;br /&gt;
* [[Fall 2002]]&lt;br /&gt;
* [http://userfs.cec.wustl.edu/~cs673/spring.2002.html Spring 2002]&lt;br /&gt;
* [http://userfs.cec.wustl.edu/~cs673/fall.2001.html Fall 2001]&lt;br /&gt;
* [http://userfs.cec.wustl.edu/~cs673/spring.2001.html Spring 2001]&lt;br /&gt;
* [[Fall 2000]]&lt;br /&gt;
* [http://userfs.cec.wustl.edu/~cs673/spring.2000.html Spring 2000]&lt;br /&gt;
* [http://cec.wustl.edu/~cs673/backUp/fall.1998.html Fall 1998]&lt;br /&gt;
* [http://cec.wustl.edu/~cs673/backUp/spring.1998.html Spring 1998]&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=The_WUSTL_Wireless_Sensor_Network_Testbed&amp;diff=1408</id>
		<title>The WUSTL Wireless Sensor Network Testbed</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=The_WUSTL_Wireless_Sensor_Network_Testbed&amp;diff=1408"/>
		<updated>2009-08-19T19:04:58Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: Update # of motes in intro again&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align = &amp;quot;center&amp;quot;&lt;br /&gt;
 | [[Image:wsn-wustl-logo.png]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| align = &amp;quot;center&amp;quot;&lt;br /&gt;
 | Contact: [mailto:gwh2@cse.wustl.edu Greg Hackmann]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
 | __TOC__&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
To facilitate advanced research in wireless sensor network technology, we are currently in the process of deploying a wireless sensor network testbed at Washington University in St. Louis.  The testbed currently consists of 79 wireless sensor nodes (motes) placed throughout several office areas in Jolley and Bryan Hall -- i.e., several grad student offices, the graduate student lounge, several labs, and the two conference rooms.&lt;br /&gt;
&lt;br /&gt;
This document serves as an overview of the testbed setup and its current deployment.  It is a living document in the sense that it will be updated as changes to the testbed continue to be made.  In the end it will serve as a source of reference for anyone using the testbed to run sensornet related experiments. &lt;br /&gt;
&lt;br /&gt;
Having a testbed of this size is important for a number of reasons:&lt;br /&gt;
&lt;br /&gt;
* '''Only a handful of testbeds of this size exist in the world today.'''  By being one of the first to have such a testbed, we will be able to conduct experiments that others have previously been unable to run.  Our eventual goal is to make the testbed accessible through a simple web interface, opening it to users across the globe.&lt;br /&gt;
* '''Running large scale wireless sensor network experiments is hard.'''  Programming a single mote can take up to five minutes depending on the size of the binary it is being programmed with.  Without a testbed to streamline the process of programming a large number of motes, programming each mote individually can quickly become a significant bottleneck.  Furthermore, as programming typically takes place by physically attaching a mote to your local machine, deploying them afterwards also takes a significant amount of time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=&amp;quot;+1&amp;quot;&amp;gt;'''IMPORTANT:'''&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Please keep in mind that the motes deployed in the testbed only contain sensors for light, radiation, temperature, and humidity.  There are no microphones or cameras, and there is no plan to EVER include such sensors in the future. The purpose of the testbed is primarily for measuring communication characteristics of the motes and not evaluating the sensitivity or accuracy of its sensors. If you have any privacy concerns about including the testbed in your office please direct any questions to [mailto:wsn@cse.wustl.edu wsn@cse.wustl.edu].&lt;br /&gt;
&lt;br /&gt;
==Testbed Setup==&lt;br /&gt;
Our testbed deployment is based on the [http://www.tkn.tu-berlin.de/publications/papers/real04f-handziski.pdf TWIST architecture] originally developed by the telecommunications group ([http://www.tkn.tu-berlin.de/ TKN]) at the Technical University of Berlin.  The acronmym TWIST stands for &amp;quot;TKN Wireless Indoor Sensor network Testbed&amp;quot;.  It is hierarchical in nature, consisting of three different levels of deployment: sensor nodes, microservers, and a desktop class host/server machine.  A high level view of this three tiered architecture can be seen in the figure below.&lt;br /&gt;
At the lowest tier, sensor nodes are placed throughout the physical environment in order to take sensor readings and/or perform actuation.  They are connected to microservers at the second tier through a USB infrastructure consisting of USB 2.0 compliant hubs and a set of active/passive USB cables.  Messages can be exchanged between sensor nodes and microservers over this interface in both directions.  At the third and final tier exists a dedicated server which connects to all of the microservers over an Ethernet backbone.  The server machine is used to host, among other things, a database containing information about the different sensor nodes and the microservers they are connected to.  This database minimally contains information about the connections that have been established between the sensor nodes and microservers, as well as their current locations.  The server machine is also used to provide a workable interface between the testbed and any end-users.  Users may log onto the server to gain access to the information contained in the testbed database, as well as exchange messages with nodes contained in the testbed.  The entire TWIST architecture is based on cheap, off-the-shelf hardware and uses open-source software at every tier of its deployment.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-architecture.jpg|thumb|left|300px|TWIST architecture]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Having such an architecture enables one to perform tasks not feasible in other WSN deployments. For example, debug messages from individual sensor nodes can be sent to the control station over the USB interface without interfering with a WSN application running in the network.  The USB infrastructure essentially provides an out of band means for collecting important information from each node without clogging up the wireless channel and adversely affecting any experiments being run.  This debug information can also be time stamped by the micorservers using NTP (Network Time Protocol) in order to gather statistics about what is going on at each individual point in the network at any given time.&lt;br /&gt;
&lt;br /&gt;
Programming of sensor nodes in the testbed is also made easier using the three tiered architecture, as a user simply tells the control station which sensor nodes it would like to program, and the control station does the work of distributing this request to the proper microserver.  Information about which sensor node is attached to which microserver can be obtained from the testbed database, and each request can be sent to the proper microserver using a dedicated thread of control.  These requests can then be processed by each microserver in parallel, speeding up the time required to program the entire testbed significantly.&lt;br /&gt;
&lt;br /&gt;
Individual sensor nodes in the testbed can also be disabled or enabled the USB interface.  This capability allows node failures to be simulated in the testbed environment, as well as fine tune the density of the network itself when running certain types of experiments.  The introduction of new nodes into the network can also be simulated by enabling nodes at specific times during the run of an experiment.&lt;br /&gt;
&lt;br /&gt;
All of the features described above really boil down to just one thing.  It is possible to run sophisticated experiments in the WSN testbed without ever having to physically change the layout of the testbed or interact with the individual sensor nodes that make it up.  Everything is controllable from the central server, and scripts can be written to perform countless numbers of operations involving each of the capabilites described above.&lt;br /&gt;
&lt;br /&gt;
==Existing Deployment==&lt;br /&gt;
Currently the testbed consists of 79 [http://www.xbow.com/Products/productdetails.aspx?sid=252 TelosB] motes placed throughout Bryan (48 nodes) and Jolley Hall (31 nodes).  The figure below shows the placement of these motes in the testbed.  Two motes are connected to each microserver, typically with one microserver per room.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-deployment.png|thumb|left|600px|Existing deployment]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testbed Software==&lt;br /&gt;
&lt;br /&gt;
The testbed software has a client/server architecture, plus a set of user applications that interact with the wireless testbed.  The client runs on the microservers and manages finding, programming, and communicating with the attached motes.  The server coordinates the clients and the user applications.  The user applications help the user to program, list, and communicate with motes in the system.&lt;br /&gt;
&lt;br /&gt;
The client, server, and user application software has been written mostly in Python, with some performance-critical sections written in C.  In addition, the server application interacts with a PostgreSQL database which lists the active microservers and motes.  The PostgreSQL backend is also available for user applications to store experimental data.&lt;br /&gt;
&lt;br /&gt;
===Startup===&lt;br /&gt;
The server software is automatically started as a Linux service on the testbed server machine.  The client software is also installed as a service on the microservers but is not automatically started.  A script is provided to the user which connects to the server and requests that the client be started on one or more microservers.&lt;br /&gt;
&lt;br /&gt;
When the client service is brought up, it sends a status message to the server, which marks the microserver as &amp;quot;up&amp;quot; in the database.  The microserver will also send messages listing the motes attached to its USB ports, which are likewise stored in the database.&lt;br /&gt;
&lt;br /&gt;
===Programming===&lt;br /&gt;
To program a set of motes, the user runs the &amp;quot;program.py&amp;quot; script, passing it the program binary and a description of the motes to program.  The user can select to program specific motes, all the motes attached to specific microservers, or the entire testbed.  &lt;br /&gt;
The server converts this request into a list of targeted motes.&lt;br /&gt;
&lt;br /&gt;
Once the set of motes has been determined, the server creates a binary file for each mote.  The server copies the original binary, imprints it with the mote's network address (stored in the database), and moves the new binary to the home directory of the microserver the mote is attached to.  The server then passes a request to the microserver to flash the binary onto the mote.&lt;br /&gt;
&lt;br /&gt;
When the programming completes, the microserver informs the server whether it was successful or not.  The server collects this status for every mote in the programming set, and informs the &amp;quot;program.py&amp;quot; script when the job is complete.&lt;br /&gt;
&lt;br /&gt;
The slowest part of programming a mote is flashing the binary onto the mote.  Because the flashing takes place on the microserver, we can program motes on different microservers in parallel, allowing us to program the entire testbed in the time it takes to program the motes on a single microserver.&lt;br /&gt;
&lt;br /&gt;
===Serial Communication===&lt;br /&gt;
The testbed software allows the user to send and receive serial packets through the motes' USB ports.  When a microserver discovers a new mote attached to one of its USB ports, it opens a connection to the mote's serial port.  Whenever a new serial packet is ready, the microserver reads the packet and sends it to the testbed server over the Ethernet backbone.  The testbed server forwards each packet to end-user applications which subscribe to this data.  Conversely, users may send the server requests to write a serial packet to a specific mote, which the server will forward to the corresponding microserver.&lt;br /&gt;
&lt;br /&gt;
The TinyOS SDK normally provides a &amp;quot;Serial Forwarder&amp;quot; component that allows PC applications to collect data from a locally-attached mote.  To interact with the testbed instead, the user runs the provided &amp;quot;forwarder.py&amp;quot; script, which acts as a drop-in replacement for the Serial Forwarder.  Thus, existing applications developed using the standard TinyOS SDK can be used on the testbed without modifications.&lt;br /&gt;
&lt;br /&gt;
Users may optionally use a testbed-specific Python API in place of the &amp;quot;forwarder.py&amp;quot; script.  This Python API offers new features which are not provided by the standard TinyOS SDK, such as the ability to remotely reboot motes.&lt;br /&gt;
&lt;br /&gt;
==Current Services==&lt;br /&gt;
&lt;br /&gt;
===Localization===&lt;br /&gt;
We currently have a localization service implemented in which all of the motes in the testbed act as anchor nodes in order to help localize a beacon node roaming throughout the network.  Below is a snapshot of a GUI application we have developed to visualize this localization service in action.  With the denser deployment of motes in the proposed testbed, we hope to become extremely accurate in determining the location of these beacon nodes in the network.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-localization.png|thumb|left|300px|WSN localization application]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this figure we see two beacon nodes (102 and 103) being localized to rooms (519 and 534) respectively.  The purple dots represent anchor nodes deployed in the testbed and the green lines depict which anchors have heard a message sent by one of the beacons.  The localization algorithm used is based on particle filters -- a well understood method of localization used in robotics.  We have expanded the use of the particle filter to the wireless sensor network domain.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Acknowledgments==&lt;br /&gt;
This work is supported by the NSF under a CRI grant (CNS-0708460) and an ITR grant (CCR-0325529).&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=CSE730x_Research_Seminar&amp;diff=1407</id>
		<title>CSE730x Research Seminar</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=CSE730x_Research_Seminar&amp;diff=1407"/>
		<updated>2009-08-19T18:59:11Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: /* August 14, 2009 - Greg Hackmann */ add &amp;quot;paper&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
 | __TOC__&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
* '''Instructors:''' [http://www.cse.wustl.edu/~lu Chenyang  Lu] and [http://www.cse.wustl.edu/~roman Gruia-Catalin Roman]&lt;br /&gt;
* '''Time: Friday at 2-3pm, Location: Jolley 542'''&lt;br /&gt;
&lt;br /&gt;
This seminar examines fundamental and emerging concepts in concurrency and distribution by studying seminal papers and recent research results.  Broad topics of interest include models of concurrency, mobile computing, parallel architectures, sensor networks, distributed algorithms, and specialized protocols. Each semester, the seminar emphasizes different themes reflecting the current research interests of the participants.&lt;br /&gt;
&lt;br /&gt;
The theme of this semester's seminar is Wireless Sensor Networks. We will read and discuss papers from recent major conferences on mobile, wireless, and sensor networks and systems.  These conferences include:&lt;br /&gt;
&lt;br /&gt;
* [http://sensys.acm.org/ SenSys]&lt;br /&gt;
* IPSN ([http://portal.acm.org/citation.cfm?id=984626&amp;amp;amp;coll=portal&amp;amp;amp;dl=ACM&amp;amp;amp;CFID=26359144&amp;amp;amp;CFTOKEN=96957034 ACM Archive])&lt;br /&gt;
* MobiCom ([http://portal.acm.org/toc.cfm?id=SERIES395&amp;amp;amp;type=series&amp;amp;amp;coll=ACM&amp;amp;amp;dl=ACM&amp;amp;amp;CFID=26358907&amp;amp;amp;CFTOKEN=49744667 ACM archive])&lt;br /&gt;
* MobiSys ([http://www.sigmobile.org/mobisys/2006/ 2006], [http://portal.acm.org/toc.cfm?id=SERIES11190&amp;amp;amp;type=series&amp;amp;amp;coll=ACM&amp;amp;amp;dl=ACM&amp;amp;amp;CFID=26358907&amp;amp;amp;CFTOKEN=49744667 ACM archive])&lt;br /&gt;
* NSDI ([http://www.usenix.org/events/nsdi07/ USENIX Website])&lt;br /&gt;
* [http://sosp.org/ SOSP]&lt;br /&gt;
* OSDI ([http://www.informatik.uni-trier.de/%7Eley/db/conf/osdi/ Archive website])&lt;br /&gt;
* RTSS ([http://ieeexplore.ieee.org/xpl/conhome.jsp?punumber=1000619 IEEE Archive])&lt;br /&gt;
* RTAS (IEEE Archive: [http://ieeexplore.ieee.org/xpl/conhome.jsp?punumber=1000616 part1] [http://ieeexplore.ieee.org/xpl/conhome.jsp?punumber=1000621 part2])&lt;br /&gt;
* SIGCOMM ([http://www.sigcomm.org/ Website])&lt;br /&gt;
When choosing a paper to present, you may look through the conferences mentioned above, or view the [[List of Potential Papers|list of potential papers]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== May 8, 2009 - Greg Hackmann ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Maróti, M., Kusy, B., Simon, G., and Lédeczi, Á. 2004. The flooding time synchronization protocol. In Proceedings of the 2nd international Conference on Embedded Networked Sensor Systems (Baltimore, MD, USA, November 03 - 05, 2004). SenSys '04. ACM, New York, NY, 39-49. DOI= http://doi.acm.org/10.1145/1031495.1031501 &amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== May 15, 2009 - N/A ===&lt;br /&gt;
&lt;br /&gt;
''Commencement''&lt;br /&gt;
&lt;br /&gt;
=== May 22, 2009 - Chien-Liang Fok ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Wishbone: Proﬁle-based Partitioning for Sensornet Applications, Ryan Newton,&lt;br /&gt;
Sivan Toledo, Lewis Girod, Hari Balakrishnan, Samuel Madden, To appear in ACM&lt;br /&gt;
SIGCOMM Networked Systems Design and Implementation (NSDI ’09), Boston, Mas-&lt;br /&gt;
sachusetts, April 2009.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Links: [http://www.usenix.org/events/nsdi09/tech/full_papers/newton/newton_html/index.html Paper], [http://www.usenix.org/events/nsdi09/tech/slides/newton.pdf Slides], [http://www.usenix.org/media/events/nsdi09/tech/mp3/newton.mp3 Audio]&lt;br /&gt;
&lt;br /&gt;
=== May 29, 2009 - Chien-Liang Fok ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;C.-L. Fok, G.-C. Roman, and C. Lu, Enhanced Coordination in Sensor Networks through Flexible Service Provisioning, International Conference on Coordination Models and Languages (Coordination'09), June 2009.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Links: [http://www.cs.wustl.edu/%7Elu/papers/coordination09.pdf Paper]&lt;br /&gt;
&lt;br /&gt;
=== June 5, 2009 -  Weijun (Vincent) Guo ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot;On Hierarchical Routing in Wireless Sensor Networks&amp;quot;, Konrad Iwanicki (Vrije Universiteit Amsterdam) and Maarten van Steen (Vrije Universiteit Amsterdam), IPSN'09 &amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Links: [http://www.few.vu.nl/~iwanicki/publications/2009-04-IPSN/iwanicki-IPSN2009.pdf paper] [http://www.few.vu.nl/~iwanicki/talks/2009-04-13-IPSN2009/ipsn.ppt slides]&lt;br /&gt;
&lt;br /&gt;
=== June 12, 2009 - Abu Sayeed Saifullah ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Yanjun Sun, Omer Gurewitz, and David B. Johnson, &amp;quot;RI-MAC: A Receiver Initiated Asynchronous Duty Cycle&lt;br /&gt;
MAC Protocol for Dynamic Traffic Loads in Wireless Sensor Networks&amp;quot;, in Proceedings of SenSys 2008.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== June 19, 2009 -  Yong Fu ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Jeonghwan Choi, Youngjae Kim, Anand Sivasubramaniam, Jelena Srebric, Qian Wang, Joonwon Lee, &amp;quot;A CFD-Based Tool for Studying Temperature in Rack-Mounted Servers,&amp;quot; IEEE Transactions on Computers, vol. 57, no. 8, pp. 1129-1142, August, 2008.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Links: [http://www2.computer.org/portal/web/csdl/doi/10.1109/TC.2008.52 Website]&lt;br /&gt;
&lt;br /&gt;
=== June 26, 2009 -  Greg Hackmann ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Block-switched Networks: A New Paradigm for Wireless Transport.  Ming Li, Devesh Agrawal, Deepak Ganesan, Arun Venkataramani.  NSDI 2009.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Links: [http://hop.cs.umass.edu/hopNSDI2009.pdf Paper], [http://lass.cs.umass.edu/~mingli/pubs/Hop_NSDI09_slides.pdf Slides]&lt;br /&gt;
&lt;br /&gt;
=== July 3, 2009 - N/A ===&lt;br /&gt;
&lt;br /&gt;
''Independence Day''&lt;br /&gt;
&lt;br /&gt;
=== July 10, 2009 - Chien-Liang Fok ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Matteo Ceriotti, Luca Mottola, Amy L. Murphy, Gian Pietro Picco,&lt;br /&gt;
Stefan Guna, Matteo Pozzi, Daniele Zonta, Paolo Zanon, Michele Corra.&lt;br /&gt;
Monitoring Heritage Buildings with Wireless Sensor Networks: The Torre&lt;br /&gt;
Aquila Deployment.  IPSN SPOTS 2008.  Best Paper Award.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Links: [http://www.sics.se/~luca/papers/ceriotti09monitoring.pdf Paper], [http://www.st.ewi.tudelft.nl/~koen/wsn/2009/slides13.pdf Slides]&lt;br /&gt;
&lt;br /&gt;
=== July 17, 2009 - Weijun (Vincent) Guo ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''Air-dropped Sensor Network for Real-time High-fidelity Volcano Monitoring'''&lt;br /&gt;
Wen-Zhan Song, Renjie Huang, Andy Ma, Mingsen Xu, Behrooz Shirazi, &lt;br /&gt;
Washington State University, and Richard LaHusen, U.S. Geological Survey, MobiSys'09&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Links: [http://portal.acm.org/citation.cfm?id=1555816.1555847 paper] [http://www.vancouver.wsu.edu/fac/song/pub/volcano-song.ppt slides]&lt;br /&gt;
&lt;br /&gt;
=== July 24, 2009 - Octav Chipara ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;'''Link-level Measurements from an 802.11b Mesh Network'''.&lt;br /&gt;
Daniel Aguayo, John Bicket, Sanjit Biswas, Glenn Judd, Robert Morris &amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Links: [http://pdos.csail.mit.edu/~rtm/papers/p442-aguayo.pdf Paper][http://pdos.csail.mit.edu/roofnet/sigcomm-talk.ppt Slides]&lt;br /&gt;
&lt;br /&gt;
=== July 31, 2009 - Octav Chipara ===&lt;br /&gt;
&lt;br /&gt;
'''PPR: Partial Packet Recovery for Wireless Networks'''&lt;br /&gt;
Kyle Jamieson and Hari Balakrishnan&lt;br /&gt;
SigComm 2007&lt;br /&gt;
&lt;br /&gt;
Links: [http://nms.lcs.mit.edu/papers/fp315-jamieson.pdf Paper][http://nms.lcs.mit.edu/papers/ppr-sigcomm07-submit.ppt Slides]&lt;br /&gt;
&lt;br /&gt;
=== August 7, 2009 - Yong Fu ===&lt;br /&gt;
&lt;br /&gt;
=== August 14, 2009 - Greg Hackmann ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Routing Over Low power and Lossy networks (Roll) Working Group&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Links: [http://tools.ietf.org/wg/roll/ Website]&lt;br /&gt;
&lt;br /&gt;
=== August 21, 2009 - Abu Sayeed Saifullah ===&lt;br /&gt;
&lt;br /&gt;
==Previous Semesters==&lt;br /&gt;
* [[Seminar Spring 2009|Spring 2009]]&lt;br /&gt;
* [[Seminar Fall 2008|Fall 2008]]&lt;br /&gt;
* [[Seminar Summer 2008|Summer 2008]]&lt;br /&gt;
* [[Seminar Spring 2008|Spring 2008]]&lt;br /&gt;
* [[Fall 2007]]&lt;br /&gt;
* [[Summer 2007]]&lt;br /&gt;
* [[Spring 2007]]&lt;br /&gt;
* [[Fall 2006]]&lt;br /&gt;
* [[Spring 2006]]&lt;br /&gt;
* [[Fall 2005]]&lt;br /&gt;
* [[Spring 2005]]&lt;br /&gt;
* [[Fall 2004]]&lt;br /&gt;
* [[Spring 2004]]&lt;br /&gt;
* [[Fall 2003]]&lt;br /&gt;
* [[Spring 2003]]&lt;br /&gt;
* [[Fall 2002]]&lt;br /&gt;
* [http://userfs.cec.wustl.edu/~cs673/spring.2002.html Spring 2002]&lt;br /&gt;
* [http://userfs.cec.wustl.edu/~cs673/fall.2001.html Fall 2001]&lt;br /&gt;
* [http://userfs.cec.wustl.edu/~cs673/spring.2001.html Spring 2001]&lt;br /&gt;
* [[Fall 2000]]&lt;br /&gt;
* [http://userfs.cec.wustl.edu/~cs673/spring.2000.html Spring 2000]&lt;br /&gt;
* [http://cec.wustl.edu/~cs673/backUp/fall.1998.html Fall 1998]&lt;br /&gt;
* [http://cec.wustl.edu/~cs673/backUp/spring.1998.html Spring 1998]&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=File:Wsn-deployment.png&amp;diff=1406</id>
		<title>File:Wsn-deployment.png</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=File:Wsn-deployment.png&amp;diff=1406"/>
		<updated>2009-08-19T17:48:08Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: uploaded a new version of &amp;quot;Image:Wsn-deployment.png&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;New WSN deployment map&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=The_WUSTL_Wireless_Sensor_Network_Testbed&amp;diff=1405</id>
		<title>The WUSTL Wireless Sensor Network Testbed</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=The_WUSTL_Wireless_Sensor_Network_Testbed&amp;diff=1405"/>
		<updated>2009-08-19T17:47:43Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: /* Existing Deployment */ correct mote count and microserver placement info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align = &amp;quot;center&amp;quot;&lt;br /&gt;
 | [[Image:wsn-wustl-logo.png]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| align = &amp;quot;center&amp;quot;&lt;br /&gt;
 | Contact: [mailto:gwh2@cse.wustl.edu Greg Hackmann]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
 | __TOC__&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
To facilitate advanced research in wireless sensor network technology, we are currently in the process of deploying a wireless sensor network testbed at Washington University in St. Louis.  The testbed currently consists of 78 wireless sensor nodes (motes) placed throughout several office areas in Jolley and Bryan Hall -- i.e., several grad student offices, the graduate student lounge, several labs, and the two conference rooms.&lt;br /&gt;
&lt;br /&gt;
This document serves as an overview of the testbed setup and its current deployment.  It is a living document in the sense that it will be updated as changes to the testbed continue to be made.  In the end it will serve as a source of reference for anyone using the testbed to run sensornet related experiments. &lt;br /&gt;
&lt;br /&gt;
Having a testbed of this size is important for a number of reasons:&lt;br /&gt;
&lt;br /&gt;
* '''Only a handful of testbeds of this size exist in the world today.'''  By being one of the first to have such a testbed, we will be able to conduct experiments that others have previously been unable to run.  Our eventual goal is to make the testbed accessible through a simple web interface, opening it to users across the globe.&lt;br /&gt;
* '''Running large scale wireless sensor network experiments is hard.'''  Programming a single mote can take up to five minutes depending on the size of the binary it is being programmed with.  Without a testbed to streamline the process of programming a large number of motes, programming each mote individually can quickly become a significant bottleneck.  Furthermore, as programming typically takes place by physically attaching a mote to your local machine, deploying them afterwards also takes a significant amount of time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=&amp;quot;+1&amp;quot;&amp;gt;'''IMPORTANT:'''&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Please keep in mind that the motes deployed in the testbed only contain sensors for light, radiation, temperature, and humidity.  There are no microphones or cameras, and there is no plan to EVER include such sensors in the future. The purpose of the testbed is primarily for measuring communication characteristics of the motes and not evaluating the sensitivity or accuracy of its sensors. If you have any privacy concerns about including the testbed in your office please direct any questions to [mailto:wsn@cse.wustl.edu wsn@cse.wustl.edu].&lt;br /&gt;
&lt;br /&gt;
==Testbed Setup==&lt;br /&gt;
Our testbed deployment is based on the [http://www.tkn.tu-berlin.de/publications/papers/real04f-handziski.pdf TWIST architecture] originally developed by the telecommunications group ([http://www.tkn.tu-berlin.de/ TKN]) at the Technical University of Berlin.  The acronmym TWIST stands for &amp;quot;TKN Wireless Indoor Sensor network Testbed&amp;quot;.  It is hierarchical in nature, consisting of three different levels of deployment: sensor nodes, microservers, and a desktop class host/server machine.  A high level view of this three tiered architecture can be seen in the figure below.&lt;br /&gt;
At the lowest tier, sensor nodes are placed throughout the physical environment in order to take sensor readings and/or perform actuation.  They are connected to microservers at the second tier through a USB infrastructure consisting of USB 2.0 compliant hubs and a set of active/passive USB cables.  Messages can be exchanged between sensor nodes and microservers over this interface in both directions.  At the third and final tier exists a dedicated server which connects to all of the microservers over an Ethernet backbone.  The server machine is used to host, among other things, a database containing information about the different sensor nodes and the microservers they are connected to.  This database minimally contains information about the connections that have been established between the sensor nodes and microservers, as well as their current locations.  The server machine is also used to provide a workable interface between the testbed and any end-users.  Users may log onto the server to gain access to the information contained in the testbed database, as well as exchange messages with nodes contained in the testbed.  The entire TWIST architecture is based on cheap, off-the-shelf hardware and uses open-source software at every tier of its deployment.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-architecture.jpg|thumb|left|300px|TWIST architecture]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Having such an architecture enables one to perform tasks not feasible in other WSN deployments. For example, debug messages from individual sensor nodes can be sent to the control station over the USB interface without interfering with a WSN application running in the network.  The USB infrastructure essentially provides an out of band means for collecting important information from each node without clogging up the wireless channel and adversely affecting any experiments being run.  This debug information can also be time stamped by the micorservers using NTP (Network Time Protocol) in order to gather statistics about what is going on at each individual point in the network at any given time.&lt;br /&gt;
&lt;br /&gt;
Programming of sensor nodes in the testbed is also made easier using the three tiered architecture, as a user simply tells the control station which sensor nodes it would like to program, and the control station does the work of distributing this request to the proper microserver.  Information about which sensor node is attached to which microserver can be obtained from the testbed database, and each request can be sent to the proper microserver using a dedicated thread of control.  These requests can then be processed by each microserver in parallel, speeding up the time required to program the entire testbed significantly.&lt;br /&gt;
&lt;br /&gt;
Individual sensor nodes in the testbed can also be disabled or enabled the USB interface.  This capability allows node failures to be simulated in the testbed environment, as well as fine tune the density of the network itself when running certain types of experiments.  The introduction of new nodes into the network can also be simulated by enabling nodes at specific times during the run of an experiment.&lt;br /&gt;
&lt;br /&gt;
All of the features described above really boil down to just one thing.  It is possible to run sophisticated experiments in the WSN testbed without ever having to physically change the layout of the testbed or interact with the individual sensor nodes that make it up.  Everything is controllable from the central server, and scripts can be written to perform countless numbers of operations involving each of the capabilites described above.&lt;br /&gt;
&lt;br /&gt;
==Existing Deployment==&lt;br /&gt;
Currently the testbed consists of 79 [http://www.xbow.com/Products/productdetails.aspx?sid=252 TelosB] motes placed throughout Bryan (48 nodes) and Jolley Hall (31 nodes).  The figure below shows the placement of these motes in the testbed.  Two motes are connected to each microserver, typically with one microserver per room.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-deployment.png|thumb|left|600px|Existing deployment]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testbed Software==&lt;br /&gt;
&lt;br /&gt;
The testbed software has a client/server architecture, plus a set of user applications that interact with the wireless testbed.  The client runs on the microservers and manages finding, programming, and communicating with the attached motes.  The server coordinates the clients and the user applications.  The user applications help the user to program, list, and communicate with motes in the system.&lt;br /&gt;
&lt;br /&gt;
The client, server, and user application software has been written mostly in Python, with some performance-critical sections written in C.  In addition, the server application interacts with a PostgreSQL database which lists the active microservers and motes.  The PostgreSQL backend is also available for user applications to store experimental data.&lt;br /&gt;
&lt;br /&gt;
===Startup===&lt;br /&gt;
The server software is automatically started as a Linux service on the testbed server machine.  The client software is also installed as a service on the microservers but is not automatically started.  A script is provided to the user which connects to the server and requests that the client be started on one or more microservers.&lt;br /&gt;
&lt;br /&gt;
When the client service is brought up, it sends a status message to the server, which marks the microserver as &amp;quot;up&amp;quot; in the database.  The microserver will also send messages listing the motes attached to its USB ports, which are likewise stored in the database.&lt;br /&gt;
&lt;br /&gt;
===Programming===&lt;br /&gt;
To program a set of motes, the user runs the &amp;quot;program.py&amp;quot; script, passing it the program binary and a description of the motes to program.  The user can select to program specific motes, all the motes attached to specific microservers, or the entire testbed.  &lt;br /&gt;
The server converts this request into a list of targeted motes.&lt;br /&gt;
&lt;br /&gt;
Once the set of motes has been determined, the server creates a binary file for each mote.  The server copies the original binary, imprints it with the mote's network address (stored in the database), and moves the new binary to the home directory of the microserver the mote is attached to.  The server then passes a request to the microserver to flash the binary onto the mote.&lt;br /&gt;
&lt;br /&gt;
When the programming completes, the microserver informs the server whether it was successful or not.  The server collects this status for every mote in the programming set, and informs the &amp;quot;program.py&amp;quot; script when the job is complete.&lt;br /&gt;
&lt;br /&gt;
The slowest part of programming a mote is flashing the binary onto the mote.  Because the flashing takes place on the microserver, we can program motes on different microservers in parallel, allowing us to program the entire testbed in the time it takes to program the motes on a single microserver.&lt;br /&gt;
&lt;br /&gt;
===Serial Communication===&lt;br /&gt;
The testbed software allows the user to send and receive serial packets through the motes' USB ports.  When a microserver discovers a new mote attached to one of its USB ports, it opens a connection to the mote's serial port.  Whenever a new serial packet is ready, the microserver reads the packet and sends it to the testbed server over the Ethernet backbone.  The testbed server forwards each packet to end-user applications which subscribe to this data.  Conversely, users may send the server requests to write a serial packet to a specific mote, which the server will forward to the corresponding microserver.&lt;br /&gt;
&lt;br /&gt;
The TinyOS SDK normally provides a &amp;quot;Serial Forwarder&amp;quot; component that allows PC applications to collect data from a locally-attached mote.  To interact with the testbed instead, the user runs the provided &amp;quot;forwarder.py&amp;quot; script, which acts as a drop-in replacement for the Serial Forwarder.  Thus, existing applications developed using the standard TinyOS SDK can be used on the testbed without modifications.&lt;br /&gt;
&lt;br /&gt;
Users may optionally use a testbed-specific Python API in place of the &amp;quot;forwarder.py&amp;quot; script.  This Python API offers new features which are not provided by the standard TinyOS SDK, such as the ability to remotely reboot motes.&lt;br /&gt;
&lt;br /&gt;
==Current Services==&lt;br /&gt;
&lt;br /&gt;
===Localization===&lt;br /&gt;
We currently have a localization service implemented in which all of the motes in the testbed act as anchor nodes in order to help localize a beacon node roaming throughout the network.  Below is a snapshot of a GUI application we have developed to visualize this localization service in action.  With the denser deployment of motes in the proposed testbed, we hope to become extremely accurate in determining the location of these beacon nodes in the network.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-localization.png|thumb|left|300px|WSN localization application]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this figure we see two beacon nodes (102 and 103) being localized to rooms (519 and 534) respectively.  The purple dots represent anchor nodes deployed in the testbed and the green lines depict which anchors have heard a message sent by one of the beacons.  The localization algorithm used is based on particle filters -- a well understood method of localization used in robotics.  We have expanded the use of the particle filter to the wireless sensor network domain.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Acknowledgments==&lt;br /&gt;
This work is supported by the NSF under a CRI grant (CNS-0708460) and an ITR grant (CCR-0325529).&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=CSE730x_Research_Seminar&amp;diff=1387</id>
		<title>CSE730x Research Seminar</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=CSE730x_Research_Seminar&amp;diff=1387"/>
		<updated>2009-07-01T18:37:36Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: /* June 26, 2009 -  Greg Hackmann */ add paper info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
 | __TOC__&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
* '''Instructors:''' [http://www.cse.wustl.edu/~lu Chenyang  Lu] and [http://www.cse.wustl.edu/~roman Gruia-Catalin Roman]&lt;br /&gt;
* '''Time: Friday at 2-3pm, Location: Jolley 542'''&lt;br /&gt;
&lt;br /&gt;
This seminar examines fundamental and emerging concepts in concurrency and distribution by studying seminal papers and recent research results.  Broad topics of interest include models of concurrency, mobile computing, parallel architectures, sensor networks, distributed algorithms, and specialized protocols. Each semester, the seminar emphasizes different themes reflecting the current research interests of the participants.&lt;br /&gt;
&lt;br /&gt;
The theme of this semester's seminar is Wireless Sensor Networks. We will read and discuss papers from recent major conferences on mobile, wireless, and sensor networks and systems.  These conferences include:&lt;br /&gt;
&lt;br /&gt;
* [http://sensys.acm.org/ SenSys]&lt;br /&gt;
* IPSN ([http://portal.acm.org/citation.cfm?id=984626&amp;amp;amp;coll=portal&amp;amp;amp;dl=ACM&amp;amp;amp;CFID=26359144&amp;amp;amp;CFTOKEN=96957034 ACM Archive])&lt;br /&gt;
* MobiCom ([http://portal.acm.org/toc.cfm?id=SERIES395&amp;amp;amp;type=series&amp;amp;amp;coll=ACM&amp;amp;amp;dl=ACM&amp;amp;amp;CFID=26358907&amp;amp;amp;CFTOKEN=49744667 ACM archive])&lt;br /&gt;
* MobiSys ([http://www.sigmobile.org/mobisys/2006/ 2006], [http://portal.acm.org/toc.cfm?id=SERIES11190&amp;amp;amp;type=series&amp;amp;amp;coll=ACM&amp;amp;amp;dl=ACM&amp;amp;amp;CFID=26358907&amp;amp;amp;CFTOKEN=49744667 ACM archive])&lt;br /&gt;
* NSDI ([http://www.usenix.org/events/nsdi07/ USENIX Website])&lt;br /&gt;
* [http://sosp.org/ SOSP]&lt;br /&gt;
* OSDI ([http://www.informatik.uni-trier.de/%7Eley/db/conf/osdi/ Archive website])&lt;br /&gt;
* RTSS ([http://ieeexplore.ieee.org/xpl/conhome.jsp?punumber=1000619 IEEE Archive])&lt;br /&gt;
* RTAS (IEEE Archive: [http://ieeexplore.ieee.org/xpl/conhome.jsp?punumber=1000616 part1] [http://ieeexplore.ieee.org/xpl/conhome.jsp?punumber=1000621 part2])&lt;br /&gt;
&lt;br /&gt;
When choosing a paper to present, you may look through the conferences mentioned above, or view the [[List of Potential Papers|list of potential papers]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== May 8, 2009 - Greg Hackmann ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Maróti, M., Kusy, B., Simon, G., and Lédeczi, Á. 2004. The flooding time synchronization protocol. In Proceedings of the 2nd international Conference on Embedded Networked Sensor Systems (Baltimore, MD, USA, November 03 - 05, 2004). SenSys '04. ACM, New York, NY, 39-49. DOI= http://doi.acm.org/10.1145/1031495.1031501 &amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== May 15, 2009 - N/A ===&lt;br /&gt;
&lt;br /&gt;
''Commencement''&lt;br /&gt;
&lt;br /&gt;
=== May 22, 2009 - Chien-Liang Fok ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Wishbone: Proﬁle-based Partitioning for Sensornet Applications, Ryan Newton,&lt;br /&gt;
Sivan Toledo, Lewis Girod, Hari Balakrishnan, Samuel Madden, To appear in ACM&lt;br /&gt;
SIGCOMM Networked Systems Design and Implementation (NSDI ’09), Boston, Mas-&lt;br /&gt;
sachusetts, April 2009.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Links: [http://www.usenix.org/events/nsdi09/tech/full_papers/newton/newton_html/index.html Paper], [http://www.usenix.org/events/nsdi09/tech/slides/newton.pdf Slides], [http://www.usenix.org/media/events/nsdi09/tech/mp3/newton.mp3 Audio]&lt;br /&gt;
&lt;br /&gt;
=== May 29, 2009 - Chien-Liang Fok ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;C.-L. Fok, G.-C. Roman, and C. Lu, Enhanced Coordination in Sensor Networks through Flexible Service Provisioning, International Conference on Coordination Models and Languages (Coordination'09), June 2009.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Links: [http://www.cs.wustl.edu/%7Elu/papers/coordination09.pdf Paper]&lt;br /&gt;
&lt;br /&gt;
=== June 5, 2009 -  Weijun (Vincent) Guo ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot;On Hierarchical Routing in Wireless Sensor Networks&amp;quot;, Konrad Iwanicki (Vrije Universiteit Amsterdam) and Maarten van Steen (Vrije Universiteit Amsterdam), IPSN'09 &amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Links: [http://www.few.vu.nl/~iwanicki/publications/2009-04-IPSN/iwanicki-IPSN2009.pdf paper] [http://www.few.vu.nl/~iwanicki/talks/2009-04-13-IPSN2009/ipsn.ppt slides]&lt;br /&gt;
&lt;br /&gt;
=== June 12, 2009 - Abu Sayeed Saifullah ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Yanjun Sun, Omer Gurewitz, and David B. Johnson, &amp;quot;RI-MAC: A Receiver Initiated Asynchronous Duty Cycle&lt;br /&gt;
MAC Protocol for Dynamic Traffic Loads in Wireless Sensor Networks&amp;quot;, in Proceedings of SenSys 2008.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== June 19, 2009 -  Yong Fu ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Jeonghwan Choi, Youngjae Kim, Anand Sivasubramaniam, Jelena Srebric, Qian Wang, Joonwon Lee, &amp;quot;A CFD-Based Tool for Studying Temperature in Rack-Mounted Servers,&amp;quot; IEEE Transactions on Computers, vol. 57, no. 8, pp. 1129-1142, August, 2008.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Links: [http://www2.computer.org/portal/web/csdl/doi/10.1109/TC.2008.52 Website]&lt;br /&gt;
&lt;br /&gt;
=== June 26, 2009 -  Greg Hackmann ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Block-switched Networks: A New Paradigm for Wireless Transport.  Ming Li, Devesh Agrawal, Deepak Ganesan, Arun Venkataramani.  NSDI 2009.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Links: [http://hop.cs.umass.edu/hopNSDI2009.pdf Paper], [http://lass.cs.umass.edu/~mingli/pubs/Hop_NSDI09_slides.pdf Slides]&lt;br /&gt;
&lt;br /&gt;
=== July 3, 2009 - N/A ===&lt;br /&gt;
&lt;br /&gt;
''Independence Day''&lt;br /&gt;
&lt;br /&gt;
=== July 10, 2009 - Chien-Liang Fok ===&lt;br /&gt;
&lt;br /&gt;
=== July 17, 2009 - Weijun (Vincent) Guo ===&lt;br /&gt;
&lt;br /&gt;
=== July 24, 2009 - Octav Chipara ===&lt;br /&gt;
&lt;br /&gt;
=== July 31, 2009 - Abu Sayeed Saifullah ===&lt;br /&gt;
&lt;br /&gt;
=== August 7, 2009 - Yong Fu ===&lt;br /&gt;
&lt;br /&gt;
=== August 14, 2009 - Greg Hackmann ===&lt;br /&gt;
&lt;br /&gt;
=== August 21, 2009 - Octav Chipara ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Previous Semesters==&lt;br /&gt;
* [[Seminar Spring 2009|Spring 2009]]&lt;br /&gt;
* [[Seminar Fall 2008|Fall 2008]]&lt;br /&gt;
* [[Seminar Summer 2008|Summer 2008]]&lt;br /&gt;
* [[Seminar Spring 2008|Spring 2008]]&lt;br /&gt;
* [[Fall 2007]]&lt;br /&gt;
* [[Summer 2007]]&lt;br /&gt;
* [[Spring 2007]]&lt;br /&gt;
* [[Fall 2006]]&lt;br /&gt;
* [[Spring 2006]]&lt;br /&gt;
* [[Fall 2005]]&lt;br /&gt;
* [[Spring 2005]]&lt;br /&gt;
* [[Fall 2004]]&lt;br /&gt;
* [[Spring 2004]]&lt;br /&gt;
* [[Fall 2003]]&lt;br /&gt;
* [[Spring 2003]]&lt;br /&gt;
* [[Fall 2002]]&lt;br /&gt;
* [http://userfs.cec.wustl.edu/~cs673/spring.2002.html Spring 2002]&lt;br /&gt;
* [http://userfs.cec.wustl.edu/~cs673/fall.2001.html Fall 2001]&lt;br /&gt;
* [http://userfs.cec.wustl.edu/~cs673/spring.2001.html Spring 2001]&lt;br /&gt;
* [[Fall 2000]]&lt;br /&gt;
* [http://userfs.cec.wustl.edu/~cs673/spring.2000.html Spring 2000]&lt;br /&gt;
* [http://cec.wustl.edu/~cs673/backUp/fall.1998.html Fall 1998]&lt;br /&gt;
* [http://cec.wustl.edu/~cs673/backUp/spring.1998.html Spring 1998]&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=MAC_Layer_Architecture&amp;diff=1378</id>
		<title>MAC Layer Architecture</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=MAC_Layer_Architecture&amp;diff=1378"/>
		<updated>2009-06-10T02:41:45Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: Update version info to 2.1.0&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The MAC Layer Architecture (MLA) provides a component-based architecture for MAC protocols in wireless sensor networks.  MLA extends the [http://www.cse.wustl.edu/~lu/upma.html Unified Power Management Architecture] to provide the hardware-independent interfaces required by timing sensitive MAC protocols, and defines platform-independent reusable components that implement MAC layer logic on top of them.  The MLA architecture can be used to develop a large number of platform-independent MAC implementations, with little or no further effort required to adapt these implementations to new hardware platforms.&lt;br /&gt;
&lt;br /&gt;
Our current implementation of MLA is built on top of [http://docs.tinyos.net TinyOS] 2.1.0.  It currently supports platforms which use the CC2420 radio stack and has been tested on TelosB and MicaZ motes.  In addition to providing interfaces and components for building new MAC layer implementations, MLA includes implementations of five representative MAC layers:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;bmac&amp;lt;/tt&amp;gt;: a port of the BMAC-like &amp;lt;tt&amp;gt;NOACK&amp;lt;/tt&amp;gt; monolithic LPL layer to MLA&lt;br /&gt;
* &amp;lt;tt&amp;gt;xmac&amp;lt;/tt&amp;gt;: a port of the XMAC-like &amp;lt;tt&amp;gt;ACK&amp;lt;/tt&amp;gt; monolithic LPL layer to MLA&lt;br /&gt;
* &amp;lt;tt&amp;gt;scp-wustl&amp;lt;/tt&amp;gt;: a reimplementation of the SCP-MAC protocol (currently excludes some optimizations)&lt;br /&gt;
* &amp;lt;tt&amp;gt;pure-tdma&amp;lt;/tt&amp;gt;: a single-hop TDMA protocol&lt;br /&gt;
* &amp;lt;tt&amp;gt;ss-tdma&amp;lt;/tt&amp;gt;: a TDMA/CSMA hybrid protocol which implements Z-MAC's &amp;quot;slot-stealing&amp;quot; optimization&lt;br /&gt;
&lt;br /&gt;
== Publications ==&lt;br /&gt;
&lt;br /&gt;
* Klues, K., Hackmann, G., Chipara, O., and Lu, C., “A Component Based Architecture for Power-Efficient Media Access Control in Wireless Sensor Networks,” Washington University, Department of Computer Science and Engineering, St. Louis, Missouri. (published in Proceedings of [http://sensys.acm.org/2007/ 5th ACM Conference on Embedded Networked Sensor Systems (SenSys 2007)]) [[http://www.cse.wustl.edu/~lu/papers/sensys07.pdf PDF]] [[http://userfs.cec.wustl.edu/~gwh2/publications/klues07-a-component.bib BibTeX]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
MLA is available from the &amp;lt;tt&amp;gt;wustl/upma&amp;lt;/tt&amp;gt; directory in the &amp;lt;tt&amp;gt;tinyos-2.x-contrib&amp;lt;/tt&amp;gt; CVS repository.  Instructions for accessing the repository are available [http://docs.tinyos.net/index.php/Contributing_Code_to_TinyOS here].  Please read the included &amp;lt;tt&amp;gt;README&amp;lt;/tt&amp;gt; file for instructions on set up and use MLA.&lt;br /&gt;
&lt;br /&gt;
If you have any questions or comments, feel free to email Kevin Klues at [mailto:klueska@cs.stanford.edu klueska@cs.stanford.edu] or Greg Hackmann at [mailto:gwh2@cse.wustl.edu gwh2@cse.wustl.edu].&lt;br /&gt;
&lt;br /&gt;
== Acknowledgements ==&lt;br /&gt;
&lt;br /&gt;
This work is supported by the NSF under NeTS-NOSS Grant [http://nsf.gov/awardsearch/showAward.do?AwardNumber=0627126 CNS-0627126].&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=User:Gwh2/LaTeX_Best_Practices&amp;diff=1373</id>
		<title>User:Gwh2/LaTeX Best Practices</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=User:Gwh2/LaTeX_Best_Practices&amp;diff=1373"/>
		<updated>2009-05-22T19:05:30Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General ==&lt;br /&gt;
&lt;br /&gt;
Add a line break after each sentence.  This makes it much easier to deal with version control, since CVS and SVN can automatically merge changes iff they happen on different lines.&lt;br /&gt;
&lt;br /&gt;
== Hyphens vs. Dashes ==&lt;br /&gt;
&lt;br /&gt;
Complex words use a single hyphen (&amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;): &amp;lt;code&amp;gt;standards-based&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;state-of-the-art&amp;lt;/code&amp;gt;.  Ranges use an en dash (&amp;lt;code&amp;gt;--&amp;lt;/code&amp;gt;): &amp;lt;code&amp;gt;1981--2009&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1--5&amp;lt;/code&amp;gt;.  Parentheticals use an em dash (&amp;lt;code&amp;gt;---&amp;lt;/code&amp;gt;): &amp;lt;code&amp;gt;the total energy consumption --- comprised of the network, sensing, and computation costs --- at each node&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Citation Formatting ==&lt;br /&gt;
&lt;br /&gt;
Add &amp;lt;code&amp;gt;\usepackage{cite}&amp;lt;/code&amp;gt; to your preamble to get nicer formatting for multiple-key citations.&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;code&amp;gt;text~\cite{key}&amp;lt;/code&amp;gt; rather than &amp;lt;code&amp;gt;text \cite{key}&amp;lt;/code&amp;gt; to keep LaTeX from breaking sentences like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
blah blah blah text&lt;br /&gt;
[1]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Image Formatting ==&lt;br /&gt;
&lt;br /&gt;
The '''One True Template''' for inserting images is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
\begin{figure}[htbp]&lt;br /&gt;
    \centering&lt;br /&gt;
    \includegraphics[width=\columnwidth]{filename-no-extension}&lt;br /&gt;
    \caption{Figure caption}&lt;br /&gt;
    \label{fig:section:filename-no-extension}&lt;br /&gt;
\end{figure}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* LaTeX is incredibly whiny about having the image, caption, and label in that order.  Get it wrong, and parts of your paper may have funny references.  &lt;br /&gt;
* Be sure to exclude the filename extension.  That way, when a conference changes its mind and demands an .EPS rather than a .PDF, you can just convert all of your .PDF/.PNG images to .EPS, run &amp;lt;code&amp;gt;latex&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;pdflatex&amp;lt;/code&amp;gt;, and not have to change any of your LaTeX code.&lt;br /&gt;
* Starting the label with &amp;quot;fig:section:&amp;quot; helps for code completion.  (You ''are'' using an editor with code completion, right?)&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=ART_Experimental_Data&amp;diff=1364</id>
		<title>ART Experimental Data</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=ART_Experimental_Data&amp;diff=1364"/>
		<updated>2009-05-11T07:38:54Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: /* Further Reading */ formatting again&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The experimental datasets we collected for [[#Further Reading|&amp;quot;Robust Topology Control for Indoor Wireless Sensor Networks&amp;quot;]] are available below.  They are provided in [http://www.sqlite.org SQLite3] and CSV formats.&lt;br /&gt;
&lt;br /&gt;
Except where noted, each row in the dataset represents one successful packet transmission along with its round number, source, destination, sequence number, RSSI, and LQI.  For example, the row&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;0|138|133|1|-8|88&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
represents a packet transmitted during round 0 from node 138 to node 133 with a sequence number of 1, RSSI reading of -8, and LQI reading of 88.  Each dataset also includes a second table that indicates the discrete time when each round began; e.g., the row&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;0|2008-08-21 23:03:34.458095&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
means that round 0 began at 23:03 on 2008-08-21.&lt;br /&gt;
&lt;br /&gt;
Putting the data on the Web is a work-in-progress.  Currently a subset of the empirical study and evaluation data is posted.  We can make the other datasets available on request.&lt;br /&gt;
&lt;br /&gt;
== Empirical Study (Section 3) ==&lt;br /&gt;
&lt;br /&gt;
=== All Links (Section 3.2) ===&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | [http://www.cse.wustl.edu/~gwh2/art/all-links.sqlite.zip SQLite]&lt;br /&gt;
 | [http://www.cse.wustl.edu/~gwh2/art/all-links.csv.zip CSV]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Ten Links Under Contention (Section 3.3) ===&lt;br /&gt;
&lt;br /&gt;
''RSSI and LQI values were not collected during this experiment.  Accordingly, there are no RSSI or LQI columns in the data.''&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | [[Media:contention.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:contention.csv.zip|CSV]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Three Links, Fine-Grained (Section 3.4) ===&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | [[Media:link-fluctuations.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:link-fluctuations.csv.zip|CSV]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
== Evaluation (Section 6) ==&lt;br /&gt;
&lt;br /&gt;
=== High-Contention Benchmark (Section 6.4) ===&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! no topology&lt;br /&gt;
 | [[Media:high-contention-notopology.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:high-contention-notopology.csv.zip|CSV]]&lt;br /&gt;
 |-&lt;br /&gt;
 ! ART&lt;br /&gt;
 | [[Media:high-contention-art.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:high-contention-art.csv.zip|CSV]]&lt;br /&gt;
 |-&lt;br /&gt;
 ! ART (w/o gradient optimization)&lt;br /&gt;
 | [[Media:high-contention-art-nogradient.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:high-contention-art-nogradient.csv.zip|CSV]]&lt;br /&gt;
 |-&lt;br /&gt;
 ! PCBL&lt;br /&gt;
 | [[Media:high-contention-pcbl.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:high-contention-pcbl.csv.zip|CSV]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Further Reading ==&lt;br /&gt;
&lt;br /&gt;
* Hackmann, G., Chipara, O., and Lu, C., &amp;quot;Robust Topology Control for Indoor Wireless Sensor Networks,&amp;quot; Proceedings of 6th ACM Conference on Embedded Networked Sensor Systems (SenSys 2008), 2008.&lt;br /&gt;
&lt;br /&gt;
: ''Paper'': [[http://www.cse.wustl.edu/~lu/papers/sensys08.pdf PDF]] [[http://userfs.cec.wustl.edu/~gwh2/publications/hackmann08-robust.bib BibTeX]]&lt;br /&gt;
: ''Presentation'': [[http://userfs.cec.wustl.edu/~gwh2/publications/sensys08.pptx PPTX]] [[http://userfs.cec.wustl.edu/~gwh2/publications/sensys08.pdf PDF]]&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=ART_Experimental_Data&amp;diff=1363</id>
		<title>ART Experimental Data</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=ART_Experimental_Data&amp;diff=1363"/>
		<updated>2009-05-11T07:37:15Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: /* Further Reading */ formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The experimental datasets we collected for [[#Further Reading|&amp;quot;Robust Topology Control for Indoor Wireless Sensor Networks&amp;quot;]] are available below.  They are provided in [http://www.sqlite.org SQLite3] and CSV formats.&lt;br /&gt;
&lt;br /&gt;
Except where noted, each row in the dataset represents one successful packet transmission along with its round number, source, destination, sequence number, RSSI, and LQI.  For example, the row&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;0|138|133|1|-8|88&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
represents a packet transmitted during round 0 from node 138 to node 133 with a sequence number of 1, RSSI reading of -8, and LQI reading of 88.  Each dataset also includes a second table that indicates the discrete time when each round began; e.g., the row&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;0|2008-08-21 23:03:34.458095&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
means that round 0 began at 23:03 on 2008-08-21.&lt;br /&gt;
&lt;br /&gt;
Putting the data on the Web is a work-in-progress.  Currently a subset of the empirical study and evaluation data is posted.  We can make the other datasets available on request.&lt;br /&gt;
&lt;br /&gt;
== Empirical Study (Section 3) ==&lt;br /&gt;
&lt;br /&gt;
=== All Links (Section 3.2) ===&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | [http://www.cse.wustl.edu/~gwh2/art/all-links.sqlite.zip SQLite]&lt;br /&gt;
 | [http://www.cse.wustl.edu/~gwh2/art/all-links.csv.zip CSV]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Ten Links Under Contention (Section 3.3) ===&lt;br /&gt;
&lt;br /&gt;
''RSSI and LQI values were not collected during this experiment.  Accordingly, there are no RSSI or LQI columns in the data.''&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | [[Media:contention.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:contention.csv.zip|CSV]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Three Links, Fine-Grained (Section 3.4) ===&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | [[Media:link-fluctuations.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:link-fluctuations.csv.zip|CSV]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
== Evaluation (Section 6) ==&lt;br /&gt;
&lt;br /&gt;
=== High-Contention Benchmark (Section 6.4) ===&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! no topology&lt;br /&gt;
 | [[Media:high-contention-notopology.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:high-contention-notopology.csv.zip|CSV]]&lt;br /&gt;
 |-&lt;br /&gt;
 ! ART&lt;br /&gt;
 | [[Media:high-contention-art.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:high-contention-art.csv.zip|CSV]]&lt;br /&gt;
 |-&lt;br /&gt;
 ! ART (w/o gradient optimization)&lt;br /&gt;
 | [[Media:high-contention-art-nogradient.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:high-contention-art-nogradient.csv.zip|CSV]]&lt;br /&gt;
 |-&lt;br /&gt;
 ! PCBL&lt;br /&gt;
 | [[Media:high-contention-pcbl.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:high-contention-pcbl.csv.zip|CSV]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Further Reading ==&lt;br /&gt;
&lt;br /&gt;
* Hackmann, G., Chipara, O., and Lu, C., &amp;quot;Robust Topology Control for Indoor Wireless Sensor Networks,&amp;quot; Proceedings of 6th ACM Conference on Embedded Networked Sensor Systems (SenSys 2008), 2008.&lt;br /&gt;
&lt;br /&gt;
: ''Paper'': [http://www.cse.wustl.edu/~lu/papers/sensys08.pdf PDF] [http://userfs.cec.wustl.edu/~gwh2/publications/hackmann08-robust.bib BibTeX]&lt;br /&gt;
: ''Presentation'': [http://userfs.cec.wustl.edu/~gwh2/publications/sensys08.pptx PPTX] [http://userfs.cec.wustl.edu/~gwh2/publications/sensys08.pdf PDF]&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=ART_Experimental_Data&amp;diff=1362</id>
		<title>ART Experimental Data</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=ART_Experimental_Data&amp;diff=1362"/>
		<updated>2009-05-11T07:36:02Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: Add paper citation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The experimental datasets we collected for [[#Further Reading|&amp;quot;Robust Topology Control for Indoor Wireless Sensor Networks&amp;quot;]] are available below.  They are provided in [http://www.sqlite.org SQLite3] and CSV formats.&lt;br /&gt;
&lt;br /&gt;
Except where noted, each row in the dataset represents one successful packet transmission along with its round number, source, destination, sequence number, RSSI, and LQI.  For example, the row&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;0|138|133|1|-8|88&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
represents a packet transmitted during round 0 from node 138 to node 133 with a sequence number of 1, RSSI reading of -8, and LQI reading of 88.  Each dataset also includes a second table that indicates the discrete time when each round began; e.g., the row&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;0|2008-08-21 23:03:34.458095&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
means that round 0 began at 23:03 on 2008-08-21.&lt;br /&gt;
&lt;br /&gt;
Putting the data on the Web is a work-in-progress.  Currently a subset of the empirical study and evaluation data is posted.  We can make the other datasets available on request.&lt;br /&gt;
&lt;br /&gt;
== Empirical Study (Section 3) ==&lt;br /&gt;
&lt;br /&gt;
=== All Links (Section 3.2) ===&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | [http://www.cse.wustl.edu/~gwh2/art/all-links.sqlite.zip SQLite]&lt;br /&gt;
 | [http://www.cse.wustl.edu/~gwh2/art/all-links.csv.zip CSV]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Ten Links Under Contention (Section 3.3) ===&lt;br /&gt;
&lt;br /&gt;
''RSSI and LQI values were not collected during this experiment.  Accordingly, there are no RSSI or LQI columns in the data.''&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | [[Media:contention.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:contention.csv.zip|CSV]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Three Links, Fine-Grained (Section 3.4) ===&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | [[Media:link-fluctuations.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:link-fluctuations.csv.zip|CSV]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
== Evaluation (Section 6) ==&lt;br /&gt;
&lt;br /&gt;
=== High-Contention Benchmark (Section 6.4) ===&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! no topology&lt;br /&gt;
 | [[Media:high-contention-notopology.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:high-contention-notopology.csv.zip|CSV]]&lt;br /&gt;
 |-&lt;br /&gt;
 ! ART&lt;br /&gt;
 | [[Media:high-contention-art.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:high-contention-art.csv.zip|CSV]]&lt;br /&gt;
 |-&lt;br /&gt;
 ! ART (w/o gradient optimization)&lt;br /&gt;
 | [[Media:high-contention-art-nogradient.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:high-contention-art-nogradient.csv.zip|CSV]]&lt;br /&gt;
 |-&lt;br /&gt;
 ! PCBL&lt;br /&gt;
 | [[Media:high-contention-pcbl.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:high-contention-pcbl.csv.zip|CSV]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Further Reading ==&lt;br /&gt;
&lt;br /&gt;
* Hackmann, G., Chipara, O., and Lu, C., &amp;quot;Robust Topology Control for Indoor Wireless Sensor Networks,&amp;quot; Proceedings of 6th ACM Conference on Embedded Networked Sensor Systems (SenSys 2008), 2008.&lt;br /&gt;
: Paper: [http://www.cse.wustl.edu/~lu/papers/sensys08.pdf PDF] [http://userfs.cec.wustl.edu/~gwh2/publications/hackmann08-robust.bib BibTeX]&lt;br /&gt;
: Presentation: [http://userfs.cec.wustl.edu/~gwh2/publications/sensys08.pptx PPTX] [http://userfs.cec.wustl.edu/~gwh2/publications/sensys08.pdf PDF]&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=ART_Experimental_Data&amp;diff=1357</id>
		<title>ART Experimental Data</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=ART_Experimental_Data&amp;diff=1357"/>
		<updated>2009-04-23T16:48:09Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The experimental datasets we collected for &amp;quot;Robust Topology Control for Indoor Wireless Sensor Networks&amp;quot; are available below.  They are provided in [http://www.sqlite.org SQLite3] and CSV formats.&lt;br /&gt;
&lt;br /&gt;
Except where noted, each row in the dataset represents one successful packet transmission along with its round number, source, destination, sequence number, RSSI, and LQI.  For example, the row&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;0|138|133|1|-8|88&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
represents a packet transmitted during round 0 from node 138 to node 133 with a sequence number of 1, RSSI reading of -8, and LQI reading of 88.  Each dataset also includes a second table that indicates the discrete time when each round began; e.g., the row&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;0|2008-08-21 23:03:34.458095&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
means that round 0 began at 23:03 on 2008-08-21.&lt;br /&gt;
&lt;br /&gt;
Putting the data on the Web is a work-in-progress.  Currently a subset of the empirical study and evaluation data is posted.  We can make the other datasets available on request.&lt;br /&gt;
&lt;br /&gt;
== Empirical Study (Section 3) ==&lt;br /&gt;
&lt;br /&gt;
=== All Links (Section 3.2) ===&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | [http://www.cse.wustl.edu/~gwh2/art/all-links.sqlite.zip SQLite]&lt;br /&gt;
 | [http://www.cse.wustl.edu/~gwh2/art/all-links.csv.zip CSV]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Ten Links Under Contention (Section 3.3) ===&lt;br /&gt;
&lt;br /&gt;
''RSSI and LQI values were not collected during this experiment.  Accordingly, there are no RSSI or LQI columns in the data.''&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | [[Media:contention.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:contention.csv.zip|CSV]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Three Links, Fine-Grained (Section 3.4) ===&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | [[Media:link-fluctuations.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:link-fluctuations.csv.zip|CSV]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
== Evaluation (Section 6) ==&lt;br /&gt;
&lt;br /&gt;
=== High-Contention Benchmark (Section 6.4) ===&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! no topology&lt;br /&gt;
 | [[Media:high-contention-notopology.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:high-contention-notopology.csv.zip|CSV]]&lt;br /&gt;
 |-&lt;br /&gt;
 ! ART&lt;br /&gt;
 | [[Media:high-contention-art.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:high-contention-art.csv.zip|CSV]]&lt;br /&gt;
 |-&lt;br /&gt;
 ! ART (w/o gradient optimization)&lt;br /&gt;
 | [[Media:high-contention-art-nogradient.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:high-contention-art-nogradient.csv.zip|CSV]]&lt;br /&gt;
 |-&lt;br /&gt;
 ! PCBL&lt;br /&gt;
 | [[Media:high-contention-pcbl.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:high-contention-pcbl.csv.zip|CSV]]&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=ART_Experimental_Data&amp;diff=1356</id>
		<title>ART Experimental Data</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=ART_Experimental_Data&amp;diff=1356"/>
		<updated>2009-04-20T17:32:48Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: /* All Links (Section 3.2) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The experimental datasets we collected for &amp;quot;Robust Topology Control for Indoor Wireless Sensor Networks&amp;quot; are available below.  They are provided in [http://www.sqlite.org SQLite3] and CSV formats.&lt;br /&gt;
&lt;br /&gt;
Except where noted, each row in the dataset represents one successful packet transmission along with its round number, source, destination, sequence number, RSSI, and LQI.  For example, the row&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;0|138|133|1|-8|88&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
represents a packet transmitted during round 0 from node 138 to node 133 with a sequence number of 0, RSSI reading of -8, and LQI reading of 88.  Each dataset also includes a second table that indicates the discrete time when each round began; e.g., the row&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;0|2008-08-21 23:03:34.458095&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
means that round 0 began at 23:03 on 2008-08-21.&lt;br /&gt;
&lt;br /&gt;
Putting the data on the Web is a work-in-progress.  Currently a subset of the empirical study and evaluation data is posted.  We can make the other datasets available on request.&lt;br /&gt;
&lt;br /&gt;
== Empirical Study (Section 3) ==&lt;br /&gt;
&lt;br /&gt;
=== All Links (Section 3.2) ===&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | [http://www.cse.wustl.edu/~gwh2/art/all-links.sqlite.zip SQLite]&lt;br /&gt;
 | [http://www.cse.wustl.edu/~gwh2/art/all-links.csv.zip CSV]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Ten Links Under Contention (Section 3.3) ===&lt;br /&gt;
&lt;br /&gt;
''RSSI and LQI values were not collected during this experiment.  Accordingly, there are no RSSI or LQI columns in the data.''&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | [[Media:contention.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:contention.csv.zip|CSV]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Three Links, Fine-Grained (Section 3.4) ===&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | [[Media:link-fluctuations.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:link-fluctuations.csv.zip|CSV]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
== Evaluation (Section 6) ==&lt;br /&gt;
&lt;br /&gt;
=== High-Contention Benchmark (Section 6.4) ===&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! no topology&lt;br /&gt;
 | [[Media:high-contention-notopology.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:high-contention-notopology.csv.zip|CSV]]&lt;br /&gt;
 |-&lt;br /&gt;
 ! ART&lt;br /&gt;
 | [[Media:high-contention-art.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:high-contention-art.csv.zip|CSV]]&lt;br /&gt;
 |-&lt;br /&gt;
 ! ART (w/o gradient optimization)&lt;br /&gt;
 | [[Media:high-contention-art-nogradient.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:high-contention-art-nogradient.csv.zip|CSV]]&lt;br /&gt;
 |-&lt;br /&gt;
 ! PCBL&lt;br /&gt;
 | [[Media:high-contention-pcbl.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:high-contention-pcbl.csv.zip|CSV]]&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=File:Link-fluctuations.csv.zip&amp;diff=1355</id>
		<title>File:Link-fluctuations.csv.zip</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=File:Link-fluctuations.csv.zip&amp;diff=1355"/>
		<updated>2009-04-20T17:25:58Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=ART_Experimental_Data&amp;diff=1354</id>
		<title>ART Experimental Data</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=ART_Experimental_Data&amp;diff=1354"/>
		<updated>2009-04-20T17:25:49Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: /* Three Links, Fine-Grained (Section 3.4) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The experimental datasets we collected for &amp;quot;Robust Topology Control for Indoor Wireless Sensor Networks&amp;quot; are available below.  They are provided in [http://www.sqlite.org SQLite3] and CSV formats.&lt;br /&gt;
&lt;br /&gt;
Except where noted, each row in the dataset represents one successful packet transmission along with its round number, source, destination, sequence number, RSSI, and LQI.  For example, the row&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;0|138|133|1|-8|88&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
represents a packet transmitted during round 0 from node 138 to node 133 with a sequence number of 0, RSSI reading of -8, and LQI reading of 88.  Each dataset also includes a second table that indicates the discrete time when each round began; e.g., the row&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;0|2008-08-21 23:03:34.458095&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
means that round 0 began at 23:03 on 2008-08-21.&lt;br /&gt;
&lt;br /&gt;
Putting the data on the Web is a work-in-progress.  Currently a subset of the empirical study and evaluation data is posted.  We can make the other datasets available on request.&lt;br /&gt;
&lt;br /&gt;
== Empirical Study (Section 3) ==&lt;br /&gt;
&lt;br /&gt;
=== All Links (Section 3.2) ===&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | [[Media:all-links.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:all-links.csv.zip|CSV]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Ten Links Under Contention (Section 3.3) ===&lt;br /&gt;
&lt;br /&gt;
''RSSI and LQI values were not collected during this experiment.  Accordingly, there are no RSSI or LQI columns in the data.''&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | [[Media:contention.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:contention.csv.zip|CSV]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Three Links, Fine-Grained (Section 3.4) ===&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | [[Media:link-fluctuations.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:link-fluctuations.csv.zip|CSV]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
== Evaluation (Section 6) ==&lt;br /&gt;
&lt;br /&gt;
=== High-Contention Benchmark (Section 6.4) ===&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! no topology&lt;br /&gt;
 | [[Media:high-contention-notopology.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:high-contention-notopology.csv.zip|CSV]]&lt;br /&gt;
 |-&lt;br /&gt;
 ! ART&lt;br /&gt;
 | [[Media:high-contention-art.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:high-contention-art.csv.zip|CSV]]&lt;br /&gt;
 |-&lt;br /&gt;
 ! ART (w/o gradient optimization)&lt;br /&gt;
 | [[Media:high-contention-art-nogradient.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:high-contention-art-nogradient.csv.zip|CSV]]&lt;br /&gt;
 |-&lt;br /&gt;
 ! PCBL&lt;br /&gt;
 | [[Media:high-contention-pcbl.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:high-contention-pcbl.csv.zip|CSV]]&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=File:Link-fluctuations.sqlite.zip&amp;diff=1353</id>
		<title>File:Link-fluctuations.sqlite.zip</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=File:Link-fluctuations.sqlite.zip&amp;diff=1353"/>
		<updated>2009-04-20T17:25:13Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=File:Contention.csv.zip&amp;diff=1352</id>
		<title>File:Contention.csv.zip</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=File:Contention.csv.zip&amp;diff=1352"/>
		<updated>2009-04-20T17:24:28Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=File:Contention.sqlite.zip&amp;diff=1351</id>
		<title>File:Contention.sqlite.zip</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=File:Contention.sqlite.zip&amp;diff=1351"/>
		<updated>2009-04-20T17:24:16Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=ART_Experimental_Data&amp;diff=1350</id>
		<title>ART Experimental Data</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=ART_Experimental_Data&amp;diff=1350"/>
		<updated>2009-04-20T17:22:42Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: Add data for Section 3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The experimental datasets we collected for &amp;quot;Robust Topology Control for Indoor Wireless Sensor Networks&amp;quot; are available below.  They are provided in [http://www.sqlite.org SQLite3] and CSV formats.&lt;br /&gt;
&lt;br /&gt;
Except where noted, each row in the dataset represents one successful packet transmission along with its round number, source, destination, sequence number, RSSI, and LQI.  For example, the row&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;0|138|133|1|-8|88&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
represents a packet transmitted during round 0 from node 138 to node 133 with a sequence number of 0, RSSI reading of -8, and LQI reading of 88.  Each dataset also includes a second table that indicates the discrete time when each round began; e.g., the row&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;0|2008-08-21 23:03:34.458095&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
means that round 0 began at 23:03 on 2008-08-21.&lt;br /&gt;
&lt;br /&gt;
Putting the data on the Web is a work-in-progress.  Currently a subset of the empirical study and evaluation data is posted.  We can make the other datasets available on request.&lt;br /&gt;
&lt;br /&gt;
== Empirical Study (Section 3) ==&lt;br /&gt;
&lt;br /&gt;
=== All Links (Section 3.2) ===&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | [[Media:all-links.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:all-links.csv.zip|CSV]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Ten Links Under Contention (Section 3.3) ===&lt;br /&gt;
&lt;br /&gt;
''RSSI and LQI values were not collected during this experiment.  Accordingly, there are no RSSI or LQI columns in the data.''&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | [[Media:contention.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:contention.csv.zip|CSV]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Three Links, Fine-Grained (Section 3.4) ===&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | [[Media:link-fluctuations.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:link-fluctuations.sqlite.zip|CSV]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Evaluation (Section 6) ==&lt;br /&gt;
&lt;br /&gt;
=== High-Contention Benchmark (Section 6.4) ===&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! no topology&lt;br /&gt;
 | [[Media:high-contention-notopology.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:high-contention-notopology.csv.zip|CSV]]&lt;br /&gt;
 |-&lt;br /&gt;
 ! ART&lt;br /&gt;
 | [[Media:high-contention-art.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:high-contention-art.csv.zip|CSV]]&lt;br /&gt;
 |-&lt;br /&gt;
 ! ART (w/o gradient optimization)&lt;br /&gt;
 | [[Media:high-contention-art-nogradient.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:high-contention-art-nogradient.csv.zip|CSV]]&lt;br /&gt;
 |-&lt;br /&gt;
 ! PCBL&lt;br /&gt;
 | [[Media:high-contention-pcbl.sqlite.zip|SQLite]]&lt;br /&gt;
 | [[Media:high-contention-pcbl.csv.zip|CSV]]&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=User:Gwh2/LaTeX_Best_Practices&amp;diff=1346</id>
		<title>User:Gwh2/LaTeX Best Practices</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=User:Gwh2/LaTeX_Best_Practices&amp;diff=1346"/>
		<updated>2009-04-08T23:04:51Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General ==&lt;br /&gt;
&lt;br /&gt;
Add a line break after each sentence.  This makes it much easier to deal with version control, since CVS and SVN can automatically merge changes iff they happen on different lines.&lt;br /&gt;
&lt;br /&gt;
== Citation Formatting ==&lt;br /&gt;
&lt;br /&gt;
Add &amp;lt;code&amp;gt;\usepackage{cite}&amp;lt;/code&amp;gt; to your preamble to get nicer formatting for multiple-key citations.&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;code&amp;gt;text~\cite{key}&amp;lt;/code&amp;gt; rather than &amp;lt;code&amp;gt;text \cite{key}&amp;lt;/code&amp;gt; to keep LaTeX from breaking sentences like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
blah blah blah text&lt;br /&gt;
[1]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Image Formatting ==&lt;br /&gt;
&lt;br /&gt;
The '''One True Template''' for inserting images is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
\begin{figure}[htbp]&lt;br /&gt;
    \centering&lt;br /&gt;
    \includegraphics[width=\columnwidth]{filename-no-extension}&lt;br /&gt;
    \caption{Figure caption}&lt;br /&gt;
    \label{fig:section:filename-no-extension}&lt;br /&gt;
\end{figure}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* LaTeX is incredibly whiny about having the image, caption, and label in that order.  Get it wrong, and parts of your paper may have funny references.  &lt;br /&gt;
* Be sure to exclude the filename extension.  That way, when a conference changes its mind and demands an .EPS rather than a .PDF, you can just convert all of your .PDF/.PNG images to .EPS, run &amp;lt;code&amp;gt;latex&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;pdflatex&amp;lt;/code&amp;gt;, and not have to change any of your LaTeX code.&lt;br /&gt;
* Starting the label with &amp;quot;fig:section:&amp;quot; helps for code completion.  (You ''are'' using an editor with code completion, right?)&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=User:Gwh2/LaTeX_Best_Practices&amp;diff=1345</id>
		<title>User:Gwh2/LaTeX Best Practices</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=User:Gwh2/LaTeX_Best_Practices&amp;diff=1345"/>
		<updated>2009-04-08T22:00:13Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: New page: == Citation Formatting ==  Add &amp;lt;code&amp;gt;\usepackage{cite}&amp;lt;/code&amp;gt; to your preamble to get nicer formatting for multiple-key citations.  Use &amp;lt;code&amp;gt;text~\cite{key}&amp;lt;/code&amp;gt; rather than &amp;lt;code&amp;gt;text ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Citation Formatting ==&lt;br /&gt;
&lt;br /&gt;
Add &amp;lt;code&amp;gt;\usepackage{cite}&amp;lt;/code&amp;gt; to your preamble to get nicer formatting for multiple-key citations.&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;code&amp;gt;text~\cite{key}&amp;lt;/code&amp;gt; rather than &amp;lt;code&amp;gt;text \cite{key}&amp;lt;/code&amp;gt; to keep LaTeX from breaking sentences like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
blah blah blah text&lt;br /&gt;
[1]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Image Formatting ==&lt;br /&gt;
&lt;br /&gt;
The '''One True Template''' for inserting images is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
\begin{figure}[htbp]&lt;br /&gt;
    \centering&lt;br /&gt;
    \includegraphics[width=\columnwidth]{filename-no-extension}&lt;br /&gt;
    \caption{Figure caption}&lt;br /&gt;
    \label{fig:section:filename-no-extension}&lt;br /&gt;
\end{figure}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* LaTeX is incredibly whiny about having the image, caption, and label in that order.  Get it wrong, and parts of your paper may have funny references.  &lt;br /&gt;
* Be sure to exclude the filename extension.  That way, when a conference changes its mind and demands an .EPS rather than a .PDF, you can just convert all of your .PDF/.PNG images to .EPS, run &amp;lt;code&amp;gt;latex&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;pdflatex&amp;lt;/code&amp;gt;, and not have to change any of your LaTeX code.&lt;br /&gt;
* Starting the label with &amp;quot;fig:section:&amp;quot; helps for code completion.  (You ''are'' using an editor with code completion, right?)&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=The_WUSTL_Wireless_Sensor_Network_Testbed&amp;diff=1338</id>
		<title>The WUSTL Wireless Sensor Network Testbed</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=The_WUSTL_Wireless_Sensor_Network_Testbed&amp;diff=1338"/>
		<updated>2009-03-30T17:56:54Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: /* Existing Deployment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align = &amp;quot;center&amp;quot;&lt;br /&gt;
 | [[Image:wsn-wustl-logo.png]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| align = &amp;quot;center&amp;quot;&lt;br /&gt;
 | Contact: [mailto:gwh2@cse.wustl.edu Greg Hackmann]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
 | __TOC__&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
To facilitate advanced research in wireless sensor network technology, we are currently in the process of deploying a wireless sensor network testbed at Washington University in St. Louis.  The testbed currently consists of 78 wireless sensor nodes (motes) placed throughout several office areas in Jolley and Bryan Hall -- i.e., several grad student offices, the graduate student lounge, several labs, and the two conference rooms.&lt;br /&gt;
&lt;br /&gt;
This document serves as an overview of the testbed setup and its current deployment.  It is a living document in the sense that it will be updated as changes to the testbed continue to be made.  In the end it will serve as a source of reference for anyone using the testbed to run sensornet related experiments. &lt;br /&gt;
&lt;br /&gt;
Having a testbed of this size is important for a number of reasons:&lt;br /&gt;
&lt;br /&gt;
* '''Only a handful of testbeds of this size exist in the world today.'''  By being one of the first to have such a testbed, we will be able to conduct experiments that others have previously been unable to run.  Our eventual goal is to make the testbed accessible through a simple web interface, opening it to users across the globe.&lt;br /&gt;
* '''Running large scale wireless sensor network experiments is hard.'''  Programming a single mote can take up to five minutes depending on the size of the binary it is being programmed with.  Without a testbed to streamline the process of programming a large number of motes, programming each mote individually can quickly become a significant bottleneck.  Furthermore, as programming typically takes place by physically attaching a mote to your local machine, deploying them afterwards also takes a significant amount of time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=&amp;quot;+1&amp;quot;&amp;gt;'''IMPORTANT:'''&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Please keep in mind that the motes deployed in the testbed only contain sensors for light, radiation, temperature, and humidity.  There are no microphones or cameras, and there is no plan to EVER include such sensors in the future. The purpose of the testbed is primarily for measuring communication characteristics of the motes and not evaluating the sensitivity or accuracy of its sensors. If you have any privacy concerns about including the testbed in your office please direct any questions to [mailto:wsn@cse.wustl.edu wsn@cse.wustl.edu].&lt;br /&gt;
&lt;br /&gt;
==Testbed Setup==&lt;br /&gt;
Our testbed deployment is based on the [http://www.tkn.tu-berlin.de/publications/papers/real04f-handziski.pdf TWIST architecture] originally developed by the telecommunications group ([http://www.tkn.tu-berlin.de/ TKN]) at the Technical University of Berlin.  The acronmym TWIST stands for &amp;quot;TKN Wireless Indoor Sensor network Testbed&amp;quot;.  It is hierarchical in nature, consisting of three different levels of deployment: sensor nodes, microservers, and a desktop class host/server machine.  A high level view of this three tiered architecture can be seen in the figure below.&lt;br /&gt;
At the lowest tier, sensor nodes are placed throughout the physical environment in order to take sensor readings and/or perform actuation.  They are connected to microservers at the second tier through a USB infrastructure consisting of USB 2.0 compliant hubs and a set of active/passive USB cables.  Messages can be exchanged between sensor nodes and microservers over this interface in both directions.  At the third and final tier exists a dedicated server which connects to all of the microservers over an Ethernet backbone.  The server machine is used to host, among other things, a database containing information about the different sensor nodes and the microservers they are connected to.  This database minimally contains information about the connections that have been established between the sensor nodes and microservers, as well as their current locations.  The server machine is also used to provide a workable interface between the testbed and any end-users.  Users may log onto the server to gain access to the information contained in the testbed database, as well as exchange messages with nodes contained in the testbed.  The entire TWIST architecture is based on cheap, off-the-shelf hardware and uses open-source software at every tier of its deployment.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-architecture.jpg|thumb|left|300px|TWIST architecture]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Having such an architecture enables one to perform tasks not feasible in other WSN deployments. For example, debug messages from individual sensor nodes can be sent to the control station over the USB interface without interfering with a WSN application running in the network.  The USB infrastructure essentially provides an out of band means for collecting important information from each node without clogging up the wireless channel and adversely affecting any experiments being run.  This debug information can also be time stamped by the micorservers using NTP (Network Time Protocol) in order to gather statistics about what is going on at each individual point in the network at any given time.&lt;br /&gt;
&lt;br /&gt;
Programming of sensor nodes in the testbed is also made easier using the three tiered architecture, as a user simply tells the control station which sensor nodes it would like to program, and the control station does the work of distributing this request to the proper microserver.  Information about which sensor node is attached to which microserver can be obtained from the testbed database, and each request can be sent to the proper microserver using a dedicated thread of control.  These requests can then be processed by each microserver in parallel, speeding up the time required to program the entire testbed significantly.&lt;br /&gt;
&lt;br /&gt;
Individual sensor nodes in the testbed can also be disabled or enabled the USB interface.  This capability allows node failures to be simulated in the testbed environment, as well as fine tune the density of the network itself when running certain types of experiments.  The introduction of new nodes into the network can also be simulated by enabling nodes at specific times during the run of an experiment.&lt;br /&gt;
&lt;br /&gt;
All of the features described above really boil down to just one thing.  It is possible to run sophisticated experiments in the WSN testbed without ever having to physically change the layout of the testbed or interact with the individual sensor nodes that make it up.  Everything is controllable from the central server, and scripts can be written to perform countless numbers of operations involving each of the capabilites described above.&lt;br /&gt;
&lt;br /&gt;
==Existing Deployment==&lt;br /&gt;
Currently the testbed consists of 78 [http://www.xbow.com/Products/productdetails.aspx?sid=252 TelosB] motes placed throughout Bryan and Jolley Hall.  The figure below shows the placement of these motes in the testbed.  Each room contains a single microserver connected to all of the motes in that room (with the exception of Jolley 519 and Bryan 509C, which have two microservers).&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-deployment.png|thumb|left|600px|Existing deployment]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Proposed Deployment==&lt;br /&gt;
We would like to expand the testbed to include more offices in Jolley Hall, as well as some of the lab spaces.  Below is a figure of the proposed deployment.  The proposed expansion will only add one node to the current deployment; the existing 30 nodes in Jolley Hall will be distributed across more offices.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-proposed.png|thumb|left|300px|Proposed deployment]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testbed Software==&lt;br /&gt;
&lt;br /&gt;
The testbed software has a client/server architecture, plus a set of user applications that interact with the wireless testbed.  The client runs on the microservers and manages finding, programming, and communicating with the attached motes.  The server coordinates the clients and the user applications.  The user applications help the user to program, list, and communicate with motes in the system.&lt;br /&gt;
&lt;br /&gt;
The client, server, and user application software has been written mostly in Python, with some performance-critical sections written in C.  In addition, the server application interacts with a PostgreSQL database which lists the active microservers and motes.  The PostgreSQL backend is also available for user applications to store experimental data.&lt;br /&gt;
&lt;br /&gt;
===Startup===&lt;br /&gt;
The server software is automatically started as a Linux service on the testbed server machine.  The client software is also installed as a service on the microservers but is not automatically started.  A script is provided to the user which connects to the server and requests that the client be started on one or more microservers.&lt;br /&gt;
&lt;br /&gt;
When the client service is brought up, it sends a status message to the server, which marks the microserver as &amp;quot;up&amp;quot; in the database.  The microserver will also send messages listing the motes attached to its USB ports, which are likewise stored in the database.&lt;br /&gt;
&lt;br /&gt;
===Programming===&lt;br /&gt;
To program a set of motes, the user runs the &amp;quot;program.py&amp;quot; script, passing it the program binary and a description of the motes to program.  The user can select to program specific motes, all the motes attached to specific microservers, or the entire testbed.  &lt;br /&gt;
The server converts this request into a list of targeted motes.&lt;br /&gt;
&lt;br /&gt;
Once the set of motes has been determined, the server creates a binary file for each mote.  The server copies the original binary, imprints it with the mote's network address (stored in the database), and moves the new binary to the home directory of the microserver the mote is attached to.  The server then passes a request to the microserver to flash the binary onto the mote.&lt;br /&gt;
&lt;br /&gt;
When the programming completes, the microserver informs the server whether it was successful or not.  The server collects this status for every mote in the programming set, and informs the &amp;quot;program.py&amp;quot; script when the job is complete.&lt;br /&gt;
&lt;br /&gt;
The slowest part of programming a mote is flashing the binary onto the mote.  Because the flashing takes place on the microserver, we can program motes on different microservers in parallel, allowing us to program the entire testbed in the time it takes to program the motes on a single microserver.&lt;br /&gt;
&lt;br /&gt;
===Serial Communication===&lt;br /&gt;
The testbed software allows the user to send and receive serial packets through the motes' USB ports.  When a microserver discovers a new mote attached to one of its USB ports, it opens a connection to the mote's serial port.  Whenever a new serial packet is ready, the microserver reads the packet and sends it to the testbed server over the Ethernet backbone.  The testbed server forwards each packet to end-user applications which subscribe to this data.  Conversely, users may send the server requests to write a serial packet to a specific mote, which the server will forward to the corresponding microserver.&lt;br /&gt;
&lt;br /&gt;
The TinyOS SDK normally provides a &amp;quot;Serial Forwarder&amp;quot; component that allows PC applications to collect data from a locally-attached mote.  To interact with the testbed instead, the user runs the provided &amp;quot;forwarder.py&amp;quot; script, which acts as a drop-in replacement for the Serial Forwarder.  Thus, existing applications developed using the standard TinyOS SDK can be used on the testbed without modifications.&lt;br /&gt;
&lt;br /&gt;
Users may optionally use a testbed-specific Python API in place of the &amp;quot;forwarder.py&amp;quot; script.  This Python API offers new features which are not provided by the standard TinyOS SDK, such as the ability to remotely reboot motes.&lt;br /&gt;
&lt;br /&gt;
==Current Services==&lt;br /&gt;
&lt;br /&gt;
===Localization===&lt;br /&gt;
We currently have a localization service implemented in which all of the motes in the testbed act as anchor nodes in order to help localize a beacon node roaming throughout the network.  Below is a snapshot of a GUI application we have developed to visualize this localization service in action.  With the denser deployment of motes in the proposed testbed, we hope to become extremely accurate in determining the location of these beacon nodes in the network.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-localization.png|thumb|left|300px|WSN localization application]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this figure we see two beacon nodes (102 and 103) being localized to rooms (519 and 534) respectively.  The purple dots represent anchor nodes deployed in the testbed and the green lines depict which anchors have heard a message sent by one of the beacons.  The localization algorithm used is based on particle filters -- a well understood method of localization used in robotics.  We have expanded the use of the particle filter to the wireless sensor network domain.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Acknowledgments==&lt;br /&gt;
This work is supported by the NSF under a CRI grant (CNS-0708460) and an ITR grant (CCR-0325529).&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=The_WUSTL_Wireless_Sensor_Network_Testbed&amp;diff=1337</id>
		<title>The WUSTL Wireless Sensor Network Testbed</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=The_WUSTL_Wireless_Sensor_Network_Testbed&amp;diff=1337"/>
		<updated>2009-03-30T17:52:00Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: /* Proposed Deployment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align = &amp;quot;center&amp;quot;&lt;br /&gt;
 | [[Image:wsn-wustl-logo.png]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| align = &amp;quot;center&amp;quot;&lt;br /&gt;
 | Contact: [mailto:gwh2@cse.wustl.edu Greg Hackmann]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
 | __TOC__&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
To facilitate advanced research in wireless sensor network technology, we are currently in the process of deploying a wireless sensor network testbed at Washington University in St. Louis.  The testbed currently consists of 78 wireless sensor nodes (motes) placed throughout several office areas in Jolley and Bryan Hall -- i.e., several grad student offices, the graduate student lounge, several labs, and the two conference rooms.&lt;br /&gt;
&lt;br /&gt;
This document serves as an overview of the testbed setup and its current deployment.  It is a living document in the sense that it will be updated as changes to the testbed continue to be made.  In the end it will serve as a source of reference for anyone using the testbed to run sensornet related experiments. &lt;br /&gt;
&lt;br /&gt;
Having a testbed of this size is important for a number of reasons:&lt;br /&gt;
&lt;br /&gt;
* '''Only a handful of testbeds of this size exist in the world today.'''  By being one of the first to have such a testbed, we will be able to conduct experiments that others have previously been unable to run.  Our eventual goal is to make the testbed accessible through a simple web interface, opening it to users across the globe.&lt;br /&gt;
* '''Running large scale wireless sensor network experiments is hard.'''  Programming a single mote can take up to five minutes depending on the size of the binary it is being programmed with.  Without a testbed to streamline the process of programming a large number of motes, programming each mote individually can quickly become a significant bottleneck.  Furthermore, as programming typically takes place by physically attaching a mote to your local machine, deploying them afterwards also takes a significant amount of time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=&amp;quot;+1&amp;quot;&amp;gt;'''IMPORTANT:'''&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Please keep in mind that the motes deployed in the testbed only contain sensors for light, radiation, temperature, and humidity.  There are no microphones or cameras, and there is no plan to EVER include such sensors in the future. The purpose of the testbed is primarily for measuring communication characteristics of the motes and not evaluating the sensitivity or accuracy of its sensors. If you have any privacy concerns about including the testbed in your office please direct any questions to [mailto:wsn@cse.wustl.edu wsn@cse.wustl.edu].&lt;br /&gt;
&lt;br /&gt;
==Testbed Setup==&lt;br /&gt;
Our testbed deployment is based on the [http://www.tkn.tu-berlin.de/publications/papers/real04f-handziski.pdf TWIST architecture] originally developed by the telecommunications group ([http://www.tkn.tu-berlin.de/ TKN]) at the Technical University of Berlin.  The acronmym TWIST stands for &amp;quot;TKN Wireless Indoor Sensor network Testbed&amp;quot;.  It is hierarchical in nature, consisting of three different levels of deployment: sensor nodes, microservers, and a desktop class host/server machine.  A high level view of this three tiered architecture can be seen in the figure below.&lt;br /&gt;
At the lowest tier, sensor nodes are placed throughout the physical environment in order to take sensor readings and/or perform actuation.  They are connected to microservers at the second tier through a USB infrastructure consisting of USB 2.0 compliant hubs and a set of active/passive USB cables.  Messages can be exchanged between sensor nodes and microservers over this interface in both directions.  At the third and final tier exists a dedicated server which connects to all of the microservers over an Ethernet backbone.  The server machine is used to host, among other things, a database containing information about the different sensor nodes and the microservers they are connected to.  This database minimally contains information about the connections that have been established between the sensor nodes and microservers, as well as their current locations.  The server machine is also used to provide a workable interface between the testbed and any end-users.  Users may log onto the server to gain access to the information contained in the testbed database, as well as exchange messages with nodes contained in the testbed.  The entire TWIST architecture is based on cheap, off-the-shelf hardware and uses open-source software at every tier of its deployment.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-architecture.jpg|thumb|left|300px|TWIST architecture]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Having such an architecture enables one to perform tasks not feasible in other WSN deployments. For example, debug messages from individual sensor nodes can be sent to the control station over the USB interface without interfering with a WSN application running in the network.  The USB infrastructure essentially provides an out of band means for collecting important information from each node without clogging up the wireless channel and adversely affecting any experiments being run.  This debug information can also be time stamped by the micorservers using NTP (Network Time Protocol) in order to gather statistics about what is going on at each individual point in the network at any given time.&lt;br /&gt;
&lt;br /&gt;
Programming of sensor nodes in the testbed is also made easier using the three tiered architecture, as a user simply tells the control station which sensor nodes it would like to program, and the control station does the work of distributing this request to the proper microserver.  Information about which sensor node is attached to which microserver can be obtained from the testbed database, and each request can be sent to the proper microserver using a dedicated thread of control.  These requests can then be processed by each microserver in parallel, speeding up the time required to program the entire testbed significantly.&lt;br /&gt;
&lt;br /&gt;
Individual sensor nodes in the testbed can also be disabled or enabled the USB interface.  This capability allows node failures to be simulated in the testbed environment, as well as fine tune the density of the network itself when running certain types of experiments.  The introduction of new nodes into the network can also be simulated by enabling nodes at specific times during the run of an experiment.&lt;br /&gt;
&lt;br /&gt;
All of the features described above really boil down to just one thing.  It is possible to run sophisticated experiments in the WSN testbed without ever having to physically change the layout of the testbed or interact with the individual sensor nodes that make it up.  Everything is controllable from the central server, and scripts can be written to perform countless numbers of operations involving each of the capabilites described above.&lt;br /&gt;
&lt;br /&gt;
==Existing Deployment==&lt;br /&gt;
Currently the testbed consists of 78 motes placed throughout Bryan and Jolley Hall.  The figure below shows the placement of these motes in the testbed.  Each room contains a single microserver connected to all of the motes in that room (with the exception of Jolley 519 and Bryan 509C, which have two microservers).&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-deployment.png|thumb|left|600px|Existing deployment]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Proposed Deployment==&lt;br /&gt;
We would like to expand the testbed to include more offices in Jolley Hall, as well as some of the lab spaces.  Below is a figure of the proposed deployment.  The proposed expansion will only add one node to the current deployment; the existing 30 nodes in Jolley Hall will be distributed across more offices.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-proposed.png|thumb|left|300px|Proposed deployment]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testbed Software==&lt;br /&gt;
&lt;br /&gt;
The testbed software has a client/server architecture, plus a set of user applications that interact with the wireless testbed.  The client runs on the microservers and manages finding, programming, and communicating with the attached motes.  The server coordinates the clients and the user applications.  The user applications help the user to program, list, and communicate with motes in the system.&lt;br /&gt;
&lt;br /&gt;
The client, server, and user application software has been written mostly in Python, with some performance-critical sections written in C.  In addition, the server application interacts with a PostgreSQL database which lists the active microservers and motes.  The PostgreSQL backend is also available for user applications to store experimental data.&lt;br /&gt;
&lt;br /&gt;
===Startup===&lt;br /&gt;
The server software is automatically started as a Linux service on the testbed server machine.  The client software is also installed as a service on the microservers but is not automatically started.  A script is provided to the user which connects to the server and requests that the client be started on one or more microservers.&lt;br /&gt;
&lt;br /&gt;
When the client service is brought up, it sends a status message to the server, which marks the microserver as &amp;quot;up&amp;quot; in the database.  The microserver will also send messages listing the motes attached to its USB ports, which are likewise stored in the database.&lt;br /&gt;
&lt;br /&gt;
===Programming===&lt;br /&gt;
To program a set of motes, the user runs the &amp;quot;program.py&amp;quot; script, passing it the program binary and a description of the motes to program.  The user can select to program specific motes, all the motes attached to specific microservers, or the entire testbed.  &lt;br /&gt;
The server converts this request into a list of targeted motes.&lt;br /&gt;
&lt;br /&gt;
Once the set of motes has been determined, the server creates a binary file for each mote.  The server copies the original binary, imprints it with the mote's network address (stored in the database), and moves the new binary to the home directory of the microserver the mote is attached to.  The server then passes a request to the microserver to flash the binary onto the mote.&lt;br /&gt;
&lt;br /&gt;
When the programming completes, the microserver informs the server whether it was successful or not.  The server collects this status for every mote in the programming set, and informs the &amp;quot;program.py&amp;quot; script when the job is complete.&lt;br /&gt;
&lt;br /&gt;
The slowest part of programming a mote is flashing the binary onto the mote.  Because the flashing takes place on the microserver, we can program motes on different microservers in parallel, allowing us to program the entire testbed in the time it takes to program the motes on a single microserver.&lt;br /&gt;
&lt;br /&gt;
===Serial Communication===&lt;br /&gt;
The testbed software allows the user to send and receive serial packets through the motes' USB ports.  When a microserver discovers a new mote attached to one of its USB ports, it opens a connection to the mote's serial port.  Whenever a new serial packet is ready, the microserver reads the packet and sends it to the testbed server over the Ethernet backbone.  The testbed server forwards each packet to end-user applications which subscribe to this data.  Conversely, users may send the server requests to write a serial packet to a specific mote, which the server will forward to the corresponding microserver.&lt;br /&gt;
&lt;br /&gt;
The TinyOS SDK normally provides a &amp;quot;Serial Forwarder&amp;quot; component that allows PC applications to collect data from a locally-attached mote.  To interact with the testbed instead, the user runs the provided &amp;quot;forwarder.py&amp;quot; script, which acts as a drop-in replacement for the Serial Forwarder.  Thus, existing applications developed using the standard TinyOS SDK can be used on the testbed without modifications.&lt;br /&gt;
&lt;br /&gt;
Users may optionally use a testbed-specific Python API in place of the &amp;quot;forwarder.py&amp;quot; script.  This Python API offers new features which are not provided by the standard TinyOS SDK, such as the ability to remotely reboot motes.&lt;br /&gt;
&lt;br /&gt;
==Current Services==&lt;br /&gt;
&lt;br /&gt;
===Localization===&lt;br /&gt;
We currently have a localization service implemented in which all of the motes in the testbed act as anchor nodes in order to help localize a beacon node roaming throughout the network.  Below is a snapshot of a GUI application we have developed to visualize this localization service in action.  With the denser deployment of motes in the proposed testbed, we hope to become extremely accurate in determining the location of these beacon nodes in the network.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-localization.png|thumb|left|300px|WSN localization application]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this figure we see two beacon nodes (102 and 103) being localized to rooms (519 and 534) respectively.  The purple dots represent anchor nodes deployed in the testbed and the green lines depict which anchors have heard a message sent by one of the beacons.  The localization algorithm used is based on particle filters -- a well understood method of localization used in robotics.  We have expanded the use of the particle filter to the wireless sensor network domain.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Acknowledgments==&lt;br /&gt;
This work is supported by the NSF under a CRI grant (CNS-0708460) and an ITR grant (CCR-0325529).&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=The_WUSTL_Wireless_Sensor_Network_Testbed&amp;diff=1336</id>
		<title>The WUSTL Wireless Sensor Network Testbed</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=The_WUSTL_Wireless_Sensor_Network_Testbed&amp;diff=1336"/>
		<updated>2009-03-30T17:44:34Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: /* Testbed Software */ rewrote&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align = &amp;quot;center&amp;quot;&lt;br /&gt;
 | [[Image:wsn-wustl-logo.png]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| align = &amp;quot;center&amp;quot;&lt;br /&gt;
 | Contact: [mailto:gwh2@cse.wustl.edu Greg Hackmann]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
 | __TOC__&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
To facilitate advanced research in wireless sensor network technology, we are currently in the process of deploying a wireless sensor network testbed at Washington University in St. Louis.  The testbed currently consists of 78 wireless sensor nodes (motes) placed throughout several office areas in Jolley and Bryan Hall -- i.e., several grad student offices, the graduate student lounge, several labs, and the two conference rooms.&lt;br /&gt;
&lt;br /&gt;
This document serves as an overview of the testbed setup and its current deployment.  It is a living document in the sense that it will be updated as changes to the testbed continue to be made.  In the end it will serve as a source of reference for anyone using the testbed to run sensornet related experiments. &lt;br /&gt;
&lt;br /&gt;
Having a testbed of this size is important for a number of reasons:&lt;br /&gt;
&lt;br /&gt;
* '''Only a handful of testbeds of this size exist in the world today.'''  By being one of the first to have such a testbed, we will be able to conduct experiments that others have previously been unable to run.  Our eventual goal is to make the testbed accessible through a simple web interface, opening it to users across the globe.&lt;br /&gt;
* '''Running large scale wireless sensor network experiments is hard.'''  Programming a single mote can take up to five minutes depending on the size of the binary it is being programmed with.  Without a testbed to streamline the process of programming a large number of motes, programming each mote individually can quickly become a significant bottleneck.  Furthermore, as programming typically takes place by physically attaching a mote to your local machine, deploying them afterwards also takes a significant amount of time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=&amp;quot;+1&amp;quot;&amp;gt;'''IMPORTANT:'''&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Please keep in mind that the motes deployed in the testbed only contain sensors for light, radiation, temperature, and humidity.  There are no microphones or cameras, and there is no plan to EVER include such sensors in the future. The purpose of the testbed is primarily for measuring communication characteristics of the motes and not evaluating the sensitivity or accuracy of its sensors. If you have any privacy concerns about including the testbed in your office please direct any questions to [mailto:wsn@cse.wustl.edu wsn@cse.wustl.edu].&lt;br /&gt;
&lt;br /&gt;
==Testbed Setup==&lt;br /&gt;
Our testbed deployment is based on the [http://www.tkn.tu-berlin.de/publications/papers/real04f-handziski.pdf TWIST architecture] originally developed by the telecommunications group ([http://www.tkn.tu-berlin.de/ TKN]) at the Technical University of Berlin.  The acronmym TWIST stands for &amp;quot;TKN Wireless Indoor Sensor network Testbed&amp;quot;.  It is hierarchical in nature, consisting of three different levels of deployment: sensor nodes, microservers, and a desktop class host/server machine.  A high level view of this three tiered architecture can be seen in the figure below.&lt;br /&gt;
At the lowest tier, sensor nodes are placed throughout the physical environment in order to take sensor readings and/or perform actuation.  They are connected to microservers at the second tier through a USB infrastructure consisting of USB 2.0 compliant hubs and a set of active/passive USB cables.  Messages can be exchanged between sensor nodes and microservers over this interface in both directions.  At the third and final tier exists a dedicated server which connects to all of the microservers over an Ethernet backbone.  The server machine is used to host, among other things, a database containing information about the different sensor nodes and the microservers they are connected to.  This database minimally contains information about the connections that have been established between the sensor nodes and microservers, as well as their current locations.  The server machine is also used to provide a workable interface between the testbed and any end-users.  Users may log onto the server to gain access to the information contained in the testbed database, as well as exchange messages with nodes contained in the testbed.  The entire TWIST architecture is based on cheap, off-the-shelf hardware and uses open-source software at every tier of its deployment.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-architecture.jpg|thumb|left|300px|TWIST architecture]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Having such an architecture enables one to perform tasks not feasible in other WSN deployments. For example, debug messages from individual sensor nodes can be sent to the control station over the USB interface without interfering with a WSN application running in the network.  The USB infrastructure essentially provides an out of band means for collecting important information from each node without clogging up the wireless channel and adversely affecting any experiments being run.  This debug information can also be time stamped by the micorservers using NTP (Network Time Protocol) in order to gather statistics about what is going on at each individual point in the network at any given time.&lt;br /&gt;
&lt;br /&gt;
Programming of sensor nodes in the testbed is also made easier using the three tiered architecture, as a user simply tells the control station which sensor nodes it would like to program, and the control station does the work of distributing this request to the proper microserver.  Information about which sensor node is attached to which microserver can be obtained from the testbed database, and each request can be sent to the proper microserver using a dedicated thread of control.  These requests can then be processed by each microserver in parallel, speeding up the time required to program the entire testbed significantly.&lt;br /&gt;
&lt;br /&gt;
Individual sensor nodes in the testbed can also be disabled or enabled the USB interface.  This capability allows node failures to be simulated in the testbed environment, as well as fine tune the density of the network itself when running certain types of experiments.  The introduction of new nodes into the network can also be simulated by enabling nodes at specific times during the run of an experiment.&lt;br /&gt;
&lt;br /&gt;
All of the features described above really boil down to just one thing.  It is possible to run sophisticated experiments in the WSN testbed without ever having to physically change the layout of the testbed or interact with the individual sensor nodes that make it up.  Everything is controllable from the central server, and scripts can be written to perform countless numbers of operations involving each of the capabilites described above.&lt;br /&gt;
&lt;br /&gt;
==Existing Deployment==&lt;br /&gt;
Currently the testbed consists of 78 motes placed throughout Bryan and Jolley Hall.  The figure below shows the placement of these motes in the testbed.  Each room contains a single microserver connected to all of the motes in that room (with the exception of Jolley 519 and Bryan 509C, which have two microservers).&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-deployment.png|thumb|left|600px|Existing deployment]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Proposed Deployment==&lt;br /&gt;
We would like to expand the testbed to include more offices in Jolley Hall, as well as some of the lab spaces.  Below is a figure of the proposed deployment.  The proposed expansion will only add two nodes to the current deployment; the existing 29 nodes in Jolley Hall will be distributed across more offices.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-proposed.png|thumb|left|300px|Proposed deployment]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testbed Software==&lt;br /&gt;
&lt;br /&gt;
The testbed software has a client/server architecture, plus a set of user applications that interact with the wireless testbed.  The client runs on the microservers and manages finding, programming, and communicating with the attached motes.  The server coordinates the clients and the user applications.  The user applications help the user to program, list, and communicate with motes in the system.&lt;br /&gt;
&lt;br /&gt;
The client, server, and user application software has been written mostly in Python, with some performance-critical sections written in C.  In addition, the server application interacts with a PostgreSQL database which lists the active microservers and motes.  The PostgreSQL backend is also available for user applications to store experimental data.&lt;br /&gt;
&lt;br /&gt;
===Startup===&lt;br /&gt;
The server software is automatically started as a Linux service on the testbed server machine.  The client software is also installed as a service on the microservers but is not automatically started.  A script is provided to the user which connects to the server and requests that the client be started on one or more microservers.&lt;br /&gt;
&lt;br /&gt;
When the client service is brought up, it sends a status message to the server, which marks the microserver as &amp;quot;up&amp;quot; in the database.  The microserver will also send messages listing the motes attached to its USB ports, which are likewise stored in the database.&lt;br /&gt;
&lt;br /&gt;
===Programming===&lt;br /&gt;
To program a set of motes, the user runs the &amp;quot;program.py&amp;quot; script, passing it the program binary and a description of the motes to program.  The user can select to program specific motes, all the motes attached to specific microservers, or the entire testbed.  &lt;br /&gt;
The server converts this request into a list of targeted motes.&lt;br /&gt;
&lt;br /&gt;
Once the set of motes has been determined, the server creates a binary file for each mote.  The server copies the original binary, imprints it with the mote's network address (stored in the database), and moves the new binary to the home directory of the microserver the mote is attached to.  The server then passes a request to the microserver to flash the binary onto the mote.&lt;br /&gt;
&lt;br /&gt;
When the programming completes, the microserver informs the server whether it was successful or not.  The server collects this status for every mote in the programming set, and informs the &amp;quot;program.py&amp;quot; script when the job is complete.&lt;br /&gt;
&lt;br /&gt;
The slowest part of programming a mote is flashing the binary onto the mote.  Because the flashing takes place on the microserver, we can program motes on different microservers in parallel, allowing us to program the entire testbed in the time it takes to program the motes on a single microserver.&lt;br /&gt;
&lt;br /&gt;
===Serial Communication===&lt;br /&gt;
The testbed software allows the user to send and receive serial packets through the motes' USB ports.  When a microserver discovers a new mote attached to one of its USB ports, it opens a connection to the mote's serial port.  Whenever a new serial packet is ready, the microserver reads the packet and sends it to the testbed server over the Ethernet backbone.  The testbed server forwards each packet to end-user applications which subscribe to this data.  Conversely, users may send the server requests to write a serial packet to a specific mote, which the server will forward to the corresponding microserver.&lt;br /&gt;
&lt;br /&gt;
The TinyOS SDK normally provides a &amp;quot;Serial Forwarder&amp;quot; component that allows PC applications to collect data from a locally-attached mote.  To interact with the testbed instead, the user runs the provided &amp;quot;forwarder.py&amp;quot; script, which acts as a drop-in replacement for the Serial Forwarder.  Thus, existing applications developed using the standard TinyOS SDK can be used on the testbed without modifications.&lt;br /&gt;
&lt;br /&gt;
Users may optionally use a testbed-specific Python API in place of the &amp;quot;forwarder.py&amp;quot; script.  This Python API offers new features which are not provided by the standard TinyOS SDK, such as the ability to remotely reboot motes.&lt;br /&gt;
&lt;br /&gt;
==Current Services==&lt;br /&gt;
&lt;br /&gt;
===Localization===&lt;br /&gt;
We currently have a localization service implemented in which all of the motes in the testbed act as anchor nodes in order to help localize a beacon node roaming throughout the network.  Below is a snapshot of a GUI application we have developed to visualize this localization service in action.  With the denser deployment of motes in the proposed testbed, we hope to become extremely accurate in determining the location of these beacon nodes in the network.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-localization.png|thumb|left|300px|WSN localization application]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this figure we see two beacon nodes (102 and 103) being localized to rooms (519 and 534) respectively.  The purple dots represent anchor nodes deployed in the testbed and the green lines depict which anchors have heard a message sent by one of the beacons.  The localization algorithm used is based on particle filters -- a well understood method of localization used in robotics.  We have expanded the use of the particle filter to the wireless sensor network domain.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Acknowledgments==&lt;br /&gt;
This work is supported by the NSF under a CRI grant (CNS-0708460) and an ITR grant (CCR-0325529).&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=The_WUSTL_Wireless_Sensor_Network_Testbed&amp;diff=1329</id>
		<title>The WUSTL Wireless Sensor Network Testbed</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=The_WUSTL_Wireless_Sensor_Network_Testbed&amp;diff=1329"/>
		<updated>2009-03-18T20:21:55Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: Update # of motes in intro&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align = &amp;quot;center&amp;quot;&lt;br /&gt;
 | [[Image:wsn-wustl-logo.png]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| align = &amp;quot;center&amp;quot;&lt;br /&gt;
 | Contact: [mailto:gwh2@cse.wustl.edu Greg Hackmann]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
 | __TOC__&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
To facilitate advanced research in wireless sensor network technology, we are currently in the process of deploying a wireless sensor network testbed at Washington University in St. Louis.  The testbed currently consists of 78 wireless sensor nodes (motes) placed throughout several office areas in Jolley and Bryan Hall -- i.e., several grad student offices, the graduate student lounge, several labs, and the two conference rooms.&lt;br /&gt;
&lt;br /&gt;
This document serves as an overview of the testbed setup and its current deployment.  It is a living document in the sense that it will be updated as changes to the testbed continue to be made.  In the end it will serve as a source of reference for anyone using the testbed to run sensornet related experiments. &lt;br /&gt;
&lt;br /&gt;
Having a testbed of this size is important for a number of reasons:&lt;br /&gt;
&lt;br /&gt;
* '''Only a handful of testbeds of this size exist in the world today.'''  By being one of the first to have such a testbed, we will be able to conduct experiments that others have previously been unable to run.  Our eventual goal is to make the testbed accessible through a simple web interface, opening it to users across the globe.&lt;br /&gt;
* '''Running large scale wireless sensor network experiments is hard.'''  Programming a single mote can take up to five minutes depending on the size of the binary it is being programmed with.  Without a testbed to streamline the process of programming a large number of motes, programming each mote individually can quickly become a significant bottleneck.  Furthermore, as programming typically takes place by physically attaching a mote to your local machine, deploying them afterwards also takes a significant amount of time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=&amp;quot;+1&amp;quot;&amp;gt;'''IMPORTANT:'''&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Please keep in mind that the motes deployed in the testbed only contain sensors for light, radiation, temperature, and humidity.  There are no microphones or cameras, and there is no plan to EVER include such sensors in the future. The purpose of the testbed is primarily for measuring communication characteristics of the motes and not evaluating the sensitivity or accuracy of its sensors. If you have any privacy concerns about including the testbed in your office please direct any questions to [mailto:wsn@cse.wustl.edu wsn@cse.wustl.edu].&lt;br /&gt;
&lt;br /&gt;
==Testbed Setup==&lt;br /&gt;
Our testbed deployment is based on the [http://www.tkn.tu-berlin.de/publications/papers/real04f-handziski.pdf TWIST architecture] originally developed by the telecommunications group ([http://www.tkn.tu-berlin.de/ TKN]) at the Technical University of Berlin.  The acronmym TWIST stands for &amp;quot;TKN Wireless Indoor Sensor network Testbed&amp;quot;.  It is hierarchical in nature, consisting of three different levels of deployment: sensor nodes, microservers, and a desktop class host/server machine.  A high level view of this three tiered architecture can be seen in the figure below.&lt;br /&gt;
At the lowest tier, sensor nodes are placed throughout the physical environment in order to take sensor readings and/or perform actuation.  They are connected to microservers at the second tier through a USB infrastructure consisting of USB 2.0 compliant hubs and a set of active/passive USB cables.  Messages can be exchanged between sensor nodes and microservers over this interface in both directions.  At the third and final tier exists a dedicated server which connects to all of the microservers over an Ethernet backbone.  The server machine is used to host, among other things, a database containing information about the different sensor nodes and the microservers they are connected to.  This database minimally contains information about the connections that have been established between the sensor nodes and microservers, as well as their current locations.  The server machine is also used to provide a workable interface between the testbed and any end-users.  Users may log onto the server to gain access to the information contained in the testbed database, as well as exchange messages with nodes contained in the testbed.  The entire TWIST architecture is based on cheap, off-the-shelf hardware and uses open-source software at every tier of its deployment.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-architecture.jpg|thumb|left|300px|TWIST architecture]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Having such an architecture enables one to perform tasks not feasible in other WSN deployments. For example, debug messages from individual sensor nodes can be sent to the control station over the USB interface without interfering with a WSN application running in the network.  The USB infrastructure essentially provides an out of band means for collecting important information from each node without clogging up the wireless channel and adversely affecting any experiments being run.  This debug information can also be time stamped by the micorservers using NTP (Network Time Protocol) in order to gather statistics about what is going on at each individual point in the network at any given time.&lt;br /&gt;
&lt;br /&gt;
Programming of sensor nodes in the testbed is also made easier using the three tiered architecture, as a user simply tells the control station which sensor nodes it would like to program, and the control station does the work of distributing this request to the proper microserver.  Information about which sensor node is attached to which microserver can be obtained from the testbed database, and each request can be sent to the proper microserver using a dedicated thread of control.  These requests can then be processed by each microserver in parallel, speeding up the time required to program the entire testbed significantly.&lt;br /&gt;
&lt;br /&gt;
Individual sensor nodes in the testbed can also be disabled or enabled the USB interface.  This capability allows node failures to be simulated in the testbed environment, as well as fine tune the density of the network itself when running certain types of experiments.  The introduction of new nodes into the network can also be simulated by enabling nodes at specific times during the run of an experiment.&lt;br /&gt;
&lt;br /&gt;
All of the features described above really boil down to just one thing.  It is possible to run sophisticated experiments in the WSN testbed without ever having to physically change the layout of the testbed or interact with the individual sensor nodes that make it up.  Everything is controllable from the central server, and scripts can be written to perform countless numbers of operations involving each of the capabilites described above.&lt;br /&gt;
&lt;br /&gt;
==Existing Deployment==&lt;br /&gt;
Currently the testbed consists of 78 motes placed throughout Bryan and Jolley Hall.  The figure below shows the placement of these motes in the testbed.  Each room contains a single microserver connected to all of the motes in that room (with the exception of Jolley 519 and Bryan 509C, which have two microservers).&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-deployment.png|thumb|left|600px|Existing deployment]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Proposed Deployment==&lt;br /&gt;
We would like to expand the testbed to include more offices in Jolley Hall, as well as some of the lab spaces.  Below is a figure of the proposed deployment.  The proposed expansion will only add two nodes to the current deployment; the existing 29 nodes in Jolley Hall will be distributed across more offices.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-proposed.png|thumb|left|300px|Proposed deployment]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testbed Software==&lt;br /&gt;
&lt;br /&gt;
The software consists of three pieces: the client, the server, and the user applications.  The client runs on the microservers and manages finding, programming, and communicating with the attached motes.  The server coordinates the clients and the user applications.  The user applications help the user to program, list, and communicate with motes in the system.&lt;br /&gt;
&lt;br /&gt;
===Outlets===&lt;br /&gt;
An &amp;quot;outlet&amp;quot; is the place where a mote is plugged into the microserver.  The outlet is described by the microserver name and the location in the USB topology.  A location in the USB topology is described by the bus, and a list of ports which each child device is plugged into.  For example, if we have a mote plugged into port 3 of a hub, which is plugged into port 2 on the microserver &amp;quot;doogle&amp;quot;, which is serviced by bus 1, then the path of the outlet is &amp;quot;doogle 1-2.3&amp;quot;.  We use this format because the USB topology depends only on where each USB connection is plugged in; it is independent of both order of plugging in and which mote is attached.&lt;br /&gt;
&lt;br /&gt;
===Messages===&lt;br /&gt;
The parts communicate by sending messages to each other.  The messages are normal Python objects that communicate across sockets using Python's &amp;quot;pickling&amp;quot; module.  The pickling module provides methods for marshalling and unmarshalling objects, and allows the programmer to treat the network connection as bidirectional queue of objects.&lt;br /&gt;
&lt;br /&gt;
===Client and Server Implementation===&lt;br /&gt;
The structure of the client and server programs is extremely similar. Both act upon messages generated internally or received from sockets, and create new messages.  The programs center around a &amp;quot;message queue&amp;quot; and an &amp;quot;event loop.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The message queue holds a FIFO queue of tuples.  Each tuple contains the message itself and a &amp;quot;source&amp;quot; value.  Generally the source value holds the connection that the message was received from, allowing the program to reply to the sender.&lt;br /&gt;
&lt;br /&gt;
The event loop, running in its own thread, continuously pulls a message from the message queue and runs a handler method corresponding to the message type.&lt;br /&gt;
&lt;br /&gt;
The client and server programs use a reactor pattern to quickly read data from the sockets and serial ports.  The reactor object runs in its own thread and uses the &amp;quot;select&amp;quot; call to determine when the connections have data ready.  It then calls the handlers for each ready connection.  The handlers will perform some operation on the data, wrap the result in a message, and place the message into the event queue.&lt;br /&gt;
&lt;br /&gt;
Note: The term &amp;quot;handler&amp;quot; is overloaded.  It either refers to a handler for data from a socket or a handler for messages in the message queue.&lt;br /&gt;
&lt;br /&gt;
One reactor handler deserves mentioning: the UnpicklingHandler.  The UnpicklingHandler buffers incoming data until a full object has been read, and then places the object into the event queue.  This way, unpickling becomes a non-blocking event, and we can read from a pickled connection without another thread.&lt;br /&gt;
&lt;br /&gt;
===Startup===&lt;br /&gt;
To bring up the system, the user must start the server and then start the clients on any microservers he wishes to bring up.  The server begins by marking every microserver as &amp;quot;down&amp;quot; in the database, and by listening for connections.  The client begins by connecting to the server and sending a MicroserverUp message with the microserver's name.  The server marks the microserver as &amp;quot;up&amp;quot; and sends a RefreshOutlets message to discover which motes are connected to the microserver.  The microserver replies with an OutletChanged message for each connected mote, which details the outlet name and the mote id.  The server stores the outlet information in the database.&lt;br /&gt;
&lt;br /&gt;
===Programming===&lt;br /&gt;
To program a set of motes, the user runs the &amp;quot;program&amp;quot; program, passing it the program binary and a description of the motes to program.  The user can select to program by mote id, by microserver name, or the entire testbed.  The &amp;quot;program&amp;quot; program sends a Program[Mote$|$Microserver$|$Network]Job message to the server.  The &amp;quot;program&amp;quot; program then waits for a response to the server.  From the message details, the server determines the set of motes to be programmed.  The server creates a ProgrammingJob object, which tracks the progress of the programming request.&lt;br /&gt;
&lt;br /&gt;
Once the set of motes has been determined, the server creates a binary file for each mote.  The server copies the original binary, imprints it with the mote's AM_ID (stored in the database), and moves the new binary to the home directory of the microserver the mote is attached to.  The server then passes a ProgramOutlet message to the microserver.  Upon receiving the message, the microserver runs tos-bsl to flash the binary onto the mote.&lt;br /&gt;
&lt;br /&gt;
When tos-bsl completes, the microserver informs the server whether the programming was successful or not.  The server records the status in the ProgrammingJob object.  When the ProgrammingJob has a result for every mote in the programming set, the server informs the &amp;quot;program&amp;quot; program that the programming is complete.&lt;br /&gt;
&lt;br /&gt;
The slowest part of programming a mote is flashing the binary onto the mote.  Because the flashing takes place on the microserver, we can program motes on different microservers in parallel, allowing us to program the entire testbed in the time it takes to program the motes on a single microserver.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' When programming a mote, you must close any other connections to the mote's serial port.&lt;br /&gt;
&lt;br /&gt;
===Serial Communication===&lt;br /&gt;
The testbed software allows the user to receive packets from the motes' serial ports (sending to the serial ports is not supported yet, and is discussed in the &amp;quot;future work&amp;quot; section).  To receive serial data, the client program connects to the server and sends a Subscribe message.  The server records the client in the list of subscribers and will dispatch incoming packets to the client.  The &amp;quot;subscribe&amp;quot; program, an example of a subscriber, prints out each incoming packet.&lt;br /&gt;
&lt;br /&gt;
When the client discovers a new mote, it opens a connection to the mote's serial port and to the servers &amp;quot;packet&amp;quot; port.  Whenever serial data is ready, the client reads the bytes from the serial port and sends the (raw) data to the server.  The server breaks the data stream up into packets, annotates the packet with the id of the sending mote, and forwards the packet to each subscriber in the subscribers list.&lt;br /&gt;
&lt;br /&gt;
==Current Services==&lt;br /&gt;
&lt;br /&gt;
===Localization===&lt;br /&gt;
We currently have a localization service implemented in which all of the motes in the testbed act as anchor nodes in order to help localize a beacon node roaming throughout the network.  Below is a snapshot of a GUI application we have developed to visualize this localization service in action.  With the denser deployment of motes in the proposed testbed, we hope to become extremely accurate in determining the location of these beacon nodes in the network.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-localization.png|thumb|left|300px|WSN localization application]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this figure we see two beacon nodes (102 and 103) being localized to rooms (519 and 534) respectively.  The purple dots represent anchor nodes deployed in the testbed and the green lines depict which anchors have heard a message sent by one of the beacons.  The localization algorithm used is based on particle filters -- a well understood method of localization used in robotics.  We have expanded the use of the particle filter to the wireless sensor network domain.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Acknowledgments==&lt;br /&gt;
This work is supported by the NSF under a CRI grant (CNS-0708460) and an ITR grant (CCR-0325529).&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=The_WUSTL_Wireless_Sensor_Network_Testbed&amp;diff=1324</id>
		<title>The WUSTL Wireless Sensor Network Testbed</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=The_WUSTL_Wireless_Sensor_Network_Testbed&amp;diff=1324"/>
		<updated>2009-02-28T20:07:15Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: /* Existing Deployment */ enlarge the thumbnail&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align = &amp;quot;center&amp;quot;&lt;br /&gt;
 | [[Image:wsn-wustl-logo.png]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| align = &amp;quot;center&amp;quot;&lt;br /&gt;
 | Contact: [mailto:gwh2@cse.wustl.edu Greg Hackmann]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
 | __TOC__&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
To facilitate advanced research in wireless sensor network technology, we are currently in the process of deploying a wireless sensor network testbed at Washington University in St. Louis.  The testbed currently consists of 31 wireless sensor nodes (motes) placed throughout several office areas in Jolley Hall -- i.e., several grad student offices, the graduate student lounge, several labs, and the two conference rooms.  Our hope in the short term is to expand this testbed to include around 100 motes spread throughout all office areas in Jolley Hall.  Eventually, we would like to expand it to cover Brian Hall as well.&lt;br /&gt;
&lt;br /&gt;
This document serves as an overview of the testbed setup and its current deployment.  It is a living document in the sense that it will be updated as changes to the testbed continue to be made.  In the end it will serve as a source of reference for anyone using the testbed to run sensornet related experiments. &lt;br /&gt;
&lt;br /&gt;
Having a testbed of this size is important for a number of reasons:&lt;br /&gt;
&lt;br /&gt;
* '''Only a handful of testbeds of this size exist in the world today.'''  By being one of the first to have such a testbed, we will be able to conduct experiments that others have previously been unable to run.  Our eventual goal is to make the testbed accessible through a simple web interface, opening it to users across the globe.&lt;br /&gt;
* '''Running large scale wireless sensor network experiments is hard.'''  Programming a single mote can take up to five minutes depending on the size of the binary it is being programmed with.  Without a testbed to streamline the process of programming a large number of motes, programming each mote individually can quickly become a significant bottleneck.  Furthermore, as programming typically takes place by physically attaching a mote to your local machine, deploying them afterwards also takes a significant amount of time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=&amp;quot;+1&amp;quot;&amp;gt;'''IMPORTANT:'''&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Please keep in mind that the motes deployed in the testbed only contain sensors for light, radiation, temperature, and humidity.  There are no microphones or cameras, and there is no plan to EVER include such sensors in the future. The purpose of the testbed is primarily for measuring communication characteristics of the motes and not evaluating the sensitivity or accuracy of its sensors. If you have any privacy concerns about including the testbed in your office please direct any questions to [mailto:wsn@cse.wustl.edu wsn@cse.wustl.edu].&lt;br /&gt;
&lt;br /&gt;
==Testbed Setup==&lt;br /&gt;
Our testbed deployment is based on the [http://www.tkn.tu-berlin.de/publications/papers/real04f-handziski.pdf TWIST architecture] originally developed by the telecommunications group ([http://www.tkn.tu-berlin.de/ TKN]) at the Technical University of Berlin.  The acronmym TWIST stands for &amp;quot;TKN Wireless Indoor Sensor network Testbed&amp;quot;.  It is hierarchical in nature, consisting of three different levels of deployment: sensor nodes, microservers, and a desktop class host/server machine.  A high level view of this three tiered architecture can be seen in the figure below.&lt;br /&gt;
At the lowest tier, sensor nodes are placed throughout the physical environment in order to take sensor readings and/or perform actuation.  They are connected to microservers at the second tier through a USB infrastructure consisting of USB 2.0 compliant hubs and a set of active/passive USB cables.  Messages can be exchanged between sensor nodes and microservers over this interface in both directions.  At the third and final tier exists a dedicated server which connects to all of the microservers over an Ethernet backbone.  The server machine is used to host, among other things, a database containing information about the different sensor nodes and the microservers they are connected to.  This database minimally contains information about the connections that have been established between the sensor nodes and microservers, as well as their current locations.  The server machine is also used to provide a workable interface between the testbed and any end-users.  Users may log onto the server to gain access to the information contained in the testbed database, as well as exchange messages with nodes contained in the testbed.  The entire TWIST architecture is based on cheap, off-the-shelf hardware and uses open-source software at every tier of its deployment.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-architecture.jpg|thumb|left|300px|TWIST architecture]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Having such an architecture enables one to perform tasks not feasible in other WSN deployments. For example, debug messages from individual sensor nodes can be sent to the control station over the USB interface without interfering with a WSN application running in the network.  The USB infrastructure essentially provides an out of band means for collecting important information from each node without clogging up the wireless channel and adversely affecting any experiments being run.  This debug information can also be time stamped by the micorservers using NTP (Network Time Protocol) in order to gather statistics about what is going on at each individual point in the network at any given time.&lt;br /&gt;
&lt;br /&gt;
Programming of sensor nodes in the testbed is also made easier using the three tiered architecture, as a user simply tells the control station which sensor nodes it would like to program, and the control station does the work of distributing this request to the proper microserver.  Information about which sensor node is attached to which microserver can be obtained from the testbed database, and each request can be sent to the proper microserver using a dedicated thread of control.  These requests can then be processed by each microserver in parallel, speeding up the time required to program the entire testbed significantly.&lt;br /&gt;
&lt;br /&gt;
Individual sensor nodes in the testbed can also be disabled or enabled the USB interface.  This capability allows node failures to be simulated in the testbed environment, as well as fine tune the density of the network itself when running certain types of experiments.  The introduction of new nodes into the network can also be simulated by enabling nodes at specific times during the run of an experiment.&lt;br /&gt;
&lt;br /&gt;
All of the features described above really boil down to just one thing.  It is possible to run sophisticated experiments in the WSN testbed without ever having to physically change the layout of the testbed or interact with the individual sensor nodes that make it up.  Everything is controllable from the central server, and scripts can be written to perform countless numbers of operations involving each of the capabilites described above.&lt;br /&gt;
&lt;br /&gt;
==Existing Deployment==&lt;br /&gt;
Currently the testbed consists of 78 motes placed throughout Bryan and Jolley Hall.  The figure below shows the placement of these motes in the testbed.  Each room contains a single microserver connected to all of the motes in that room (with the exception of Jolley 519 and Bryan 509C, which have two microservers).&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-deployment.png|thumb|left|600px|Existing deployment]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Proposed Deployment==&lt;br /&gt;
We would like to expand the testbed to include more offices in Jolley Hall, as well as some of the lab spaces.  Below is a figure of the proposed deployment.  The proposed expansion will only add two nodes to the current deployment; the existing 29 nodes in Jolley Hall will be distributed across more offices.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-proposed.png|thumb|left|300px|Proposed deployment]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testbed Software==&lt;br /&gt;
&lt;br /&gt;
The software consists of three pieces: the client, the server, and the user applications.  The client runs on the microservers and manages finding, programming, and communicating with the attached motes.  The server coordinates the clients and the user applications.  The user applications help the user to program, list, and communicate with motes in the system.&lt;br /&gt;
&lt;br /&gt;
===Outlets===&lt;br /&gt;
An &amp;quot;outlet&amp;quot; is the place where a mote is plugged into the microserver.  The outlet is described by the microserver name and the location in the USB topology.  A location in the USB topology is described by the bus, and a list of ports which each child device is plugged into.  For example, if we have a mote plugged into port 3 of a hub, which is plugged into port 2 on the microserver &amp;quot;doogle&amp;quot;, which is serviced by bus 1, then the path of the outlet is &amp;quot;doogle 1-2.3&amp;quot;.  We use this format because the USB topology depends only on where each USB connection is plugged in; it is independent of both order of plugging in and which mote is attached.&lt;br /&gt;
&lt;br /&gt;
===Messages===&lt;br /&gt;
The parts communicate by sending messages to each other.  The messages are normal Python objects that communicate across sockets using Python's &amp;quot;pickling&amp;quot; module.  The pickling module provides methods for marshalling and unmarshalling objects, and allows the programmer to treat the network connection as bidirectional queue of objects.&lt;br /&gt;
&lt;br /&gt;
===Client and Server Implementation===&lt;br /&gt;
The structure of the client and server programs is extremely similar. Both act upon messages generated internally or received from sockets, and create new messages.  The programs center around a &amp;quot;message queue&amp;quot; and an &amp;quot;event loop.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The message queue holds a FIFO queue of tuples.  Each tuple contains the message itself and a &amp;quot;source&amp;quot; value.  Generally the source value holds the connection that the message was received from, allowing the program to reply to the sender.&lt;br /&gt;
&lt;br /&gt;
The event loop, running in its own thread, continuously pulls a message from the message queue and runs a handler method corresponding to the message type.&lt;br /&gt;
&lt;br /&gt;
The client and server programs use a reactor pattern to quickly read data from the sockets and serial ports.  The reactor object runs in its own thread and uses the &amp;quot;select&amp;quot; call to determine when the connections have data ready.  It then calls the handlers for each ready connection.  The handlers will perform some operation on the data, wrap the result in a message, and place the message into the event queue.&lt;br /&gt;
&lt;br /&gt;
Note: The term &amp;quot;handler&amp;quot; is overloaded.  It either refers to a handler for data from a socket or a handler for messages in the message queue.&lt;br /&gt;
&lt;br /&gt;
One reactor handler deserves mentioning: the UnpicklingHandler.  The UnpicklingHandler buffers incoming data until a full object has been read, and then places the object into the event queue.  This way, unpickling becomes a non-blocking event, and we can read from a pickled connection without another thread.&lt;br /&gt;
&lt;br /&gt;
===Startup===&lt;br /&gt;
To bring up the system, the user must start the server and then start the clients on any microservers he wishes to bring up.  The server begins by marking every microserver as &amp;quot;down&amp;quot; in the database, and by listening for connections.  The client begins by connecting to the server and sending a MicroserverUp message with the microserver's name.  The server marks the microserver as &amp;quot;up&amp;quot; and sends a RefreshOutlets message to discover which motes are connected to the microserver.  The microserver replies with an OutletChanged message for each connected mote, which details the outlet name and the mote id.  The server stores the outlet information in the database.&lt;br /&gt;
&lt;br /&gt;
===Programming===&lt;br /&gt;
To program a set of motes, the user runs the &amp;quot;program&amp;quot; program, passing it the program binary and a description of the motes to program.  The user can select to program by mote id, by microserver name, or the entire testbed.  The &amp;quot;program&amp;quot; program sends a Program[Mote$|$Microserver$|$Network]Job message to the server.  The &amp;quot;program&amp;quot; program then waits for a response to the server.  From the message details, the server determines the set of motes to be programmed.  The server creates a ProgrammingJob object, which tracks the progress of the programming request.&lt;br /&gt;
&lt;br /&gt;
Once the set of motes has been determined, the server creates a binary file for each mote.  The server copies the original binary, imprints it with the mote's AM_ID (stored in the database), and moves the new binary to the home directory of the microserver the mote is attached to.  The server then passes a ProgramOutlet message to the microserver.  Upon receiving the message, the microserver runs tos-bsl to flash the binary onto the mote.&lt;br /&gt;
&lt;br /&gt;
When tos-bsl completes, the microserver informs the server whether the programming was successful or not.  The server records the status in the ProgrammingJob object.  When the ProgrammingJob has a result for every mote in the programming set, the server informs the &amp;quot;program&amp;quot; program that the programming is complete.&lt;br /&gt;
&lt;br /&gt;
The slowest part of programming a mote is flashing the binary onto the mote.  Because the flashing takes place on the microserver, we can program motes on different microservers in parallel, allowing us to program the entire testbed in the time it takes to program the motes on a single microserver.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' When programming a mote, you must close any other connections to the mote's serial port.&lt;br /&gt;
&lt;br /&gt;
===Serial Communication===&lt;br /&gt;
The testbed software allows the user to receive packets from the motes' serial ports (sending to the serial ports is not supported yet, and is discussed in the &amp;quot;future work&amp;quot; section).  To receive serial data, the client program connects to the server and sends a Subscribe message.  The server records the client in the list of subscribers and will dispatch incoming packets to the client.  The &amp;quot;subscribe&amp;quot; program, an example of a subscriber, prints out each incoming packet.&lt;br /&gt;
&lt;br /&gt;
When the client discovers a new mote, it opens a connection to the mote's serial port and to the servers &amp;quot;packet&amp;quot; port.  Whenever serial data is ready, the client reads the bytes from the serial port and sends the (raw) data to the server.  The server breaks the data stream up into packets, annotates the packet with the id of the sending mote, and forwards the packet to each subscriber in the subscribers list.&lt;br /&gt;
&lt;br /&gt;
==Current Services==&lt;br /&gt;
&lt;br /&gt;
===Localization===&lt;br /&gt;
We currently have a localization service implemented in which all of the motes in the testbed act as anchor nodes in order to help localize a beacon node roaming throughout the network.  Below is a snapshot of a GUI application we have developed to visualize this localization service in action.  With the denser deployment of motes in the proposed testbed, we hope to become extremely accurate in determining the location of these beacon nodes in the network.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-localization.png|thumb|left|300px|WSN localization application]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this figure we see two beacon nodes (102 and 103) being localized to rooms (519 and 534) respectively.  The purple dots represent anchor nodes deployed in the testbed and the green lines depict which anchors have heard a message sent by one of the beacons.  The localization algorithm used is based on particle filters -- a well understood method of localization used in robotics.  We have expanded the use of the particle filter to the wireless sensor network domain.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Acknowledgments==&lt;br /&gt;
This work is supported by the NSF under a CRI grant (CNS-0708460) and an ITR grant (CCR-0325529).&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=File:Wsn-proposed.png&amp;diff=1323</id>
		<title>File:Wsn-proposed.png</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=File:Wsn-proposed.png&amp;diff=1323"/>
		<updated>2009-02-28T20:06:34Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=The_WUSTL_Wireless_Sensor_Network_Testbed&amp;diff=1322</id>
		<title>The WUSTL Wireless Sensor Network Testbed</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=The_WUSTL_Wireless_Sensor_Network_Testbed&amp;diff=1322"/>
		<updated>2009-02-28T20:06:23Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: /* Proposed Deployment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align = &amp;quot;center&amp;quot;&lt;br /&gt;
 | [[Image:wsn-wustl-logo.png]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| align = &amp;quot;center&amp;quot;&lt;br /&gt;
 | Contact: [mailto:gwh2@cse.wustl.edu Greg Hackmann]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
 | __TOC__&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
To facilitate advanced research in wireless sensor network technology, we are currently in the process of deploying a wireless sensor network testbed at Washington University in St. Louis.  The testbed currently consists of 31 wireless sensor nodes (motes) placed throughout several office areas in Jolley Hall -- i.e., several grad student offices, the graduate student lounge, several labs, and the two conference rooms.  Our hope in the short term is to expand this testbed to include around 100 motes spread throughout all office areas in Jolley Hall.  Eventually, we would like to expand it to cover Brian Hall as well.&lt;br /&gt;
&lt;br /&gt;
This document serves as an overview of the testbed setup and its current deployment.  It is a living document in the sense that it will be updated as changes to the testbed continue to be made.  In the end it will serve as a source of reference for anyone using the testbed to run sensornet related experiments. &lt;br /&gt;
&lt;br /&gt;
Having a testbed of this size is important for a number of reasons:&lt;br /&gt;
&lt;br /&gt;
* '''Only a handful of testbeds of this size exist in the world today.'''  By being one of the first to have such a testbed, we will be able to conduct experiments that others have previously been unable to run.  Our eventual goal is to make the testbed accessible through a simple web interface, opening it to users across the globe.&lt;br /&gt;
* '''Running large scale wireless sensor network experiments is hard.'''  Programming a single mote can take up to five minutes depending on the size of the binary it is being programmed with.  Without a testbed to streamline the process of programming a large number of motes, programming each mote individually can quickly become a significant bottleneck.  Furthermore, as programming typically takes place by physically attaching a mote to your local machine, deploying them afterwards also takes a significant amount of time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=&amp;quot;+1&amp;quot;&amp;gt;'''IMPORTANT:'''&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Please keep in mind that the motes deployed in the testbed only contain sensors for light, radiation, temperature, and humidity.  There are no microphones or cameras, and there is no plan to EVER include such sensors in the future. The purpose of the testbed is primarily for measuring communication characteristics of the motes and not evaluating the sensitivity or accuracy of its sensors. If you have any privacy concerns about including the testbed in your office please direct any questions to [mailto:wsn@cse.wustl.edu wsn@cse.wustl.edu].&lt;br /&gt;
&lt;br /&gt;
==Testbed Setup==&lt;br /&gt;
Our testbed deployment is based on the [http://www.tkn.tu-berlin.de/publications/papers/real04f-handziski.pdf TWIST architecture] originally developed by the telecommunications group ([http://www.tkn.tu-berlin.de/ TKN]) at the Technical University of Berlin.  The acronmym TWIST stands for &amp;quot;TKN Wireless Indoor Sensor network Testbed&amp;quot;.  It is hierarchical in nature, consisting of three different levels of deployment: sensor nodes, microservers, and a desktop class host/server machine.  A high level view of this three tiered architecture can be seen in the figure below.&lt;br /&gt;
At the lowest tier, sensor nodes are placed throughout the physical environment in order to take sensor readings and/or perform actuation.  They are connected to microservers at the second tier through a USB infrastructure consisting of USB 2.0 compliant hubs and a set of active/passive USB cables.  Messages can be exchanged between sensor nodes and microservers over this interface in both directions.  At the third and final tier exists a dedicated server which connects to all of the microservers over an Ethernet backbone.  The server machine is used to host, among other things, a database containing information about the different sensor nodes and the microservers they are connected to.  This database minimally contains information about the connections that have been established between the sensor nodes and microservers, as well as their current locations.  The server machine is also used to provide a workable interface between the testbed and any end-users.  Users may log onto the server to gain access to the information contained in the testbed database, as well as exchange messages with nodes contained in the testbed.  The entire TWIST architecture is based on cheap, off-the-shelf hardware and uses open-source software at every tier of its deployment.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-architecture.jpg|thumb|left|300px|TWIST architecture]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Having such an architecture enables one to perform tasks not feasible in other WSN deployments. For example, debug messages from individual sensor nodes can be sent to the control station over the USB interface without interfering with a WSN application running in the network.  The USB infrastructure essentially provides an out of band means for collecting important information from each node without clogging up the wireless channel and adversely affecting any experiments being run.  This debug information can also be time stamped by the micorservers using NTP (Network Time Protocol) in order to gather statistics about what is going on at each individual point in the network at any given time.&lt;br /&gt;
&lt;br /&gt;
Programming of sensor nodes in the testbed is also made easier using the three tiered architecture, as a user simply tells the control station which sensor nodes it would like to program, and the control station does the work of distributing this request to the proper microserver.  Information about which sensor node is attached to which microserver can be obtained from the testbed database, and each request can be sent to the proper microserver using a dedicated thread of control.  These requests can then be processed by each microserver in parallel, speeding up the time required to program the entire testbed significantly.&lt;br /&gt;
&lt;br /&gt;
Individual sensor nodes in the testbed can also be disabled or enabled the USB interface.  This capability allows node failures to be simulated in the testbed environment, as well as fine tune the density of the network itself when running certain types of experiments.  The introduction of new nodes into the network can also be simulated by enabling nodes at specific times during the run of an experiment.&lt;br /&gt;
&lt;br /&gt;
All of the features described above really boil down to just one thing.  It is possible to run sophisticated experiments in the WSN testbed without ever having to physically change the layout of the testbed or interact with the individual sensor nodes that make it up.  Everything is controllable from the central server, and scripts can be written to perform countless numbers of operations involving each of the capabilites described above.&lt;br /&gt;
&lt;br /&gt;
==Existing Deployment==&lt;br /&gt;
Currently the testbed consists of 78 motes placed throughout Bryan and Jolley Hall.  The figure below shows the placement of these motes in the testbed.  Each room contains a single microserver connected to all of the motes in that room (with the exception of Jolley 519 and Bryan 509C, which have two microservers).&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-deployment.png|thumb|left|300px|Existing deployment]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Proposed Deployment==&lt;br /&gt;
We would like to expand the testbed to include more offices in Jolley Hall, as well as some of the lab spaces.  Below is a figure of the proposed deployment.  The proposed expansion will only add two nodes to the current deployment; the existing 29 nodes in Jolley Hall will be distributed across more offices.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-proposed.png|thumb|left|300px|Proposed deployment]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testbed Software==&lt;br /&gt;
&lt;br /&gt;
The software consists of three pieces: the client, the server, and the user applications.  The client runs on the microservers and manages finding, programming, and communicating with the attached motes.  The server coordinates the clients and the user applications.  The user applications help the user to program, list, and communicate with motes in the system.&lt;br /&gt;
&lt;br /&gt;
===Outlets===&lt;br /&gt;
An &amp;quot;outlet&amp;quot; is the place where a mote is plugged into the microserver.  The outlet is described by the microserver name and the location in the USB topology.  A location in the USB topology is described by the bus, and a list of ports which each child device is plugged into.  For example, if we have a mote plugged into port 3 of a hub, which is plugged into port 2 on the microserver &amp;quot;doogle&amp;quot;, which is serviced by bus 1, then the path of the outlet is &amp;quot;doogle 1-2.3&amp;quot;.  We use this format because the USB topology depends only on where each USB connection is plugged in; it is independent of both order of plugging in and which mote is attached.&lt;br /&gt;
&lt;br /&gt;
===Messages===&lt;br /&gt;
The parts communicate by sending messages to each other.  The messages are normal Python objects that communicate across sockets using Python's &amp;quot;pickling&amp;quot; module.  The pickling module provides methods for marshalling and unmarshalling objects, and allows the programmer to treat the network connection as bidirectional queue of objects.&lt;br /&gt;
&lt;br /&gt;
===Client and Server Implementation===&lt;br /&gt;
The structure of the client and server programs is extremely similar. Both act upon messages generated internally or received from sockets, and create new messages.  The programs center around a &amp;quot;message queue&amp;quot; and an &amp;quot;event loop.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The message queue holds a FIFO queue of tuples.  Each tuple contains the message itself and a &amp;quot;source&amp;quot; value.  Generally the source value holds the connection that the message was received from, allowing the program to reply to the sender.&lt;br /&gt;
&lt;br /&gt;
The event loop, running in its own thread, continuously pulls a message from the message queue and runs a handler method corresponding to the message type.&lt;br /&gt;
&lt;br /&gt;
The client and server programs use a reactor pattern to quickly read data from the sockets and serial ports.  The reactor object runs in its own thread and uses the &amp;quot;select&amp;quot; call to determine when the connections have data ready.  It then calls the handlers for each ready connection.  The handlers will perform some operation on the data, wrap the result in a message, and place the message into the event queue.&lt;br /&gt;
&lt;br /&gt;
Note: The term &amp;quot;handler&amp;quot; is overloaded.  It either refers to a handler for data from a socket or a handler for messages in the message queue.&lt;br /&gt;
&lt;br /&gt;
One reactor handler deserves mentioning: the UnpicklingHandler.  The UnpicklingHandler buffers incoming data until a full object has been read, and then places the object into the event queue.  This way, unpickling becomes a non-blocking event, and we can read from a pickled connection without another thread.&lt;br /&gt;
&lt;br /&gt;
===Startup===&lt;br /&gt;
To bring up the system, the user must start the server and then start the clients on any microservers he wishes to bring up.  The server begins by marking every microserver as &amp;quot;down&amp;quot; in the database, and by listening for connections.  The client begins by connecting to the server and sending a MicroserverUp message with the microserver's name.  The server marks the microserver as &amp;quot;up&amp;quot; and sends a RefreshOutlets message to discover which motes are connected to the microserver.  The microserver replies with an OutletChanged message for each connected mote, which details the outlet name and the mote id.  The server stores the outlet information in the database.&lt;br /&gt;
&lt;br /&gt;
===Programming===&lt;br /&gt;
To program a set of motes, the user runs the &amp;quot;program&amp;quot; program, passing it the program binary and a description of the motes to program.  The user can select to program by mote id, by microserver name, or the entire testbed.  The &amp;quot;program&amp;quot; program sends a Program[Mote$|$Microserver$|$Network]Job message to the server.  The &amp;quot;program&amp;quot; program then waits for a response to the server.  From the message details, the server determines the set of motes to be programmed.  The server creates a ProgrammingJob object, which tracks the progress of the programming request.&lt;br /&gt;
&lt;br /&gt;
Once the set of motes has been determined, the server creates a binary file for each mote.  The server copies the original binary, imprints it with the mote's AM_ID (stored in the database), and moves the new binary to the home directory of the microserver the mote is attached to.  The server then passes a ProgramOutlet message to the microserver.  Upon receiving the message, the microserver runs tos-bsl to flash the binary onto the mote.&lt;br /&gt;
&lt;br /&gt;
When tos-bsl completes, the microserver informs the server whether the programming was successful or not.  The server records the status in the ProgrammingJob object.  When the ProgrammingJob has a result for every mote in the programming set, the server informs the &amp;quot;program&amp;quot; program that the programming is complete.&lt;br /&gt;
&lt;br /&gt;
The slowest part of programming a mote is flashing the binary onto the mote.  Because the flashing takes place on the microserver, we can program motes on different microservers in parallel, allowing us to program the entire testbed in the time it takes to program the motes on a single microserver.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' When programming a mote, you must close any other connections to the mote's serial port.&lt;br /&gt;
&lt;br /&gt;
===Serial Communication===&lt;br /&gt;
The testbed software allows the user to receive packets from the motes' serial ports (sending to the serial ports is not supported yet, and is discussed in the &amp;quot;future work&amp;quot; section).  To receive serial data, the client program connects to the server and sends a Subscribe message.  The server records the client in the list of subscribers and will dispatch incoming packets to the client.  The &amp;quot;subscribe&amp;quot; program, an example of a subscriber, prints out each incoming packet.&lt;br /&gt;
&lt;br /&gt;
When the client discovers a new mote, it opens a connection to the mote's serial port and to the servers &amp;quot;packet&amp;quot; port.  Whenever serial data is ready, the client reads the bytes from the serial port and sends the (raw) data to the server.  The server breaks the data stream up into packets, annotates the packet with the id of the sending mote, and forwards the packet to each subscriber in the subscribers list.&lt;br /&gt;
&lt;br /&gt;
==Current Services==&lt;br /&gt;
&lt;br /&gt;
===Localization===&lt;br /&gt;
We currently have a localization service implemented in which all of the motes in the testbed act as anchor nodes in order to help localize a beacon node roaming throughout the network.  Below is a snapshot of a GUI application we have developed to visualize this localization service in action.  With the denser deployment of motes in the proposed testbed, we hope to become extremely accurate in determining the location of these beacon nodes in the network.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-localization.png|thumb|left|300px|WSN localization application]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this figure we see two beacon nodes (102 and 103) being localized to rooms (519 and 534) respectively.  The purple dots represent anchor nodes deployed in the testbed and the green lines depict which anchors have heard a message sent by one of the beacons.  The localization algorithm used is based on particle filters -- a well understood method of localization used in robotics.  We have expanded the use of the particle filter to the wireless sensor network domain.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Acknowledgments==&lt;br /&gt;
This work is supported by the NSF under a CRI grant (CNS-0708460) and an ITR grant (CCR-0325529).&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=The_WUSTL_Wireless_Sensor_Network_Testbed&amp;diff=1321</id>
		<title>The WUSTL Wireless Sensor Network Testbed</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=The_WUSTL_Wireless_Sensor_Network_Testbed&amp;diff=1321"/>
		<updated>2009-02-28T20:00:29Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: /* Future Plans */ removing since everything has been done&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align = &amp;quot;center&amp;quot;&lt;br /&gt;
 | [[Image:wsn-wustl-logo.png]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| align = &amp;quot;center&amp;quot;&lt;br /&gt;
 | Contact: [mailto:gwh2@cse.wustl.edu Greg Hackmann]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
 | __TOC__&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
To facilitate advanced research in wireless sensor network technology, we are currently in the process of deploying a wireless sensor network testbed at Washington University in St. Louis.  The testbed currently consists of 31 wireless sensor nodes (motes) placed throughout several office areas in Jolley Hall -- i.e., several grad student offices, the graduate student lounge, several labs, and the two conference rooms.  Our hope in the short term is to expand this testbed to include around 100 motes spread throughout all office areas in Jolley Hall.  Eventually, we would like to expand it to cover Brian Hall as well.&lt;br /&gt;
&lt;br /&gt;
This document serves as an overview of the testbed setup and its current deployment.  It is a living document in the sense that it will be updated as changes to the testbed continue to be made.  In the end it will serve as a source of reference for anyone using the testbed to run sensornet related experiments. &lt;br /&gt;
&lt;br /&gt;
Having a testbed of this size is important for a number of reasons:&lt;br /&gt;
&lt;br /&gt;
* '''Only a handful of testbeds of this size exist in the world today.'''  By being one of the first to have such a testbed, we will be able to conduct experiments that others have previously been unable to run.  Our eventual goal is to make the testbed accessible through a simple web interface, opening it to users across the globe.&lt;br /&gt;
* '''Running large scale wireless sensor network experiments is hard.'''  Programming a single mote can take up to five minutes depending on the size of the binary it is being programmed with.  Without a testbed to streamline the process of programming a large number of motes, programming each mote individually can quickly become a significant bottleneck.  Furthermore, as programming typically takes place by physically attaching a mote to your local machine, deploying them afterwards also takes a significant amount of time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=&amp;quot;+1&amp;quot;&amp;gt;'''IMPORTANT:'''&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Please keep in mind that the motes deployed in the testbed only contain sensors for light, radiation, temperature, and humidity.  There are no microphones or cameras, and there is no plan to EVER include such sensors in the future. The purpose of the testbed is primarily for measuring communication characteristics of the motes and not evaluating the sensitivity or accuracy of its sensors. If you have any privacy concerns about including the testbed in your office please direct any questions to [mailto:wsn@cse.wustl.edu wsn@cse.wustl.edu].&lt;br /&gt;
&lt;br /&gt;
==Testbed Setup==&lt;br /&gt;
Our testbed deployment is based on the [http://www.tkn.tu-berlin.de/publications/papers/real04f-handziski.pdf TWIST architecture] originally developed by the telecommunications group ([http://www.tkn.tu-berlin.de/ TKN]) at the Technical University of Berlin.  The acronmym TWIST stands for &amp;quot;TKN Wireless Indoor Sensor network Testbed&amp;quot;.  It is hierarchical in nature, consisting of three different levels of deployment: sensor nodes, microservers, and a desktop class host/server machine.  A high level view of this three tiered architecture can be seen in the figure below.&lt;br /&gt;
At the lowest tier, sensor nodes are placed throughout the physical environment in order to take sensor readings and/or perform actuation.  They are connected to microservers at the second tier through a USB infrastructure consisting of USB 2.0 compliant hubs and a set of active/passive USB cables.  Messages can be exchanged between sensor nodes and microservers over this interface in both directions.  At the third and final tier exists a dedicated server which connects to all of the microservers over an Ethernet backbone.  The server machine is used to host, among other things, a database containing information about the different sensor nodes and the microservers they are connected to.  This database minimally contains information about the connections that have been established between the sensor nodes and microservers, as well as their current locations.  The server machine is also used to provide a workable interface between the testbed and any end-users.  Users may log onto the server to gain access to the information contained in the testbed database, as well as exchange messages with nodes contained in the testbed.  The entire TWIST architecture is based on cheap, off-the-shelf hardware and uses open-source software at every tier of its deployment.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-architecture.jpg|thumb|left|300px|TWIST architecture]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Having such an architecture enables one to perform tasks not feasible in other WSN deployments. For example, debug messages from individual sensor nodes can be sent to the control station over the USB interface without interfering with a WSN application running in the network.  The USB infrastructure essentially provides an out of band means for collecting important information from each node without clogging up the wireless channel and adversely affecting any experiments being run.  This debug information can also be time stamped by the micorservers using NTP (Network Time Protocol) in order to gather statistics about what is going on at each individual point in the network at any given time.&lt;br /&gt;
&lt;br /&gt;
Programming of sensor nodes in the testbed is also made easier using the three tiered architecture, as a user simply tells the control station which sensor nodes it would like to program, and the control station does the work of distributing this request to the proper microserver.  Information about which sensor node is attached to which microserver can be obtained from the testbed database, and each request can be sent to the proper microserver using a dedicated thread of control.  These requests can then be processed by each microserver in parallel, speeding up the time required to program the entire testbed significantly.&lt;br /&gt;
&lt;br /&gt;
Individual sensor nodes in the testbed can also be disabled or enabled the USB interface.  This capability allows node failures to be simulated in the testbed environment, as well as fine tune the density of the network itself when running certain types of experiments.  The introduction of new nodes into the network can also be simulated by enabling nodes at specific times during the run of an experiment.&lt;br /&gt;
&lt;br /&gt;
All of the features described above really boil down to just one thing.  It is possible to run sophisticated experiments in the WSN testbed without ever having to physically change the layout of the testbed or interact with the individual sensor nodes that make it up.  Everything is controllable from the central server, and scripts can be written to perform countless numbers of operations involving each of the capabilites described above.&lt;br /&gt;
&lt;br /&gt;
==Existing Deployment==&lt;br /&gt;
Currently the testbed consists of 78 motes placed throughout Bryan and Jolley Hall.  The figure below shows the placement of these motes in the testbed.  Each room contains a single microserver connected to all of the motes in that room (with the exception of Jolley 519 and Bryan 509C, which have two microservers).&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-deployment.png|thumb|left|300px|Existing deployment]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Proposed Deployment==&lt;br /&gt;
As stated previously, we would like to expand the testbed to include all of the offices in Jolley Hall, as well as some of the lab spaces.  Below is a figure of the proposed deployment.  It contains 96 motes and would require the support from 39 microservers.  If we were able to run wires through the ceiling, then the number of microservers required would be significantly reduced, as up to 7 motes can be connected to a single microserver at any given time.  As of now, however, we do not have permission to do so, and will thus require a new microserver in each room where motes are being deployed.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-proposed.jpg|thumb|left|300px|Proposed deployment]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testbed Software==&lt;br /&gt;
&lt;br /&gt;
The software consists of three pieces: the client, the server, and the user applications.  The client runs on the microservers and manages finding, programming, and communicating with the attached motes.  The server coordinates the clients and the user applications.  The user applications help the user to program, list, and communicate with motes in the system.&lt;br /&gt;
&lt;br /&gt;
===Outlets===&lt;br /&gt;
An &amp;quot;outlet&amp;quot; is the place where a mote is plugged into the microserver.  The outlet is described by the microserver name and the location in the USB topology.  A location in the USB topology is described by the bus, and a list of ports which each child device is plugged into.  For example, if we have a mote plugged into port 3 of a hub, which is plugged into port 2 on the microserver &amp;quot;doogle&amp;quot;, which is serviced by bus 1, then the path of the outlet is &amp;quot;doogle 1-2.3&amp;quot;.  We use this format because the USB topology depends only on where each USB connection is plugged in; it is independent of both order of plugging in and which mote is attached.&lt;br /&gt;
&lt;br /&gt;
===Messages===&lt;br /&gt;
The parts communicate by sending messages to each other.  The messages are normal Python objects that communicate across sockets using Python's &amp;quot;pickling&amp;quot; module.  The pickling module provides methods for marshalling and unmarshalling objects, and allows the programmer to treat the network connection as bidirectional queue of objects.&lt;br /&gt;
&lt;br /&gt;
===Client and Server Implementation===&lt;br /&gt;
The structure of the client and server programs is extremely similar. Both act upon messages generated internally or received from sockets, and create new messages.  The programs center around a &amp;quot;message queue&amp;quot; and an &amp;quot;event loop.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The message queue holds a FIFO queue of tuples.  Each tuple contains the message itself and a &amp;quot;source&amp;quot; value.  Generally the source value holds the connection that the message was received from, allowing the program to reply to the sender.&lt;br /&gt;
&lt;br /&gt;
The event loop, running in its own thread, continuously pulls a message from the message queue and runs a handler method corresponding to the message type.&lt;br /&gt;
&lt;br /&gt;
The client and server programs use a reactor pattern to quickly read data from the sockets and serial ports.  The reactor object runs in its own thread and uses the &amp;quot;select&amp;quot; call to determine when the connections have data ready.  It then calls the handlers for each ready connection.  The handlers will perform some operation on the data, wrap the result in a message, and place the message into the event queue.&lt;br /&gt;
&lt;br /&gt;
Note: The term &amp;quot;handler&amp;quot; is overloaded.  It either refers to a handler for data from a socket or a handler for messages in the message queue.&lt;br /&gt;
&lt;br /&gt;
One reactor handler deserves mentioning: the UnpicklingHandler.  The UnpicklingHandler buffers incoming data until a full object has been read, and then places the object into the event queue.  This way, unpickling becomes a non-blocking event, and we can read from a pickled connection without another thread.&lt;br /&gt;
&lt;br /&gt;
===Startup===&lt;br /&gt;
To bring up the system, the user must start the server and then start the clients on any microservers he wishes to bring up.  The server begins by marking every microserver as &amp;quot;down&amp;quot; in the database, and by listening for connections.  The client begins by connecting to the server and sending a MicroserverUp message with the microserver's name.  The server marks the microserver as &amp;quot;up&amp;quot; and sends a RefreshOutlets message to discover which motes are connected to the microserver.  The microserver replies with an OutletChanged message for each connected mote, which details the outlet name and the mote id.  The server stores the outlet information in the database.&lt;br /&gt;
&lt;br /&gt;
===Programming===&lt;br /&gt;
To program a set of motes, the user runs the &amp;quot;program&amp;quot; program, passing it the program binary and a description of the motes to program.  The user can select to program by mote id, by microserver name, or the entire testbed.  The &amp;quot;program&amp;quot; program sends a Program[Mote$|$Microserver$|$Network]Job message to the server.  The &amp;quot;program&amp;quot; program then waits for a response to the server.  From the message details, the server determines the set of motes to be programmed.  The server creates a ProgrammingJob object, which tracks the progress of the programming request.&lt;br /&gt;
&lt;br /&gt;
Once the set of motes has been determined, the server creates a binary file for each mote.  The server copies the original binary, imprints it with the mote's AM_ID (stored in the database), and moves the new binary to the home directory of the microserver the mote is attached to.  The server then passes a ProgramOutlet message to the microserver.  Upon receiving the message, the microserver runs tos-bsl to flash the binary onto the mote.&lt;br /&gt;
&lt;br /&gt;
When tos-bsl completes, the microserver informs the server whether the programming was successful or not.  The server records the status in the ProgrammingJob object.  When the ProgrammingJob has a result for every mote in the programming set, the server informs the &amp;quot;program&amp;quot; program that the programming is complete.&lt;br /&gt;
&lt;br /&gt;
The slowest part of programming a mote is flashing the binary onto the mote.  Because the flashing takes place on the microserver, we can program motes on different microservers in parallel, allowing us to program the entire testbed in the time it takes to program the motes on a single microserver.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' When programming a mote, you must close any other connections to the mote's serial port.&lt;br /&gt;
&lt;br /&gt;
===Serial Communication===&lt;br /&gt;
The testbed software allows the user to receive packets from the motes' serial ports (sending to the serial ports is not supported yet, and is discussed in the &amp;quot;future work&amp;quot; section).  To receive serial data, the client program connects to the server and sends a Subscribe message.  The server records the client in the list of subscribers and will dispatch incoming packets to the client.  The &amp;quot;subscribe&amp;quot; program, an example of a subscriber, prints out each incoming packet.&lt;br /&gt;
&lt;br /&gt;
When the client discovers a new mote, it opens a connection to the mote's serial port and to the servers &amp;quot;packet&amp;quot; port.  Whenever serial data is ready, the client reads the bytes from the serial port and sends the (raw) data to the server.  The server breaks the data stream up into packets, annotates the packet with the id of the sending mote, and forwards the packet to each subscriber in the subscribers list.&lt;br /&gt;
&lt;br /&gt;
==Current Services==&lt;br /&gt;
&lt;br /&gt;
===Localization===&lt;br /&gt;
We currently have a localization service implemented in which all of the motes in the testbed act as anchor nodes in order to help localize a beacon node roaming throughout the network.  Below is a snapshot of a GUI application we have developed to visualize this localization service in action.  With the denser deployment of motes in the proposed testbed, we hope to become extremely accurate in determining the location of these beacon nodes in the network.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-localization.png|thumb|left|300px|WSN localization application]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this figure we see two beacon nodes (102 and 103) being localized to rooms (519 and 534) respectively.  The purple dots represent anchor nodes deployed in the testbed and the green lines depict which anchors have heard a message sent by one of the beacons.  The localization algorithm used is based on particle filters -- a well understood method of localization used in robotics.  We have expanded the use of the particle filter to the wireless sensor network domain.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Acknowledgments==&lt;br /&gt;
This work is supported by the NSF under a CRI grant (CNS-0708460) and an ITR grant (CCR-0325529).&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=File:Wsn-deployment.png&amp;diff=1320</id>
		<title>File:Wsn-deployment.png</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=File:Wsn-deployment.png&amp;diff=1320"/>
		<updated>2009-02-28T19:59:32Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: New WSN deployment map&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;New WSN deployment map&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=The_WUSTL_Wireless_Sensor_Network_Testbed&amp;diff=1319</id>
		<title>The WUSTL Wireless Sensor Network Testbed</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=The_WUSTL_Wireless_Sensor_Network_Testbed&amp;diff=1319"/>
		<updated>2009-02-28T19:59:08Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: Undo revision 1318 by Gwh2 (Talk) -- hit the wrong button&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align = &amp;quot;center&amp;quot;&lt;br /&gt;
 | [[Image:wsn-wustl-logo.png]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| align = &amp;quot;center&amp;quot;&lt;br /&gt;
 | Contact: [mailto:gwh2@cse.wustl.edu Greg Hackmann]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
 | __TOC__&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
To facilitate advanced research in wireless sensor network technology, we are currently in the process of deploying a wireless sensor network testbed at Washington University in St. Louis.  The testbed currently consists of 31 wireless sensor nodes (motes) placed throughout several office areas in Jolley Hall -- i.e., several grad student offices, the graduate student lounge, several labs, and the two conference rooms.  Our hope in the short term is to expand this testbed to include around 100 motes spread throughout all office areas in Jolley Hall.  Eventually, we would like to expand it to cover Brian Hall as well.&lt;br /&gt;
&lt;br /&gt;
This document serves as an overview of the testbed setup and its current deployment.  It is a living document in the sense that it will be updated as changes to the testbed continue to be made.  In the end it will serve as a source of reference for anyone using the testbed to run sensornet related experiments. &lt;br /&gt;
&lt;br /&gt;
Having a testbed of this size is important for a number of reasons:&lt;br /&gt;
&lt;br /&gt;
* '''Only a handful of testbeds of this size exist in the world today.'''  By being one of the first to have such a testbed, we will be able to conduct experiments that others have previously been unable to run.  Our eventual goal is to make the testbed accessible through a simple web interface, opening it to users across the globe.&lt;br /&gt;
* '''Running large scale wireless sensor network experiments is hard.'''  Programming a single mote can take up to five minutes depending on the size of the binary it is being programmed with.  Without a testbed to streamline the process of programming a large number of motes, programming each mote individually can quickly become a significant bottleneck.  Furthermore, as programming typically takes place by physically attaching a mote to your local machine, deploying them afterwards also takes a significant amount of time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=&amp;quot;+1&amp;quot;&amp;gt;'''IMPORTANT:'''&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Please keep in mind that the motes deployed in the testbed only contain sensors for light, radiation, temperature, and humidity.  There are no microphones or cameras, and there is no plan to EVER include such sensors in the future. The purpose of the testbed is primarily for measuring communication characteristics of the motes and not evaluating the sensitivity or accuracy of its sensors. If you have any privacy concerns about including the testbed in your office please direct any questions to [mailto:wsn@cse.wustl.edu wsn@cse.wustl.edu].&lt;br /&gt;
&lt;br /&gt;
==Testbed Setup==&lt;br /&gt;
Our testbed deployment is based on the [http://www.tkn.tu-berlin.de/publications/papers/real04f-handziski.pdf TWIST architecture] originally developed by the telecommunications group ([http://www.tkn.tu-berlin.de/ TKN]) at the Technical University of Berlin.  The acronmym TWIST stands for &amp;quot;TKN Wireless Indoor Sensor network Testbed&amp;quot;.  It is hierarchical in nature, consisting of three different levels of deployment: sensor nodes, microservers, and a desktop class host/server machine.  A high level view of this three tiered architecture can be seen in the figure below.&lt;br /&gt;
At the lowest tier, sensor nodes are placed throughout the physical environment in order to take sensor readings and/or perform actuation.  They are connected to microservers at the second tier through a USB infrastructure consisting of USB 2.0 compliant hubs and a set of active/passive USB cables.  Messages can be exchanged between sensor nodes and microservers over this interface in both directions.  At the third and final tier exists a dedicated server which connects to all of the microservers over an Ethernet backbone.  The server machine is used to host, among other things, a database containing information about the different sensor nodes and the microservers they are connected to.  This database minimally contains information about the connections that have been established between the sensor nodes and microservers, as well as their current locations.  The server machine is also used to provide a workable interface between the testbed and any end-users.  Users may log onto the server to gain access to the information contained in the testbed database, as well as exchange messages with nodes contained in the testbed.  The entire TWIST architecture is based on cheap, off-the-shelf hardware and uses open-source software at every tier of its deployment.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-architecture.jpg|thumb|left|300px|TWIST architecture]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Having such an architecture enables one to perform tasks not feasible in other WSN deployments. For example, debug messages from individual sensor nodes can be sent to the control station over the USB interface without interfering with a WSN application running in the network.  The USB infrastructure essentially provides an out of band means for collecting important information from each node without clogging up the wireless channel and adversely affecting any experiments being run.  This debug information can also be time stamped by the micorservers using NTP (Network Time Protocol) in order to gather statistics about what is going on at each individual point in the network at any given time.&lt;br /&gt;
&lt;br /&gt;
Programming of sensor nodes in the testbed is also made easier using the three tiered architecture, as a user simply tells the control station which sensor nodes it would like to program, and the control station does the work of distributing this request to the proper microserver.  Information about which sensor node is attached to which microserver can be obtained from the testbed database, and each request can be sent to the proper microserver using a dedicated thread of control.  These requests can then be processed by each microserver in parallel, speeding up the time required to program the entire testbed significantly.&lt;br /&gt;
&lt;br /&gt;
Individual sensor nodes in the testbed can also be disabled or enabled the USB interface.  This capability allows node failures to be simulated in the testbed environment, as well as fine tune the density of the network itself when running certain types of experiments.  The introduction of new nodes into the network can also be simulated by enabling nodes at specific times during the run of an experiment.&lt;br /&gt;
&lt;br /&gt;
All of the features described above really boil down to just one thing.  It is possible to run sophisticated experiments in the WSN testbed without ever having to physically change the layout of the testbed or interact with the individual sensor nodes that make it up.  Everything is controllable from the central server, and scripts can be written to perform countless numbers of operations involving each of the capabilites described above.&lt;br /&gt;
&lt;br /&gt;
==Existing Deployment==&lt;br /&gt;
Currently the testbed consists of 78 motes placed throughout Bryan and Jolley Hall.  The figure below shows the placement of these motes in the testbed.  Each room contains a single microserver connected to all of the motes in that room (with the exception of Jolley 519 and Bryan 509C, which have two microservers).&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-deployment.png|thumb|left|300px|Existing deployment]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Proposed Deployment==&lt;br /&gt;
As stated previously, we would like to expand the testbed to include all of the offices in Jolley Hall, as well as some of the lab spaces.  Below is a figure of the proposed deployment.  It contains 96 motes and would require the support from 39 microservers.  If we were able to run wires through the ceiling, then the number of microservers required would be significantly reduced, as up to 7 motes can be connected to a single microserver at any given time.  As of now, however, we do not have permission to do so, and will thus require a new microserver in each room where motes are being deployed.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-proposed.jpg|thumb|left|300px|Proposed deployment]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testbed Software==&lt;br /&gt;
&lt;br /&gt;
The software consists of three pieces: the client, the server, and the user applications.  The client runs on the microservers and manages finding, programming, and communicating with the attached motes.  The server coordinates the clients and the user applications.  The user applications help the user to program, list, and communicate with motes in the system.&lt;br /&gt;
&lt;br /&gt;
===Outlets===&lt;br /&gt;
An &amp;quot;outlet&amp;quot; is the place where a mote is plugged into the microserver.  The outlet is described by the microserver name and the location in the USB topology.  A location in the USB topology is described by the bus, and a list of ports which each child device is plugged into.  For example, if we have a mote plugged into port 3 of a hub, which is plugged into port 2 on the microserver &amp;quot;doogle&amp;quot;, which is serviced by bus 1, then the path of the outlet is &amp;quot;doogle 1-2.3&amp;quot;.  We use this format because the USB topology depends only on where each USB connection is plugged in; it is independent of both order of plugging in and which mote is attached.&lt;br /&gt;
&lt;br /&gt;
===Messages===&lt;br /&gt;
The parts communicate by sending messages to each other.  The messages are normal Python objects that communicate across sockets using Python's &amp;quot;pickling&amp;quot; module.  The pickling module provides methods for marshalling and unmarshalling objects, and allows the programmer to treat the network connection as bidirectional queue of objects.&lt;br /&gt;
&lt;br /&gt;
===Client and Server Implementation===&lt;br /&gt;
The structure of the client and server programs is extremely similar. Both act upon messages generated internally or received from sockets, and create new messages.  The programs center around a &amp;quot;message queue&amp;quot; and an &amp;quot;event loop.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The message queue holds a FIFO queue of tuples.  Each tuple contains the message itself and a &amp;quot;source&amp;quot; value.  Generally the source value holds the connection that the message was received from, allowing the program to reply to the sender.&lt;br /&gt;
&lt;br /&gt;
The event loop, running in its own thread, continuously pulls a message from the message queue and runs a handler method corresponding to the message type.&lt;br /&gt;
&lt;br /&gt;
The client and server programs use a reactor pattern to quickly read data from the sockets and serial ports.  The reactor object runs in its own thread and uses the &amp;quot;select&amp;quot; call to determine when the connections have data ready.  It then calls the handlers for each ready connection.  The handlers will perform some operation on the data, wrap the result in a message, and place the message into the event queue.&lt;br /&gt;
&lt;br /&gt;
Note: The term &amp;quot;handler&amp;quot; is overloaded.  It either refers to a handler for data from a socket or a handler for messages in the message queue.&lt;br /&gt;
&lt;br /&gt;
One reactor handler deserves mentioning: the UnpicklingHandler.  The UnpicklingHandler buffers incoming data until a full object has been read, and then places the object into the event queue.  This way, unpickling becomes a non-blocking event, and we can read from a pickled connection without another thread.&lt;br /&gt;
&lt;br /&gt;
===Startup===&lt;br /&gt;
To bring up the system, the user must start the server and then start the clients on any microservers he wishes to bring up.  The server begins by marking every microserver as &amp;quot;down&amp;quot; in the database, and by listening for connections.  The client begins by connecting to the server and sending a MicroserverUp message with the microserver's name.  The server marks the microserver as &amp;quot;up&amp;quot; and sends a RefreshOutlets message to discover which motes are connected to the microserver.  The microserver replies with an OutletChanged message for each connected mote, which details the outlet name and the mote id.  The server stores the outlet information in the database.&lt;br /&gt;
&lt;br /&gt;
===Programming===&lt;br /&gt;
To program a set of motes, the user runs the &amp;quot;program&amp;quot; program, passing it the program binary and a description of the motes to program.  The user can select to program by mote id, by microserver name, or the entire testbed.  The &amp;quot;program&amp;quot; program sends a Program[Mote$|$Microserver$|$Network]Job message to the server.  The &amp;quot;program&amp;quot; program then waits for a response to the server.  From the message details, the server determines the set of motes to be programmed.  The server creates a ProgrammingJob object, which tracks the progress of the programming request.&lt;br /&gt;
&lt;br /&gt;
Once the set of motes has been determined, the server creates a binary file for each mote.  The server copies the original binary, imprints it with the mote's AM_ID (stored in the database), and moves the new binary to the home directory of the microserver the mote is attached to.  The server then passes a ProgramOutlet message to the microserver.  Upon receiving the message, the microserver runs tos-bsl to flash the binary onto the mote.&lt;br /&gt;
&lt;br /&gt;
When tos-bsl completes, the microserver informs the server whether the programming was successful or not.  The server records the status in the ProgrammingJob object.  When the ProgrammingJob has a result for every mote in the programming set, the server informs the &amp;quot;program&amp;quot; program that the programming is complete.&lt;br /&gt;
&lt;br /&gt;
The slowest part of programming a mote is flashing the binary onto the mote.  Because the flashing takes place on the microserver, we can program motes on different microservers in parallel, allowing us to program the entire testbed in the time it takes to program the motes on a single microserver.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' When programming a mote, you must close any other connections to the mote's serial port.&lt;br /&gt;
&lt;br /&gt;
===Serial Communication===&lt;br /&gt;
The testbed software allows the user to receive packets from the motes' serial ports (sending to the serial ports is not supported yet, and is discussed in the &amp;quot;future work&amp;quot; section).  To receive serial data, the client program connects to the server and sends a Subscribe message.  The server records the client in the list of subscribers and will dispatch incoming packets to the client.  The &amp;quot;subscribe&amp;quot; program, an example of a subscriber, prints out each incoming packet.&lt;br /&gt;
&lt;br /&gt;
When the client discovers a new mote, it opens a connection to the mote's serial port and to the servers &amp;quot;packet&amp;quot; port.  Whenever serial data is ready, the client reads the bytes from the serial port and sends the (raw) data to the server.  The server breaks the data stream up into packets, annotates the packet with the id of the sending mote, and forwards the packet to each subscriber in the subscribers list.&lt;br /&gt;
&lt;br /&gt;
==Current Services==&lt;br /&gt;
&lt;br /&gt;
===Localization===&lt;br /&gt;
We currently have a localization service implemented in which all of the motes in the testbed act as anchor nodes in order to help localize a beacon node roaming throughout the network.  Below is a snapshot of a GUI application we have developed to visualize this localization service in action.  With the denser deployment of motes in the proposed testbed, we hope to become extremely accurate in determining the location of these beacon nodes in the network.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-localization.png|thumb|left|300px|WSN localization application]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this figure we see two beacon nodes (102 and 103) being localized to rooms (519 and 534) respectively.  The purple dots represent anchor nodes deployed in the testbed and the green lines depict which anchors have heard a message sent by one of the beacons.  The localization algorithm used is based on particle filters -- a well understood method of localization used in robotics.  We have expanded the use of the particle filter to the wireless sensor network domain.  &lt;br /&gt;
&lt;br /&gt;
==Future Plans==&lt;br /&gt;
&lt;br /&gt;
===Expansion into Bryan Hall===&lt;br /&gt;
After we see how successful of a deployment we have in Jolley Hall, we would like to expand the testbed to include offices in Bryan Hall as well.  The figure below shows a preliminary design of the deployment.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-bryan-hall.jpg|thumb|left|300px|Preliminary Bryan Hall deployment]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Improved Software Infrastructure===&lt;br /&gt;
There are a number of changes that will make the testbed easier to use and run more smoothly.&lt;br /&gt;
&lt;br /&gt;
* '''Hotplugging motes.''' Currently, the client programs must be stopped and restarted if motes are plugging or unplugged.  The client does support refreshing when it receives the SIGUSR1 signal, but currently nothing sends it the signal.  To support hotplugging motes, the microserver needs a script in the hotplug system that sends the client the SIGUSR1 signal whenever a USB event occurs.&lt;br /&gt;
&lt;br /&gt;
* '''Better mote discovery.''' The microserver discovers which motes are attached by looking for instance of the ftdi driver in the sysfs filesystem.  Instead, we can use the Python bindings to the libusb library to more accurately discover which motes are connected.&lt;br /&gt;
&lt;br /&gt;
==Acknowledgments==&lt;br /&gt;
This work is supported by the NSF under a CRI grant (CNS-0708460) and an ITR grant (CCR-0325529).&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=The_WUSTL_Wireless_Sensor_Network_Testbed&amp;diff=1318</id>
		<title>The WUSTL Wireless Sensor Network Testbed</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=The_WUSTL_Wireless_Sensor_Network_Testbed&amp;diff=1318"/>
		<updated>2009-02-28T19:57:13Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: Reverted edits by Gwh2 (Talk); changed back to last version by Liangfok&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align = &amp;quot;center&amp;quot;&lt;br /&gt;
 | [[Image:wsn-wustl-logo.png]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| align = &amp;quot;center&amp;quot;&lt;br /&gt;
 | Contact: [mailto:gwh2@cse.wustl.edu Greg Hackmann]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
 | __TOC__&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
To facilitate advanced research in wireless sensor network technology, we are currently in the process of deploying a wireless sensor network testbed at Washington University in St. Louis.  The testbed currently consists of 31 wireless sensor nodes (motes) placed throughout several office areas in Jolley Hall -- i.e., several grad student offices, the graduate student lounge, several labs, and the two conference rooms.  Our hope in the short term is to expand this testbed to include around 100 motes spread throughout all office areas in Jolley Hall.  Eventually, we would like to expand it to cover Brian Hall as well.&lt;br /&gt;
&lt;br /&gt;
This document serves as an overview of the testbed setup and its current deployment.  It is a living document in the sense that it will be updated as changes to the testbed continue to be made.  In the end it will serve as a source of reference for anyone using the testbed to run sensornet related experiments. &lt;br /&gt;
&lt;br /&gt;
Having a testbed of this size is important for a number of reasons:&lt;br /&gt;
&lt;br /&gt;
* '''Only a handful of testbeds of this size exist in the world today.'''  By being one of the first to have such a testbed, we will be able to conduct experiments that others have previously been unable to run.  Our eventual goal is to make the testbed accessible through a simple web interface, opening it to users across the globe.&lt;br /&gt;
* '''Running large scale wireless sensor network experiments is hard.'''  Programming a single mote can take up to five minutes depending on the size of the binary it is being programmed with.  Without a testbed to streamline the process of programming a large number of motes, programming each mote individually can quickly become a significant bottleneck.  Furthermore, as programming typically takes place by physically attaching a mote to your local machine, deploying them afterwards also takes a significant amount of time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=&amp;quot;+1&amp;quot;&amp;gt;'''IMPORTANT:'''&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Please keep in mind that the motes deployed in the testbed only contain sensors for light, radiation, temperature, and humidity.  There are no microphones or cameras, and there is no plan to EVER include such sensors in the future. The purpose of the testbed is primarily for measuring communication characteristics of the motes and not evaluating the sensitivity or accuracy of its sensors. If you have any privacy concerns about including the testbed in your office please direct any questions to [mailto:wsn@cse.wustl.edu wsn@cse.wustl.edu].&lt;br /&gt;
&lt;br /&gt;
==Testbed Setup==&lt;br /&gt;
Our testbed deployment is based on the [http://www.tkn.tu-berlin.de/publications/papers/real04f-handziski.pdf TWIST architecture] originally developed by the telecommunications group ([http://www.tkn.tu-berlin.de/ TKN]) at the Technical University of Berlin.  The acronmym TWIST stands for &amp;quot;TKN Wireless Indoor Sensor network Testbed&amp;quot;.  It is hierarchical in nature, consisting of three different levels of deployment: sensor nodes, microservers, and a desktop class host/server machine.  A high level view of this three tiered architecture can be seen in the figure below.&lt;br /&gt;
At the lowest tier, sensor nodes are placed throughout the physical environment in order to take sensor readings and/or perform actuation.  They are connected to microservers at the second tier through a USB infrastructure consisting of USB 2.0 compliant hubs and a set of active/passive USB cables.  Messages can be exchanged between sensor nodes and microservers over this interface in both directions.  At the third and final tier exists a dedicated server which connects to all of the microservers over an Ethernet backbone.  The server machine is used to host, among other things, a database containing information about the different sensor nodes and the microservers they are connected to.  This database minimally contains information about the connections that have been established between the sensor nodes and microservers, as well as their current locations.  The server machine is also used to provide a workable interface between the testbed and any end-users.  Users may log onto the server to gain access to the information contained in the testbed database, as well as exchange messages with nodes contained in the testbed.  The entire TWIST architecture is based on cheap, off-the-shelf hardware and uses open-source software at every tier of its deployment.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-architecture.jpg|thumb|left|300px|TWIST architecture]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Having such an architecture enables one to perform tasks not feasible in other WSN deployments. For example, debug messages from individual sensor nodes can be sent to the control station over the USB interface without interfering with a WSN application running in the network.  The USB infrastructure essentially provides an out of band means for collecting important information from each node without clogging up the wireless channel and adversely affecting any experiments being run.  This debug information can also be time stamped by the micorservers using NTP (Network Time Protocol) in order to gather statistics about what is going on at each individual point in the network at any given time.&lt;br /&gt;
&lt;br /&gt;
Programming of sensor nodes in the testbed is also made easier using the three tiered architecture, as a user simply tells the control station which sensor nodes it would like to program, and the control station does the work of distributing this request to the proper microserver.  Information about which sensor node is attached to which microserver can be obtained from the testbed database, and each request can be sent to the proper microserver using a dedicated thread of control.  These requests can then be processed by each microserver in parallel, speeding up the time required to program the entire testbed significantly.&lt;br /&gt;
&lt;br /&gt;
Individual sensor nodes in the testbed can also be disabled or enabled the USB interface.  This capability allows node failures to be simulated in the testbed environment, as well as fine tune the density of the network itself when running certain types of experiments.  The introduction of new nodes into the network can also be simulated by enabling nodes at specific times during the run of an experiment.&lt;br /&gt;
&lt;br /&gt;
All of the features described above really boil down to just one thing.  It is possible to run sophisticated experiments in the WSN testbed without ever having to physically change the layout of the testbed or interact with the individual sensor nodes that make it up.  Everything is controllable from the central server, and scripts can be written to perform countless numbers of operations involving each of the capabilites described above.&lt;br /&gt;
&lt;br /&gt;
==Existing Deployment==&lt;br /&gt;
Currently the testbed consists of 31 motes placed throughout several designated areas in Jolley hall.  The areas chosen were the ones we had access to at the time of the initial deployment.  The figure below shows the placement of these motes in the testbed.  Each room contains a single microserver connected to all of the motes in that room (with the exception of Mobilab (519) which has two microservers).  As we will show later on, we have implemented a simple localization service that runs surprisingly well given such a sparse deployment.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-deployment.jpg|thumb|left|300px|Existing deployment]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Proposed Deployment==&lt;br /&gt;
As stated previously, we would like to expand the testbed to include all of the offices in Jolley Hall, as well as some of the lab spaces.  Below is a figure of the proposed deployment.  It contains 96 motes and would require the support from 39 microservers.  If we were able to run wires through the ceiling, then the number of microservers required would be significantly reduced, as up to 7 motes can be connected to a single microserver at any given time.  As of now, however, we do not have permission to do so, and will thus require a new microserver in each room where motes are being deployed.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-proposed.jpg|thumb|left|300px|Proposed deployment]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testbed Software==&lt;br /&gt;
&lt;br /&gt;
The software consists of three pieces: the client, the server, and the user applications.  The client runs on the microservers and manages finding, programming, and communicating with the attached motes.  The server coordinates the clients and the user applications.  The user applications help the user to program, list, and communicate with motes in the system.&lt;br /&gt;
&lt;br /&gt;
===Outlets===&lt;br /&gt;
An &amp;quot;outlet&amp;quot; is the place where a mote is plugged into the microserver.  The outlet is described by the microserver name and the location in the USB topology.  A location in the USB topology is described by the bus, and a list of ports which each child device is plugged into.  For example, if we have a mote plugged into port 3 of a hub, which is plugged into port 2 on the microserver &amp;quot;doogle&amp;quot;, which is serviced by bus 1, then the path of the outlet is &amp;quot;doogle 1-2.3&amp;quot;.  We use this format because the USB topology depends only on where each USB connection is plugged in; it is independent of both order of plugging in and which mote is attached.&lt;br /&gt;
&lt;br /&gt;
===Messages===&lt;br /&gt;
The parts communicate by sending messages to each other.  The messages are normal Python objects that communicate across sockets using Python's &amp;quot;pickling&amp;quot; module.  The pickling module provides methods for marshalling and unmarshalling objects, and allows the programmer to treat the network connection as bidirectional queue of objects.&lt;br /&gt;
&lt;br /&gt;
===Client and Server Implementation===&lt;br /&gt;
The structure of the client and server programs is extremely similar. Both act upon messages generated internally or received from sockets, and create new messages.  The programs center around a &amp;quot;message queue&amp;quot; and an &amp;quot;event loop.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The message queue holds a FIFO queue of tuples.  Each tuple contains the message itself and a &amp;quot;source&amp;quot; value.  Generally the source value holds the connection that the message was received from, allowing the program to reply to the sender.&lt;br /&gt;
&lt;br /&gt;
The event loop, running in its own thread, continuously pulls a message from the message queue and runs a handler method corresponding to the message type.&lt;br /&gt;
&lt;br /&gt;
The client and server programs use a reactor pattern to quickly read data from the sockets and serial ports.  The reactor object runs in its own thread and uses the &amp;quot;select&amp;quot; call to determine when the connections have data ready.  It then calls the handlers for each ready connection.  The handlers will perform some operation on the data, wrap the result in a message, and place the message into the event queue.&lt;br /&gt;
&lt;br /&gt;
Note: The term &amp;quot;handler&amp;quot; is overloaded.  It either refers to a handler for data from a socket or a handler for messages in the message queue.&lt;br /&gt;
&lt;br /&gt;
One reactor handler deserves mentioning: the UnpicklingHandler.  The UnpicklingHandler buffers incoming data until a full object has been read, and then places the object into the event queue.  This way, unpickling becomes a non-blocking event, and we can read from a pickled connection without another thread.&lt;br /&gt;
&lt;br /&gt;
===Startup===&lt;br /&gt;
To bring up the system, the user must start the server and then start the clients on any microservers he wishes to bring up.  The server begins by marking every microserver as &amp;quot;down&amp;quot; in the database, and by listening for connections.  The client begins by connecting to the server and sending a MicroserverUp message with the microserver's name.  The server marks the microserver as &amp;quot;up&amp;quot; and sends a RefreshOutlets message to discover which motes are connected to the microserver.  The microserver replies with an OutletChanged message for each connected mote, which details the outlet name and the mote id.  The server stores the outlet information in the database.&lt;br /&gt;
&lt;br /&gt;
===Programming===&lt;br /&gt;
To program a set of motes, the user runs the &amp;quot;program&amp;quot; program, passing it the program binary and a description of the motes to program.  The user can select to program by mote id, by microserver name, or the entire testbed.  The &amp;quot;program&amp;quot; program sends a Program[Mote$|$Microserver$|$Network]Job message to the server.  The &amp;quot;program&amp;quot; program then waits for a response to the server.  From the message details, the server determines the set of motes to be programmed.  The server creates a ProgrammingJob object, which tracks the progress of the programming request.&lt;br /&gt;
&lt;br /&gt;
Once the set of motes has been determined, the server creates a binary file for each mote.  The server copies the original binary, imprints it with the mote's AM_ID (stored in the database), and moves the new binary to the home directory of the microserver the mote is attached to.  The server then passes a ProgramOutlet message to the microserver.  Upon receiving the message, the microserver runs tos-bsl to flash the binary onto the mote.&lt;br /&gt;
&lt;br /&gt;
When tos-bsl completes, the microserver informs the server whether the programming was successful or not.  The server records the status in the ProgrammingJob object.  When the ProgrammingJob has a result for every mote in the programming set, the server informs the &amp;quot;program&amp;quot; program that the programming is complete.&lt;br /&gt;
&lt;br /&gt;
The slowest part of programming a mote is flashing the binary onto the mote.  Because the flashing takes place on the microserver, we can program motes on different microservers in parallel, allowing us to program the entire testbed in the time it takes to program the motes on a single microserver.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' When programming a mote, you must close any other connections to the mote's serial port.&lt;br /&gt;
&lt;br /&gt;
===Serial Communication===&lt;br /&gt;
The testbed software allows the user to receive packets from the motes' serial ports (sending to the serial ports is not supported yet, and is discussed in the &amp;quot;future work&amp;quot; section).  To receive serial data, the client program connects to the server and sends a Subscribe message.  The server records the client in the list of subscribers and will dispatch incoming packets to the client.  The &amp;quot;subscribe&amp;quot; program, an example of a subscriber, prints out each incoming packet.&lt;br /&gt;
&lt;br /&gt;
When the client discovers a new mote, it opens a connection to the mote's serial port and to the servers &amp;quot;packet&amp;quot; port.  Whenever serial data is ready, the client reads the bytes from the serial port and sends the (raw) data to the server.  The server breaks the data stream up into packets, annotates the packet with the id of the sending mote, and forwards the packet to each subscriber in the subscribers list.&lt;br /&gt;
&lt;br /&gt;
==Current Services==&lt;br /&gt;
&lt;br /&gt;
===Localization===&lt;br /&gt;
We currently have a localization service implemented in which all of the motes in the testbed act as anchor nodes in order to help localize a beacon node roaming throughout the network.  Below is a snapshot of a GUI application we have developed to visualize this localization service in action.  With the denser deployment of motes in the proposed testbed, we hope to become extremely accurate in determining the location of these beacon nodes in the network.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-localization.png|thumb|left|300px|WSN localization application]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this figure we see two beacon nodes (102 and 103) being localized to rooms (519 and 534) respectively.  The purple dots represent anchor nodes deployed in the testbed and the green lines depict which anchors have heard a message sent by one of the beacons.  The localization algorithm used is based on particle filters -- a well understood method of localization used in robotics.  We have expanded the use of the particle filter to the wireless sensor network domain.  &lt;br /&gt;
&lt;br /&gt;
==Future Plans==&lt;br /&gt;
&lt;br /&gt;
===Expansion into Bryan Hall===&lt;br /&gt;
After we see how successful of a deployment we have in Jolley Hall, we would like to expand the testbed to include offices in Bryan Hall as well.  The figure below shows a preliminary design of the deployment.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-bryan-hall.jpg|thumb|left|300px|Preliminary Bryan Hall deployment]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Improved Software Infrastructure===&lt;br /&gt;
There are a number of changes that will make the testbed easier to use and run more smoothly.&lt;br /&gt;
&lt;br /&gt;
* '''Hotplugging motes.''' Currently, the client programs must be stopped and restarted if motes are plugging or unplugged.  The client does support refreshing when it receives the SIGUSR1 signal, but currently nothing sends it the signal.  To support hotplugging motes, the microserver needs a script in the hotplug system that sends the client the SIGUSR1 signal whenever a USB event occurs.&lt;br /&gt;
&lt;br /&gt;
* '''Better mote discovery.''' The microserver discovers which motes are attached by looking for instance of the ftdi driver in the sysfs filesystem.  Instead, we can use the Python bindings to the libusb library to more accurately discover which motes are connected.&lt;br /&gt;
&lt;br /&gt;
==Acknowledgments==&lt;br /&gt;
This work is supported by the NSF under a CRI grant (CNS-0708460) and an ITR grant (CCR-0325529).&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=The_WUSTL_Wireless_Sensor_Network_Testbed&amp;diff=1317</id>
		<title>The WUSTL Wireless Sensor Network Testbed</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=The_WUSTL_Wireless_Sensor_Network_Testbed&amp;diff=1317"/>
		<updated>2009-02-28T19:56:51Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: /* Existing Deployment */ the new testbed map is a PNG&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align = &amp;quot;center&amp;quot;&lt;br /&gt;
 | [[Image:wsn-wustl-logo.png]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| align = &amp;quot;center&amp;quot;&lt;br /&gt;
 | Contact: [mailto:gwh2@cse.wustl.edu Greg Hackmann]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
 | __TOC__&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
To facilitate advanced research in wireless sensor network technology, we are currently in the process of deploying a wireless sensor network testbed at Washington University in St. Louis.  The testbed currently consists of 31 wireless sensor nodes (motes) placed throughout several office areas in Jolley Hall -- i.e., several grad student offices, the graduate student lounge, several labs, and the two conference rooms.  Our hope in the short term is to expand this testbed to include around 100 motes spread throughout all office areas in Jolley Hall.  Eventually, we would like to expand it to cover Brian Hall as well.&lt;br /&gt;
&lt;br /&gt;
This document serves as an overview of the testbed setup and its current deployment.  It is a living document in the sense that it will be updated as changes to the testbed continue to be made.  In the end it will serve as a source of reference for anyone using the testbed to run sensornet related experiments. &lt;br /&gt;
&lt;br /&gt;
Having a testbed of this size is important for a number of reasons:&lt;br /&gt;
&lt;br /&gt;
* '''Only a handful of testbeds of this size exist in the world today.'''  By being one of the first to have such a testbed, we will be able to conduct experiments that others have previously been unable to run.  Our eventual goal is to make the testbed accessible through a simple web interface, opening it to users across the globe.&lt;br /&gt;
* '''Running large scale wireless sensor network experiments is hard.'''  Programming a single mote can take up to five minutes depending on the size of the binary it is being programmed with.  Without a testbed to streamline the process of programming a large number of motes, programming each mote individually can quickly become a significant bottleneck.  Furthermore, as programming typically takes place by physically attaching a mote to your local machine, deploying them afterwards also takes a significant amount of time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=&amp;quot;+1&amp;quot;&amp;gt;'''IMPORTANT:'''&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Please keep in mind that the motes deployed in the testbed only contain sensors for light, radiation, temperature, and humidity.  There are no microphones or cameras, and there is no plan to EVER include such sensors in the future. The purpose of the testbed is primarily for measuring communication characteristics of the motes and not evaluating the sensitivity or accuracy of its sensors. If you have any privacy concerns about including the testbed in your office please direct any questions to [mailto:wsn@cse.wustl.edu wsn@cse.wustl.edu].&lt;br /&gt;
&lt;br /&gt;
==Testbed Setup==&lt;br /&gt;
Our testbed deployment is based on the [http://www.tkn.tu-berlin.de/publications/papers/real04f-handziski.pdf TWIST architecture] originally developed by the telecommunications group ([http://www.tkn.tu-berlin.de/ TKN]) at the Technical University of Berlin.  The acronmym TWIST stands for &amp;quot;TKN Wireless Indoor Sensor network Testbed&amp;quot;.  It is hierarchical in nature, consisting of three different levels of deployment: sensor nodes, microservers, and a desktop class host/server machine.  A high level view of this three tiered architecture can be seen in the figure below.&lt;br /&gt;
At the lowest tier, sensor nodes are placed throughout the physical environment in order to take sensor readings and/or perform actuation.  They are connected to microservers at the second tier through a USB infrastructure consisting of USB 2.0 compliant hubs and a set of active/passive USB cables.  Messages can be exchanged between sensor nodes and microservers over this interface in both directions.  At the third and final tier exists a dedicated server which connects to all of the microservers over an Ethernet backbone.  The server machine is used to host, among other things, a database containing information about the different sensor nodes and the microservers they are connected to.  This database minimally contains information about the connections that have been established between the sensor nodes and microservers, as well as their current locations.  The server machine is also used to provide a workable interface between the testbed and any end-users.  Users may log onto the server to gain access to the information contained in the testbed database, as well as exchange messages with nodes contained in the testbed.  The entire TWIST architecture is based on cheap, off-the-shelf hardware and uses open-source software at every tier of its deployment.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-architecture.jpg|thumb|left|300px|TWIST architecture]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Having such an architecture enables one to perform tasks not feasible in other WSN deployments. For example, debug messages from individual sensor nodes can be sent to the control station over the USB interface without interfering with a WSN application running in the network.  The USB infrastructure essentially provides an out of band means for collecting important information from each node without clogging up the wireless channel and adversely affecting any experiments being run.  This debug information can also be time stamped by the micorservers using NTP (Network Time Protocol) in order to gather statistics about what is going on at each individual point in the network at any given time.&lt;br /&gt;
&lt;br /&gt;
Programming of sensor nodes in the testbed is also made easier using the three tiered architecture, as a user simply tells the control station which sensor nodes it would like to program, and the control station does the work of distributing this request to the proper microserver.  Information about which sensor node is attached to which microserver can be obtained from the testbed database, and each request can be sent to the proper microserver using a dedicated thread of control.  These requests can then be processed by each microserver in parallel, speeding up the time required to program the entire testbed significantly.&lt;br /&gt;
&lt;br /&gt;
Individual sensor nodes in the testbed can also be disabled or enabled the USB interface.  This capability allows node failures to be simulated in the testbed environment, as well as fine tune the density of the network itself when running certain types of experiments.  The introduction of new nodes into the network can also be simulated by enabling nodes at specific times during the run of an experiment.&lt;br /&gt;
&lt;br /&gt;
All of the features described above really boil down to just one thing.  It is possible to run sophisticated experiments in the WSN testbed without ever having to physically change the layout of the testbed or interact with the individual sensor nodes that make it up.  Everything is controllable from the central server, and scripts can be written to perform countless numbers of operations involving each of the capabilites described above.&lt;br /&gt;
&lt;br /&gt;
==Existing Deployment==&lt;br /&gt;
Currently the testbed consists of 78 motes placed throughout Bryan and Jolley Hall.  The figure below shows the placement of these motes in the testbed.  Each room contains a single microserver connected to all of the motes in that room (with the exception of Jolley 519 and Bryan 509C, which have two microservers).&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-deployment.png|thumb|left|300px|Existing deployment]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Proposed Deployment==&lt;br /&gt;
As stated previously, we would like to expand the testbed to include all of the offices in Jolley Hall, as well as some of the lab spaces.  Below is a figure of the proposed deployment.  It contains 96 motes and would require the support from 39 microservers.  If we were able to run wires through the ceiling, then the number of microservers required would be significantly reduced, as up to 7 motes can be connected to a single microserver at any given time.  As of now, however, we do not have permission to do so, and will thus require a new microserver in each room where motes are being deployed.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-proposed.jpg|thumb|left|300px|Proposed deployment]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testbed Software==&lt;br /&gt;
&lt;br /&gt;
The software consists of three pieces: the client, the server, and the user applications.  The client runs on the microservers and manages finding, programming, and communicating with the attached motes.  The server coordinates the clients and the user applications.  The user applications help the user to program, list, and communicate with motes in the system.&lt;br /&gt;
&lt;br /&gt;
===Outlets===&lt;br /&gt;
An &amp;quot;outlet&amp;quot; is the place where a mote is plugged into the microserver.  The outlet is described by the microserver name and the location in the USB topology.  A location in the USB topology is described by the bus, and a list of ports which each child device is plugged into.  For example, if we have a mote plugged into port 3 of a hub, which is plugged into port 2 on the microserver &amp;quot;doogle&amp;quot;, which is serviced by bus 1, then the path of the outlet is &amp;quot;doogle 1-2.3&amp;quot;.  We use this format because the USB topology depends only on where each USB connection is plugged in; it is independent of both order of plugging in and which mote is attached.&lt;br /&gt;
&lt;br /&gt;
===Messages===&lt;br /&gt;
The parts communicate by sending messages to each other.  The messages are normal Python objects that communicate across sockets using Python's &amp;quot;pickling&amp;quot; module.  The pickling module provides methods for marshalling and unmarshalling objects, and allows the programmer to treat the network connection as bidirectional queue of objects.&lt;br /&gt;
&lt;br /&gt;
===Client and Server Implementation===&lt;br /&gt;
The structure of the client and server programs is extremely similar. Both act upon messages generated internally or received from sockets, and create new messages.  The programs center around a &amp;quot;message queue&amp;quot; and an &amp;quot;event loop.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The message queue holds a FIFO queue of tuples.  Each tuple contains the message itself and a &amp;quot;source&amp;quot; value.  Generally the source value holds the connection that the message was received from, allowing the program to reply to the sender.&lt;br /&gt;
&lt;br /&gt;
The event loop, running in its own thread, continuously pulls a message from the message queue and runs a handler method corresponding to the message type.&lt;br /&gt;
&lt;br /&gt;
The client and server programs use a reactor pattern to quickly read data from the sockets and serial ports.  The reactor object runs in its own thread and uses the &amp;quot;select&amp;quot; call to determine when the connections have data ready.  It then calls the handlers for each ready connection.  The handlers will perform some operation on the data, wrap the result in a message, and place the message into the event queue.&lt;br /&gt;
&lt;br /&gt;
Note: The term &amp;quot;handler&amp;quot; is overloaded.  It either refers to a handler for data from a socket or a handler for messages in the message queue.&lt;br /&gt;
&lt;br /&gt;
One reactor handler deserves mentioning: the UnpicklingHandler.  The UnpicklingHandler buffers incoming data until a full object has been read, and then places the object into the event queue.  This way, unpickling becomes a non-blocking event, and we can read from a pickled connection without another thread.&lt;br /&gt;
&lt;br /&gt;
===Startup===&lt;br /&gt;
To bring up the system, the user must start the server and then start the clients on any microservers he wishes to bring up.  The server begins by marking every microserver as &amp;quot;down&amp;quot; in the database, and by listening for connections.  The client begins by connecting to the server and sending a MicroserverUp message with the microserver's name.  The server marks the microserver as &amp;quot;up&amp;quot; and sends a RefreshOutlets message to discover which motes are connected to the microserver.  The microserver replies with an OutletChanged message for each connected mote, which details the outlet name and the mote id.  The server stores the outlet information in the database.&lt;br /&gt;
&lt;br /&gt;
===Programming===&lt;br /&gt;
To program a set of motes, the user runs the &amp;quot;program&amp;quot; program, passing it the program binary and a description of the motes to program.  The user can select to program by mote id, by microserver name, or the entire testbed.  The &amp;quot;program&amp;quot; program sends a Program[Mote$|$Microserver$|$Network]Job message to the server.  The &amp;quot;program&amp;quot; program then waits for a response to the server.  From the message details, the server determines the set of motes to be programmed.  The server creates a ProgrammingJob object, which tracks the progress of the programming request.&lt;br /&gt;
&lt;br /&gt;
Once the set of motes has been determined, the server creates a binary file for each mote.  The server copies the original binary, imprints it with the mote's AM_ID (stored in the database), and moves the new binary to the home directory of the microserver the mote is attached to.  The server then passes a ProgramOutlet message to the microserver.  Upon receiving the message, the microserver runs tos-bsl to flash the binary onto the mote.&lt;br /&gt;
&lt;br /&gt;
When tos-bsl completes, the microserver informs the server whether the programming was successful or not.  The server records the status in the ProgrammingJob object.  When the ProgrammingJob has a result for every mote in the programming set, the server informs the &amp;quot;program&amp;quot; program that the programming is complete.&lt;br /&gt;
&lt;br /&gt;
The slowest part of programming a mote is flashing the binary onto the mote.  Because the flashing takes place on the microserver, we can program motes on different microservers in parallel, allowing us to program the entire testbed in the time it takes to program the motes on a single microserver.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' When programming a mote, you must close any other connections to the mote's serial port.&lt;br /&gt;
&lt;br /&gt;
===Serial Communication===&lt;br /&gt;
The testbed software allows the user to receive packets from the motes' serial ports (sending to the serial ports is not supported yet, and is discussed in the &amp;quot;future work&amp;quot; section).  To receive serial data, the client program connects to the server and sends a Subscribe message.  The server records the client in the list of subscribers and will dispatch incoming packets to the client.  The &amp;quot;subscribe&amp;quot; program, an example of a subscriber, prints out each incoming packet.&lt;br /&gt;
&lt;br /&gt;
When the client discovers a new mote, it opens a connection to the mote's serial port and to the servers &amp;quot;packet&amp;quot; port.  Whenever serial data is ready, the client reads the bytes from the serial port and sends the (raw) data to the server.  The server breaks the data stream up into packets, annotates the packet with the id of the sending mote, and forwards the packet to each subscriber in the subscribers list.&lt;br /&gt;
&lt;br /&gt;
==Current Services==&lt;br /&gt;
&lt;br /&gt;
===Localization===&lt;br /&gt;
We currently have a localization service implemented in which all of the motes in the testbed act as anchor nodes in order to help localize a beacon node roaming throughout the network.  Below is a snapshot of a GUI application we have developed to visualize this localization service in action.  With the denser deployment of motes in the proposed testbed, we hope to become extremely accurate in determining the location of these beacon nodes in the network.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-localization.png|thumb|left|300px|WSN localization application]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this figure we see two beacon nodes (102 and 103) being localized to rooms (519 and 534) respectively.  The purple dots represent anchor nodes deployed in the testbed and the green lines depict which anchors have heard a message sent by one of the beacons.  The localization algorithm used is based on particle filters -- a well understood method of localization used in robotics.  We have expanded the use of the particle filter to the wireless sensor network domain.  &lt;br /&gt;
&lt;br /&gt;
==Future Plans==&lt;br /&gt;
&lt;br /&gt;
===Expansion into Bryan Hall===&lt;br /&gt;
After we see how successful of a deployment we have in Jolley Hall, we would like to expand the testbed to include offices in Bryan Hall as well.  The figure below shows a preliminary design of the deployment.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-bryan-hall.jpg|thumb|left|300px|Preliminary Bryan Hall deployment]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Improved Software Infrastructure===&lt;br /&gt;
There are a number of changes that will make the testbed easier to use and run more smoothly.&lt;br /&gt;
&lt;br /&gt;
* '''Hotplugging motes.''' Currently, the client programs must be stopped and restarted if motes are plugging or unplugged.  The client does support refreshing when it receives the SIGUSR1 signal, but currently nothing sends it the signal.  To support hotplugging motes, the microserver needs a script in the hotplug system that sends the client the SIGUSR1 signal whenever a USB event occurs.&lt;br /&gt;
&lt;br /&gt;
* '''Better mote discovery.''' The microserver discovers which motes are attached by looking for instance of the ftdi driver in the sysfs filesystem.  Instead, we can use the Python bindings to the libusb library to more accurately discover which motes are connected.&lt;br /&gt;
&lt;br /&gt;
==Acknowledgments==&lt;br /&gt;
This work is supported by the NSF under a CRI grant (CNS-0708460) and an ITR grant (CCR-0325529).&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=File:Wsn-deployment.jpg&amp;diff=1316</id>
		<title>File:Wsn-deployment.jpg</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=File:Wsn-deployment.jpg&amp;diff=1316"/>
		<updated>2009-02-28T19:54:11Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: uploaded a new version of &amp;quot;Image:Wsn-deployment.jpg&amp;quot;: Reverted to version as of 22:04, 6 December 2007&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=File:Wsn-deployment.jpg&amp;diff=1315</id>
		<title>File:Wsn-deployment.jpg</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=File:Wsn-deployment.jpg&amp;diff=1315"/>
		<updated>2009-02-28T19:52:48Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: uploaded a new version of &amp;quot;Image:Wsn-deployment.jpg&amp;quot;: Updated to show Bryan Hall deployment&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=The_WUSTL_Wireless_Sensor_Network_Testbed&amp;diff=1314</id>
		<title>The WUSTL Wireless Sensor Network Testbed</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=The_WUSTL_Wireless_Sensor_Network_Testbed&amp;diff=1314"/>
		<updated>2009-02-28T19:52:05Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: /* Existing Deployment */ updated to show Bryan Hall expansion&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align = &amp;quot;center&amp;quot;&lt;br /&gt;
 | [[Image:wsn-wustl-logo.png]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| align = &amp;quot;center&amp;quot;&lt;br /&gt;
 | Contact: [mailto:gwh2@cse.wustl.edu Greg Hackmann]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
 | __TOC__&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
To facilitate advanced research in wireless sensor network technology, we are currently in the process of deploying a wireless sensor network testbed at Washington University in St. Louis.  The testbed currently consists of 31 wireless sensor nodes (motes) placed throughout several office areas in Jolley Hall -- i.e., several grad student offices, the graduate student lounge, several labs, and the two conference rooms.  Our hope in the short term is to expand this testbed to include around 100 motes spread throughout all office areas in Jolley Hall.  Eventually, we would like to expand it to cover Brian Hall as well.&lt;br /&gt;
&lt;br /&gt;
This document serves as an overview of the testbed setup and its current deployment.  It is a living document in the sense that it will be updated as changes to the testbed continue to be made.  In the end it will serve as a source of reference for anyone using the testbed to run sensornet related experiments. &lt;br /&gt;
&lt;br /&gt;
Having a testbed of this size is important for a number of reasons:&lt;br /&gt;
&lt;br /&gt;
* '''Only a handful of testbeds of this size exist in the world today.'''  By being one of the first to have such a testbed, we will be able to conduct experiments that others have previously been unable to run.  Our eventual goal is to make the testbed accessible through a simple web interface, opening it to users across the globe.&lt;br /&gt;
* '''Running large scale wireless sensor network experiments is hard.'''  Programming a single mote can take up to five minutes depending on the size of the binary it is being programmed with.  Without a testbed to streamline the process of programming a large number of motes, programming each mote individually can quickly become a significant bottleneck.  Furthermore, as programming typically takes place by physically attaching a mote to your local machine, deploying them afterwards also takes a significant amount of time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=&amp;quot;+1&amp;quot;&amp;gt;'''IMPORTANT:'''&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Please keep in mind that the motes deployed in the testbed only contain sensors for light, radiation, temperature, and humidity.  There are no microphones or cameras, and there is no plan to EVER include such sensors in the future. The purpose of the testbed is primarily for measuring communication characteristics of the motes and not evaluating the sensitivity or accuracy of its sensors. If you have any privacy concerns about including the testbed in your office please direct any questions to [mailto:wsn@cse.wustl.edu wsn@cse.wustl.edu].&lt;br /&gt;
&lt;br /&gt;
==Testbed Setup==&lt;br /&gt;
Our testbed deployment is based on the [http://www.tkn.tu-berlin.de/publications/papers/real04f-handziski.pdf TWIST architecture] originally developed by the telecommunications group ([http://www.tkn.tu-berlin.de/ TKN]) at the Technical University of Berlin.  The acronmym TWIST stands for &amp;quot;TKN Wireless Indoor Sensor network Testbed&amp;quot;.  It is hierarchical in nature, consisting of three different levels of deployment: sensor nodes, microservers, and a desktop class host/server machine.  A high level view of this three tiered architecture can be seen in the figure below.&lt;br /&gt;
At the lowest tier, sensor nodes are placed throughout the physical environment in order to take sensor readings and/or perform actuation.  They are connected to microservers at the second tier through a USB infrastructure consisting of USB 2.0 compliant hubs and a set of active/passive USB cables.  Messages can be exchanged between sensor nodes and microservers over this interface in both directions.  At the third and final tier exists a dedicated server which connects to all of the microservers over an Ethernet backbone.  The server machine is used to host, among other things, a database containing information about the different sensor nodes and the microservers they are connected to.  This database minimally contains information about the connections that have been established between the sensor nodes and microservers, as well as their current locations.  The server machine is also used to provide a workable interface between the testbed and any end-users.  Users may log onto the server to gain access to the information contained in the testbed database, as well as exchange messages with nodes contained in the testbed.  The entire TWIST architecture is based on cheap, off-the-shelf hardware and uses open-source software at every tier of its deployment.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-architecture.jpg|thumb|left|300px|TWIST architecture]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Having such an architecture enables one to perform tasks not feasible in other WSN deployments. For example, debug messages from individual sensor nodes can be sent to the control station over the USB interface without interfering with a WSN application running in the network.  The USB infrastructure essentially provides an out of band means for collecting important information from each node without clogging up the wireless channel and adversely affecting any experiments being run.  This debug information can also be time stamped by the micorservers using NTP (Network Time Protocol) in order to gather statistics about what is going on at each individual point in the network at any given time.&lt;br /&gt;
&lt;br /&gt;
Programming of sensor nodes in the testbed is also made easier using the three tiered architecture, as a user simply tells the control station which sensor nodes it would like to program, and the control station does the work of distributing this request to the proper microserver.  Information about which sensor node is attached to which microserver can be obtained from the testbed database, and each request can be sent to the proper microserver using a dedicated thread of control.  These requests can then be processed by each microserver in parallel, speeding up the time required to program the entire testbed significantly.&lt;br /&gt;
&lt;br /&gt;
Individual sensor nodes in the testbed can also be disabled or enabled the USB interface.  This capability allows node failures to be simulated in the testbed environment, as well as fine tune the density of the network itself when running certain types of experiments.  The introduction of new nodes into the network can also be simulated by enabling nodes at specific times during the run of an experiment.&lt;br /&gt;
&lt;br /&gt;
All of the features described above really boil down to just one thing.  It is possible to run sophisticated experiments in the WSN testbed without ever having to physically change the layout of the testbed or interact with the individual sensor nodes that make it up.  Everything is controllable from the central server, and scripts can be written to perform countless numbers of operations involving each of the capabilites described above.&lt;br /&gt;
&lt;br /&gt;
==Existing Deployment==&lt;br /&gt;
Currently the testbed consists of 78 motes placed throughout Bryan and Jolley Hall.  The figure below shows the placement of these motes in the testbed.  Each room contains a single microserver connected to all of the motes in that room (with the exception of Jolley 519 and Bryan 509C, which have two microservers).&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-deployment.jpg|thumb|left|300px|Existing deployment]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Proposed Deployment==&lt;br /&gt;
As stated previously, we would like to expand the testbed to include all of the offices in Jolley Hall, as well as some of the lab spaces.  Below is a figure of the proposed deployment.  It contains 96 motes and would require the support from 39 microservers.  If we were able to run wires through the ceiling, then the number of microservers required would be significantly reduced, as up to 7 motes can be connected to a single microserver at any given time.  As of now, however, we do not have permission to do so, and will thus require a new microserver in each room where motes are being deployed.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-proposed.jpg|thumb|left|300px|Proposed deployment]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testbed Software==&lt;br /&gt;
&lt;br /&gt;
The software consists of three pieces: the client, the server, and the user applications.  The client runs on the microservers and manages finding, programming, and communicating with the attached motes.  The server coordinates the clients and the user applications.  The user applications help the user to program, list, and communicate with motes in the system.&lt;br /&gt;
&lt;br /&gt;
===Outlets===&lt;br /&gt;
An &amp;quot;outlet&amp;quot; is the place where a mote is plugged into the microserver.  The outlet is described by the microserver name and the location in the USB topology.  A location in the USB topology is described by the bus, and a list of ports which each child device is plugged into.  For example, if we have a mote plugged into port 3 of a hub, which is plugged into port 2 on the microserver &amp;quot;doogle&amp;quot;, which is serviced by bus 1, then the path of the outlet is &amp;quot;doogle 1-2.3&amp;quot;.  We use this format because the USB topology depends only on where each USB connection is plugged in; it is independent of both order of plugging in and which mote is attached.&lt;br /&gt;
&lt;br /&gt;
===Messages===&lt;br /&gt;
The parts communicate by sending messages to each other.  The messages are normal Python objects that communicate across sockets using Python's &amp;quot;pickling&amp;quot; module.  The pickling module provides methods for marshalling and unmarshalling objects, and allows the programmer to treat the network connection as bidirectional queue of objects.&lt;br /&gt;
&lt;br /&gt;
===Client and Server Implementation===&lt;br /&gt;
The structure of the client and server programs is extremely similar. Both act upon messages generated internally or received from sockets, and create new messages.  The programs center around a &amp;quot;message queue&amp;quot; and an &amp;quot;event loop.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The message queue holds a FIFO queue of tuples.  Each tuple contains the message itself and a &amp;quot;source&amp;quot; value.  Generally the source value holds the connection that the message was received from, allowing the program to reply to the sender.&lt;br /&gt;
&lt;br /&gt;
The event loop, running in its own thread, continuously pulls a message from the message queue and runs a handler method corresponding to the message type.&lt;br /&gt;
&lt;br /&gt;
The client and server programs use a reactor pattern to quickly read data from the sockets and serial ports.  The reactor object runs in its own thread and uses the &amp;quot;select&amp;quot; call to determine when the connections have data ready.  It then calls the handlers for each ready connection.  The handlers will perform some operation on the data, wrap the result in a message, and place the message into the event queue.&lt;br /&gt;
&lt;br /&gt;
Note: The term &amp;quot;handler&amp;quot; is overloaded.  It either refers to a handler for data from a socket or a handler for messages in the message queue.&lt;br /&gt;
&lt;br /&gt;
One reactor handler deserves mentioning: the UnpicklingHandler.  The UnpicklingHandler buffers incoming data until a full object has been read, and then places the object into the event queue.  This way, unpickling becomes a non-blocking event, and we can read from a pickled connection without another thread.&lt;br /&gt;
&lt;br /&gt;
===Startup===&lt;br /&gt;
To bring up the system, the user must start the server and then start the clients on any microservers he wishes to bring up.  The server begins by marking every microserver as &amp;quot;down&amp;quot; in the database, and by listening for connections.  The client begins by connecting to the server and sending a MicroserverUp message with the microserver's name.  The server marks the microserver as &amp;quot;up&amp;quot; and sends a RefreshOutlets message to discover which motes are connected to the microserver.  The microserver replies with an OutletChanged message for each connected mote, which details the outlet name and the mote id.  The server stores the outlet information in the database.&lt;br /&gt;
&lt;br /&gt;
===Programming===&lt;br /&gt;
To program a set of motes, the user runs the &amp;quot;program&amp;quot; program, passing it the program binary and a description of the motes to program.  The user can select to program by mote id, by microserver name, or the entire testbed.  The &amp;quot;program&amp;quot; program sends a Program[Mote$|$Microserver$|$Network]Job message to the server.  The &amp;quot;program&amp;quot; program then waits for a response to the server.  From the message details, the server determines the set of motes to be programmed.  The server creates a ProgrammingJob object, which tracks the progress of the programming request.&lt;br /&gt;
&lt;br /&gt;
Once the set of motes has been determined, the server creates a binary file for each mote.  The server copies the original binary, imprints it with the mote's AM_ID (stored in the database), and moves the new binary to the home directory of the microserver the mote is attached to.  The server then passes a ProgramOutlet message to the microserver.  Upon receiving the message, the microserver runs tos-bsl to flash the binary onto the mote.&lt;br /&gt;
&lt;br /&gt;
When tos-bsl completes, the microserver informs the server whether the programming was successful or not.  The server records the status in the ProgrammingJob object.  When the ProgrammingJob has a result for every mote in the programming set, the server informs the &amp;quot;program&amp;quot; program that the programming is complete.&lt;br /&gt;
&lt;br /&gt;
The slowest part of programming a mote is flashing the binary onto the mote.  Because the flashing takes place on the microserver, we can program motes on different microservers in parallel, allowing us to program the entire testbed in the time it takes to program the motes on a single microserver.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' When programming a mote, you must close any other connections to the mote's serial port.&lt;br /&gt;
&lt;br /&gt;
===Serial Communication===&lt;br /&gt;
The testbed software allows the user to receive packets from the motes' serial ports (sending to the serial ports is not supported yet, and is discussed in the &amp;quot;future work&amp;quot; section).  To receive serial data, the client program connects to the server and sends a Subscribe message.  The server records the client in the list of subscribers and will dispatch incoming packets to the client.  The &amp;quot;subscribe&amp;quot; program, an example of a subscriber, prints out each incoming packet.&lt;br /&gt;
&lt;br /&gt;
When the client discovers a new mote, it opens a connection to the mote's serial port and to the servers &amp;quot;packet&amp;quot; port.  Whenever serial data is ready, the client reads the bytes from the serial port and sends the (raw) data to the server.  The server breaks the data stream up into packets, annotates the packet with the id of the sending mote, and forwards the packet to each subscriber in the subscribers list.&lt;br /&gt;
&lt;br /&gt;
==Current Services==&lt;br /&gt;
&lt;br /&gt;
===Localization===&lt;br /&gt;
We currently have a localization service implemented in which all of the motes in the testbed act as anchor nodes in order to help localize a beacon node roaming throughout the network.  Below is a snapshot of a GUI application we have developed to visualize this localization service in action.  With the denser deployment of motes in the proposed testbed, we hope to become extremely accurate in determining the location of these beacon nodes in the network.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-localization.png|thumb|left|300px|WSN localization application]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this figure we see two beacon nodes (102 and 103) being localized to rooms (519 and 534) respectively.  The purple dots represent anchor nodes deployed in the testbed and the green lines depict which anchors have heard a message sent by one of the beacons.  The localization algorithm used is based on particle filters -- a well understood method of localization used in robotics.  We have expanded the use of the particle filter to the wireless sensor network domain.  &lt;br /&gt;
&lt;br /&gt;
==Future Plans==&lt;br /&gt;
&lt;br /&gt;
===Expansion into Bryan Hall===&lt;br /&gt;
After we see how successful of a deployment we have in Jolley Hall, we would like to expand the testbed to include offices in Bryan Hall as well.  The figure below shows a preliminary design of the deployment.&lt;br /&gt;
&lt;br /&gt;
[[Image:wsn-bryan-hall.jpg|thumb|left|300px|Preliminary Bryan Hall deployment]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Improved Software Infrastructure===&lt;br /&gt;
There are a number of changes that will make the testbed easier to use and run more smoothly.&lt;br /&gt;
&lt;br /&gt;
* '''Hotplugging motes.''' Currently, the client programs must be stopped and restarted if motes are plugging or unplugged.  The client does support refreshing when it receives the SIGUSR1 signal, but currently nothing sends it the signal.  To support hotplugging motes, the microserver needs a script in the hotplug system that sends the client the SIGUSR1 signal whenever a USB event occurs.&lt;br /&gt;
&lt;br /&gt;
* '''Better mote discovery.''' The microserver discovers which motes are attached by looking for instance of the ftdi driver in the sysfs filesystem.  Instead, we can use the Python bindings to the libusb library to more accurately discover which motes are connected.&lt;br /&gt;
&lt;br /&gt;
==Acknowledgments==&lt;br /&gt;
This work is supported by the NSF under a CRI grant (CNS-0708460) and an ITR grant (CCR-0325529).&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=Cyber-Physical_Co-Design_of_Wireless_Monitoring_and_Control_for_Civil_Infrastructure&amp;diff=1283</id>
		<title>Cyber-Physical Co-Design of Wireless Monitoring and Control for Civil Infrastructure</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=Cyber-Physical_Co-Design_of_Wireless_Monitoring_and_Control_for_Civil_Infrastructure&amp;diff=1283"/>
		<updated>2008-12-08T19:53:19Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: Updated WS2 snapshot and pointed to new instructions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the wiki of the [[Structural Health Monitoring]] group at [http://www.wustl.edu Washington University in St. Louis].  This site is fairly new, so it may be a while before we have a fair number of pages here.  You can also see us at our [http://mase.wustl.edu/wusceel/quake WashU page].&lt;br /&gt;
&lt;br /&gt;
== Publications ==&lt;br /&gt;
* Hackmann, G., Sun, F., Castaneda, N., Lu, C., and Dyke, S., &amp;quot;A Holistic Approach to Decentralized Structural Damage Localization Using Wireless Sensor Networks,&amp;quot; Proceedings of 29th IEEE Real-Time Systems Symposium (RTSS 2008), 2008.&lt;br /&gt;
&lt;br /&gt;
: ''Published Version'':  [[http://www.cse.wustl.edu/~lu/papers/rtss08-shm.pdf PDF]] [[http://userfs.cec.wustl.edu/~gwh2/publications/hackmann08-a-holistic.bib BibTeX]]&lt;br /&gt;
: ''Extended Technical Report'': [[http://www.cse.seas.wustl.edu/Research/FileDownload.asp?799 PDF]] [[http://userfs.cec.wustl.edu/~gwh2/publications/hackmann08-a-holistic-tr.bib BibTeX]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* WS2 - The implementation of the damage localization application for Imote2 nodes. ''(updated 2008/11/20)''&lt;br /&gt;
** [[media:ws2_2008-11-20.zip|Source Code]]&lt;br /&gt;
** [[WS2 Installation Instructions|Installation Instructions]]&lt;br /&gt;
** [[WS2 Usage Instructions|Usage Instructions]]&lt;br /&gt;
&lt;br /&gt;
== Presentations ==&lt;br /&gt;
* Hackmann, G., &amp;quot;A Holistic Approach to Decentralized Structural Damage Localization Using Wireless Sensor Networks&amp;quot;, RTSS 2008 presentation, December 1, 2008.  [[http://userfs.cec.wustl.edu/~gwh2/publications/rtss08.pptx PPTX]] [[http://userfs.cec.wustl.edu/~gwh2/publications/rtss08.pdf PDF]]&lt;br /&gt;
* &amp;quot;Implementation of Decentralized Damage Localization in Wireless Sensor Networks,&amp;quot; by Fei Sun. MS Defense.  In partial fulfillment of a Master's Degree in Computer Science.  May 9, 2008.  Download: [[media:fei-msp.pptx|pptx]], [[media:fei-msp.pdf|pdf]]&lt;br /&gt;
&lt;br /&gt;
== Further Reading ==&lt;br /&gt;
&lt;br /&gt;
* [[What is Structural Health Monitoring?]]&lt;br /&gt;
* [[Reading List]]&lt;br /&gt;
* [[Imote2 Notes]]&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=File:Imote2-pin1.jpg&amp;diff=1282</id>
		<title>File:Imote2-pin1.jpg</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=File:Imote2-pin1.jpg&amp;diff=1282"/>
		<updated>2008-12-08T19:50:53Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=WS2_Installation_Instructions&amp;diff=1281</id>
		<title>WS2 Installation Instructions</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=WS2_Installation_Instructions&amp;diff=1281"/>
		<updated>2008-12-08T19:47:49Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: /* Step 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Installing WS2 is a multi-step process that involves setting up several software tools and performing some sensor calibration.  This document is designed to walk you through this process.  These instructions assume that you have a PC running a recent version of Windows (Windows 2000, XP, or Vista) and know how to use a text editor like [http://www.textpad.com/ TextPad] or [http://notepad-plus.sourceforge.net/ Notepad++].&lt;br /&gt;
&lt;br /&gt;
You will need to use a text editor application which supports &amp;quot;UNIX-style&amp;quot; line endings.  Most text editor applications support this feature. Unfortunately, the Notepad application included with Windows does not.  [http://notepad-plus.sourceforge.net/ Notepad++] is a free alternative to Notepad which will work with this tutorial.&lt;br /&gt;
&lt;br /&gt;
== TinyOS Setup ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1 ===&lt;br /&gt;
&lt;br /&gt;
You will first need to install TinyOS 1.1 and add support for the iMote2 platform.  The Structural Health Monitoring group at UIUC has created a helpful [http://shm.cs.uiuc.edu/imotestart.html &amp;quot;Getting Started&amp;quot; guide] which explains this process.&lt;br /&gt;
&lt;br /&gt;
=== Step 2 ===&lt;br /&gt;
&lt;br /&gt;
Next, you will need to upgrade two components of TinyOS.  Get the latest packages of nesC (&amp;lt;code&amp;gt;nesc-xxx-cygwin.i386.rpm&amp;lt;/code&amp;gt;) and TinyOS-Tools (&amp;lt;code&amp;gt;tinyos-tools-xxx-cygwin.i386.rpm&amp;lt;/code&amp;gt;) from the [http://www.tinyos.net/dist-2.1.0/tinyos/windows/ TinyOS Web site] and download them into your Cygwin home directory.  Then in a Cygwin window, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rpm -Uvh --ignoreos ~/nesc-xxx-cygwin.i386.rpm ~/tinyos-tools-xxx-cygwin.i386.rpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 3 ===&lt;br /&gt;
&lt;br /&gt;
You will need to two edit TinyOS files.  Open the file &amp;lt;code&amp;gt;C:\tinyos\cygwin\opt\tinyos-cvs\beta\platform\imote2\.platform&amp;lt;/code&amp;gt; in a text editor.  Line 12 should say:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ENV{NESC_MACHINE} = &amp;quot;pointer=4,4 float=4,4 double=8,4 long_double=8,4 short=2,2 int=4,4 long=4,4 long_long=8,4 int1248_align=1,2,4,4 wchar_size_size=4,4 char_wchar_signed=false,true gcc=xscale-elf-gcc&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remove the part that read &amp;lt;code&amp;gt;gcc=xscale-elf-gcc&amp;lt;/code&amp;gt; from the end of this line, so that it now says:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ENV{NESC_MACHINE} = &amp;quot;pointer=4,4 float=4,4 double=8,4 long_double=8,4 short=2,2 int=4,4 long=4,4 long_long=8,4 int1248_align=1,2,4,4 wchar_size_size=4,4 char_wchar_signed=false,true&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, open the file &amp;lt;code&amp;gt;C:\tinyos\cygwin\opt\tinyos-cvs\contrib\imote2\tos\sensorboards\BasicSensorboard\BasicSensorboardAccelDataM.nc&amp;lt;/code&amp;gt; in a text editor.  Line 20 should say:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define SPEED 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; to a &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, so that it now says:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define SPEED 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 4 ===&lt;br /&gt;
&lt;br /&gt;
Finally, install the WS2 software.  Download the WS2 package from [[Structural Health Monitoring|this page]] to your Cygwin home directory.  Then run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $TOSROOT/apps&lt;br /&gt;
unzip ~/Ws2_*.zip&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can test your setup by running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $TOSROOT/apps/WS2-ARQ&lt;br /&gt;
make imote2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If everything was installed correctly, then the last line printed after running these commands will say &amp;quot;&amp;lt;code&amp;gt;dwarf2bd -nc build/imote2/main.exe&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Sensor Calibration ==&lt;br /&gt;
&lt;br /&gt;
The frequency at which each sensorboard collects vibration samples may vary by as much as 10%.  In the current version of WS2, you must manually calibrate each sensorboard by collecting its &amp;quot;actual&amp;quot; frequency ahead-of-time.  &lt;br /&gt;
&lt;br /&gt;
You can measure this frequency using an oscilloscope and TinyOS's &amp;lt;code&amp;gt;TestSensorboard&amp;lt;/code&amp;gt; application.&lt;br /&gt;
&lt;br /&gt;
=== Step 1 ===&lt;br /&gt;
&lt;br /&gt;
Attach the sensorboard to the iMote2.  Orient the iMote2 so that the sensorboard is on top, as shown in the photo below.  Attach the oscilloscope's probe to the pin circled on the photo below.&lt;br /&gt;
&lt;br /&gt;
[[Image:imote2-pin1.jpg|thumb|none|Click for full-size image]]&lt;br /&gt;
&lt;br /&gt;
=== Step 2 === &lt;br /&gt;
&lt;br /&gt;
Install and run the &amp;lt;code&amp;gt;TestSensorboard&amp;lt;/code&amp;gt; application on the iMote2 as described here: [[Testing the Imote2 Sensor Board]]&lt;br /&gt;
&lt;br /&gt;
=== Step 3 ===&lt;br /&gt;
&lt;br /&gt;
After running the &amp;lt;code&amp;gt;StartCollection&amp;lt;/code&amp;gt; command, the iMote2 will begin collecting sensor data for about one second.  Each time it samples the accelerometer, there will be a pulse on the pin that you attached the probe to, like shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:ws2-oscilloscope.png]]&lt;br /&gt;
&lt;br /&gt;
Use the oscilloscope to measure the frequency of this pulse.  It should be approximately 560 Hz, +/- 10%.  Record this measurement.&lt;br /&gt;
&lt;br /&gt;
You will also want to record the ID of the iMote2 attached to the sensorboard.  You can find this ID by reading the last two digits of the serial number sticker found on the bottom of the iMote2 board:&lt;br /&gt;
&lt;br /&gt;
[[Image:imote2-serial.jpg|thumb|none|Click for full-size image]]&lt;br /&gt;
&lt;br /&gt;
== Base Station Setup ==&lt;br /&gt;
&lt;br /&gt;
You will need to use one iMote2 to communicate wirelessly with the other iMote2s in the network.  We will refer to this mote as the &amp;quot;base station&amp;quot;.  Install the base station code on this mote by attaching the iMote2 to your PC, and then running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $TOSROOT/apps/TOSBase&lt;br /&gt;
make imote2&lt;br /&gt;
USBLoaderHost.exe -p build/imote2/main.bin.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sensor Node Setup ==&lt;br /&gt;
&lt;br /&gt;
Next, you will need to install the WS2 software on the nodes that you will attach to the structure.  Run the following command once:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $TOSROOT/apps/WS2-ARQ&lt;br /&gt;
make imote2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each mote you want attached to the structure, plug it into your PC and run this command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
USBLoaderHost.exe -p build/imote2/main.bin.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DLAC Parameters ==&lt;br /&gt;
&lt;br /&gt;
To set up the parameters to the DLAC algorithm, open the file &amp;lt;code&amp;gt;C:\tinyos\cygwin\opt\tinyos-cvs\apps\WS2-ARQ\java\ws2.properties&amp;lt;/code&amp;gt; in a text editor.&lt;br /&gt;
&lt;br /&gt;
Each line in this file with an &amp;quot;&amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt;&amp;quot; represents one DLAC parameter.  Each of these parameters has a line above it starting with a &amp;quot;&amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;&amp;quot; that describes what the parameter means.  Change the &amp;lt;code&amp;gt;W_EH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;W_AH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;W_AD&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;numNodes&amp;lt;/code&amp;gt; parameters to match the values computed offline.&lt;br /&gt;
&lt;br /&gt;
Below this, there is a section in the file that looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Mote addresses (base-16)&lt;br /&gt;
motes =          75,    46,    44&lt;br /&gt;
# Corresponding Measured sampling frequencies&lt;br /&gt;
frequencies = 598.8, 552.5, 586.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is where the calibration information is placed.  Change the &amp;lt;code&amp;gt;motes =&amp;lt;/code&amp;gt; line so that it lists the IDs on the bottom of each mote you calibrated.  Separate each ID by a comma.  Then, change the &amp;lt;code&amp;gt;frequencies =&amp;lt;/code&amp;gt; line to list the sampling frequency that you measured during the calibration step.  Again, separate each frequency by a comma.&lt;br /&gt;
&lt;br /&gt;
For example, if you have a mote with the ID 45 and a sampling frequency of 545.8 Hz, and another mote with the ID 76 and a sampling frequency of 575.6 Hz, then change these lines to read:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Mote addresses (base-16)&lt;br /&gt;
motes =          45,    76&lt;br /&gt;
# Corresponding Measured sampling frequencies&lt;br /&gt;
frequencies = 545.8, 575.6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Once you have completed these steps, the WS2 system is set up and ready to be deployed.&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=WS2_Installation_Instructions&amp;diff=1280</id>
		<title>WS2 Installation Instructions</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=WS2_Installation_Instructions&amp;diff=1280"/>
		<updated>2008-12-08T19:47:32Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: /* Step 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Installing WS2 is a multi-step process that involves setting up several software tools and performing some sensor calibration.  This document is designed to walk you through this process.  These instructions assume that you have a PC running a recent version of Windows (Windows 2000, XP, or Vista) and know how to use a text editor like [http://www.textpad.com/ TextPad] or [http://notepad-plus.sourceforge.net/ Notepad++].&lt;br /&gt;
&lt;br /&gt;
You will need to use a text editor application which supports &amp;quot;UNIX-style&amp;quot; line endings.  Most text editor applications support this feature. Unfortunately, the Notepad application included with Windows does not.  [http://notepad-plus.sourceforge.net/ Notepad++] is a free alternative to Notepad which will work with this tutorial.&lt;br /&gt;
&lt;br /&gt;
== TinyOS Setup ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1 ===&lt;br /&gt;
&lt;br /&gt;
You will first need to install TinyOS 1.1 and add support for the iMote2 platform.  The Structural Health Monitoring group at UIUC has created a helpful [http://shm.cs.uiuc.edu/imotestart.html &amp;quot;Getting Started&amp;quot; guide] which explains this process.&lt;br /&gt;
&lt;br /&gt;
=== Step 2 ===&lt;br /&gt;
&lt;br /&gt;
Next, you will need to upgrade two components of TinyOS.  Get the latest packages of nesC (&amp;lt;code&amp;gt;nesc-xxx-cygwin.i386.rpm&amp;lt;/code&amp;gt;) and TinyOS-Tools (&amp;lt;code&amp;gt;tinyos-tools-xxx-cygwin.i386.rpm&amp;lt;/code&amp;gt;) from the [http://www.tinyos.net/dist-2.1.0/tinyos/windows/ TinyOS Web site] and download them into your Cygwin home directory.  Then in a Cygwin window, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rpm -Uvh --ignoreos ~/nesc-xxx-cygwin.i386.rpm ~/tinyos-tools-xxx-cygwin.i386.rpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 3 ===&lt;br /&gt;
&lt;br /&gt;
You will need to two edit TinyOS files.  Open the file &amp;lt;code&amp;gt;C:\tinyos\cygwin\opt\tinyos-cvs\beta\platform\imote2\.platform&amp;lt;/code&amp;gt; in a text editor.  Line 12 should say:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ENV{NESC_MACHINE} = &amp;quot;pointer=4,4 float=4,4 double=8,4 long_double=8,4 short=2,2 int=4,4 long=4,4 long_long=8,4 int1248_align=1,2,4,4 wchar_size_size=4,4 char_wchar_signed=false,true gcc=xscale-elf-gcc&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remove the part that read &amp;lt;code&amp;gt;gcc=xscale-elf-gcc&amp;lt;/code&amp;gt; from the end of this line, so that it now says:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ENV{NESC_MACHINE} = &amp;quot;pointer=4,4 float=4,4 double=8,4 long_double=8,4 short=2,2 int=4,4 long=4,4 long_long=8,4 int1248_align=1,2,4,4 wchar_size_size=4,4 char_wchar_signed=false,true&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, open the file &amp;lt;code&amp;gt;C:\tinyos\cygwin\opt\tinyos-cvs\contrib\imote2\tos\sensorboards\BasicSensorboard\BasicSensorboardAccelDataM.nc&amp;lt;/code&amp;gt; in a text editor.  Line 20 should say:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define SPEED 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; to a &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, so that it now says:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define SPEED 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 4 ===&lt;br /&gt;
&lt;br /&gt;
Finally, install the WS2 software.  Download the WS2 package from [[Structural Health Monitoring|this page]] to your Cygwin home directory.  Then run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $TOSROOT/apps&lt;br /&gt;
unzip ~/Ws2_*.zip&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can test your setup by running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $TOSROOT/apps/WS2-ARQ&lt;br /&gt;
make imote2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If everything was installed correctly, then the last line printed after running these commands will say &amp;quot;&amp;lt;code&amp;gt;dwarf2bd -nc build/imote2/main.exe&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Sensor Calibration ==&lt;br /&gt;
&lt;br /&gt;
The frequency at which each sensorboard collects vibration samples may vary by as much as 10%.  In the current version of WS2, you must manually calibrate each sensorboard by collecting its &amp;quot;actual&amp;quot; frequency ahead-of-time.  &lt;br /&gt;
&lt;br /&gt;
You can measure this frequency using an oscilloscope and TinyOS's &amp;lt;code&amp;gt;TestSensorboard&amp;lt;/code&amp;gt; application.&lt;br /&gt;
&lt;br /&gt;
=== Step 1 ===&lt;br /&gt;
&lt;br /&gt;
Attach the sensorboard to the iMote2.  Orient the iMote2 so that the sensorboard is on top, as shown in the photo below.  Attach the oscilloscope's probe to the pin circled on the photo below.&lt;br /&gt;
&lt;br /&gt;
[[Image:imote2-pin1.jpg]]&lt;br /&gt;
&lt;br /&gt;
=== Step 2 === &lt;br /&gt;
&lt;br /&gt;
Install and run the &amp;lt;code&amp;gt;TestSensorboard&amp;lt;/code&amp;gt; application on the iMote2 as described here: [[Testing the Imote2 Sensor Board]]&lt;br /&gt;
&lt;br /&gt;
=== Step 3 ===&lt;br /&gt;
&lt;br /&gt;
After running the &amp;lt;code&amp;gt;StartCollection&amp;lt;/code&amp;gt; command, the iMote2 will begin collecting sensor data for about one second.  Each time it samples the accelerometer, there will be a pulse on the pin that you attached the probe to, like shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:ws2-oscilloscope.png]]&lt;br /&gt;
&lt;br /&gt;
Use the oscilloscope to measure the frequency of this pulse.  It should be approximately 560 Hz, +/- 10%.  Record this measurement.&lt;br /&gt;
&lt;br /&gt;
You will also want to record the ID of the iMote2 attached to the sensorboard.  You can find this ID by reading the last two digits of the serial number sticker found on the bottom of the iMote2 board:&lt;br /&gt;
&lt;br /&gt;
[[Image:imote2-serial.jpg|thumb|none|Click for full-size image]]&lt;br /&gt;
&lt;br /&gt;
== Base Station Setup ==&lt;br /&gt;
&lt;br /&gt;
You will need to use one iMote2 to communicate wirelessly with the other iMote2s in the network.  We will refer to this mote as the &amp;quot;base station&amp;quot;.  Install the base station code on this mote by attaching the iMote2 to your PC, and then running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $TOSROOT/apps/TOSBase&lt;br /&gt;
make imote2&lt;br /&gt;
USBLoaderHost.exe -p build/imote2/main.bin.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sensor Node Setup ==&lt;br /&gt;
&lt;br /&gt;
Next, you will need to install the WS2 software on the nodes that you will attach to the structure.  Run the following command once:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $TOSROOT/apps/WS2-ARQ&lt;br /&gt;
make imote2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each mote you want attached to the structure, plug it into your PC and run this command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
USBLoaderHost.exe -p build/imote2/main.bin.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DLAC Parameters ==&lt;br /&gt;
&lt;br /&gt;
To set up the parameters to the DLAC algorithm, open the file &amp;lt;code&amp;gt;C:\tinyos\cygwin\opt\tinyos-cvs\apps\WS2-ARQ\java\ws2.properties&amp;lt;/code&amp;gt; in a text editor.&lt;br /&gt;
&lt;br /&gt;
Each line in this file with an &amp;quot;&amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt;&amp;quot; represents one DLAC parameter.  Each of these parameters has a line above it starting with a &amp;quot;&amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;&amp;quot; that describes what the parameter means.  Change the &amp;lt;code&amp;gt;W_EH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;W_AH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;W_AD&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;numNodes&amp;lt;/code&amp;gt; parameters to match the values computed offline.&lt;br /&gt;
&lt;br /&gt;
Below this, there is a section in the file that looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Mote addresses (base-16)&lt;br /&gt;
motes =          75,    46,    44&lt;br /&gt;
# Corresponding Measured sampling frequencies&lt;br /&gt;
frequencies = 598.8, 552.5, 586.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is where the calibration information is placed.  Change the &amp;lt;code&amp;gt;motes =&amp;lt;/code&amp;gt; line so that it lists the IDs on the bottom of each mote you calibrated.  Separate each ID by a comma.  Then, change the &amp;lt;code&amp;gt;frequencies =&amp;lt;/code&amp;gt; line to list the sampling frequency that you measured during the calibration step.  Again, separate each frequency by a comma.&lt;br /&gt;
&lt;br /&gt;
For example, if you have a mote with the ID 45 and a sampling frequency of 545.8 Hz, and another mote with the ID 76 and a sampling frequency of 575.6 Hz, then change these lines to read:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Mote addresses (base-16)&lt;br /&gt;
motes =          45,    76&lt;br /&gt;
# Corresponding Measured sampling frequencies&lt;br /&gt;
frequencies = 545.8, 575.6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Once you have completed these steps, the WS2 system is set up and ready to be deployed.&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=WS2_Installation_Instructions&amp;diff=1279</id>
		<title>WS2 Installation Instructions</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=WS2_Installation_Instructions&amp;diff=1279"/>
		<updated>2008-12-08T19:45:34Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: /* Step 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Installing WS2 is a multi-step process that involves setting up several software tools and performing some sensor calibration.  This document is designed to walk you through this process.  These instructions assume that you have a PC running a recent version of Windows (Windows 2000, XP, or Vista) and know how to use a text editor like [http://www.textpad.com/ TextPad] or [http://notepad-plus.sourceforge.net/ Notepad++].&lt;br /&gt;
&lt;br /&gt;
You will need to use a text editor application which supports &amp;quot;UNIX-style&amp;quot; line endings.  Most text editor applications support this feature. Unfortunately, the Notepad application included with Windows does not.  [http://notepad-plus.sourceforge.net/ Notepad++] is a free alternative to Notepad which will work with this tutorial.&lt;br /&gt;
&lt;br /&gt;
== TinyOS Setup ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1 ===&lt;br /&gt;
&lt;br /&gt;
You will first need to install TinyOS 1.1 and add support for the iMote2 platform.  The Structural Health Monitoring group at UIUC has created a helpful [http://shm.cs.uiuc.edu/imotestart.html &amp;quot;Getting Started&amp;quot; guide] which explains this process.&lt;br /&gt;
&lt;br /&gt;
=== Step 2 ===&lt;br /&gt;
&lt;br /&gt;
Next, you will need to upgrade two components of TinyOS.  Get the latest packages of nesC (&amp;lt;code&amp;gt;nesc-xxx-cygwin.i386.rpm&amp;lt;/code&amp;gt;) and TinyOS-Tools (&amp;lt;code&amp;gt;tinyos-tools-xxx-cygwin.i386.rpm&amp;lt;/code&amp;gt;) from the [http://www.tinyos.net/dist-2.1.0/tinyos/windows/ TinyOS Web site] and download them into your Cygwin home directory.  Then in a Cygwin window, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rpm -Uvh --ignoreos ~/nesc-xxx-cygwin.i386.rpm ~/tinyos-tools-xxx-cygwin.i386.rpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 3 ===&lt;br /&gt;
&lt;br /&gt;
You will need to two edit TinyOS files.  Open the file &amp;lt;code&amp;gt;C:\tinyos\cygwin\opt\tinyos-cvs\beta\platform\imote2\.platform&amp;lt;/code&amp;gt; in a text editor.  Line 12 should say:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ENV{NESC_MACHINE} = &amp;quot;pointer=4,4 float=4,4 double=8,4 long_double=8,4 short=2,2 int=4,4 long=4,4 long_long=8,4 int1248_align=1,2,4,4 wchar_size_size=4,4 char_wchar_signed=false,true gcc=xscale-elf-gcc&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remove the part that read &amp;lt;code&amp;gt;gcc=xscale-elf-gcc&amp;lt;/code&amp;gt; from the end of this line, so that it now says:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ENV{NESC_MACHINE} = &amp;quot;pointer=4,4 float=4,4 double=8,4 long_double=8,4 short=2,2 int=4,4 long=4,4 long_long=8,4 int1248_align=1,2,4,4 wchar_size_size=4,4 char_wchar_signed=false,true&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, open the file &amp;lt;code&amp;gt;C:\tinyos\cygwin\opt\tinyos-cvs\contrib\imote2\tos\sensorboards\BasicSensorboard\BasicSensorboardAccelDataM.nc&amp;lt;/code&amp;gt; in a text editor.  Line 20 should say:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define SPEED 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; to a &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, so that it now says:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define SPEED 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 4 ===&lt;br /&gt;
&lt;br /&gt;
Finally, install the WS2 software.  Download the WS2 package from [[Structural Health Monitoring|this page]] to your Cygwin home directory.  Then run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $TOSROOT/apps&lt;br /&gt;
unzip ~/Ws2_*.zip&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can test your setup by running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $TOSROOT/apps/WS2-ARQ&lt;br /&gt;
make imote2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If everything was installed correctly, then the last line printed after running these commands will say &amp;quot;&amp;lt;code&amp;gt;dwarf2bd -nc build/imote2/main.exe&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Sensor Calibration ==&lt;br /&gt;
&lt;br /&gt;
The frequency at which each sensorboard collects vibration samples may vary by as much as 10%.  In the current version of WS2, you must manually calibrate each sensorboard by collecting its &amp;quot;actual&amp;quot; frequency ahead-of-time.  &lt;br /&gt;
&lt;br /&gt;
You can measure this frequency using an oscilloscope and TinyOS's &amp;lt;code&amp;gt;TestSensorboard&amp;lt;/code&amp;gt; application.&lt;br /&gt;
&lt;br /&gt;
=== Step 1 ===&lt;br /&gt;
&lt;br /&gt;
Attach the sensorboard to the iMote2.  Orient the iMote2 so that the sensorboard is on top, as shown in the photo below.  Attach the oscilloscope's probe to the pin circled on the photo below.&lt;br /&gt;
&lt;br /&gt;
[[Image:imote2-pin31.jpg]]&lt;br /&gt;
&lt;br /&gt;
=== Step 2 === &lt;br /&gt;
&lt;br /&gt;
Install and run the &amp;lt;code&amp;gt;TestSensorboard&amp;lt;/code&amp;gt; application on the iMote2 as described here: [[Testing the Imote2 Sensor Board]]&lt;br /&gt;
&lt;br /&gt;
=== Step 3 ===&lt;br /&gt;
&lt;br /&gt;
After running the &amp;lt;code&amp;gt;StartCollection&amp;lt;/code&amp;gt; command, the iMote2 will begin collecting sensor data for about one second.  Each time it samples the accelerometer, there will be a pulse on the pin that you attached the probe to, like shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:ws2-oscilloscope.png]]&lt;br /&gt;
&lt;br /&gt;
Use the oscilloscope to measure the frequency of this pulse.  It should be approximately 560 Hz, +/- 10%.  Record this measurement.&lt;br /&gt;
&lt;br /&gt;
You will also want to record the ID of the iMote2 attached to the sensorboard.  You can find this ID by reading the last two digits of the serial number sticker found on the bottom of the iMote2 board:&lt;br /&gt;
&lt;br /&gt;
[[Image:imote2-serial.jpg|thumb|none|Click for full-size image]]&lt;br /&gt;
&lt;br /&gt;
== Base Station Setup ==&lt;br /&gt;
&lt;br /&gt;
You will need to use one iMote2 to communicate wirelessly with the other iMote2s in the network.  We will refer to this mote as the &amp;quot;base station&amp;quot;.  Install the base station code on this mote by attaching the iMote2 to your PC, and then running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $TOSROOT/apps/TOSBase&lt;br /&gt;
make imote2&lt;br /&gt;
USBLoaderHost.exe -p build/imote2/main.bin.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sensor Node Setup ==&lt;br /&gt;
&lt;br /&gt;
Next, you will need to install the WS2 software on the nodes that you will attach to the structure.  Run the following command once:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $TOSROOT/apps/WS2-ARQ&lt;br /&gt;
make imote2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each mote you want attached to the structure, plug it into your PC and run this command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
USBLoaderHost.exe -p build/imote2/main.bin.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DLAC Parameters ==&lt;br /&gt;
&lt;br /&gt;
To set up the parameters to the DLAC algorithm, open the file &amp;lt;code&amp;gt;C:\tinyos\cygwin\opt\tinyos-cvs\apps\WS2-ARQ\java\ws2.properties&amp;lt;/code&amp;gt; in a text editor.&lt;br /&gt;
&lt;br /&gt;
Each line in this file with an &amp;quot;&amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt;&amp;quot; represents one DLAC parameter.  Each of these parameters has a line above it starting with a &amp;quot;&amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;&amp;quot; that describes what the parameter means.  Change the &amp;lt;code&amp;gt;W_EH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;W_AH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;W_AD&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;numNodes&amp;lt;/code&amp;gt; parameters to match the values computed offline.&lt;br /&gt;
&lt;br /&gt;
Below this, there is a section in the file that looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Mote addresses (base-16)&lt;br /&gt;
motes =          75,    46,    44&lt;br /&gt;
# Corresponding Measured sampling frequencies&lt;br /&gt;
frequencies = 598.8, 552.5, 586.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is where the calibration information is placed.  Change the &amp;lt;code&amp;gt;motes =&amp;lt;/code&amp;gt; line so that it lists the IDs on the bottom of each mote you calibrated.  Separate each ID by a comma.  Then, change the &amp;lt;code&amp;gt;frequencies =&amp;lt;/code&amp;gt; line to list the sampling frequency that you measured during the calibration step.  Again, separate each frequency by a comma.&lt;br /&gt;
&lt;br /&gt;
For example, if you have a mote with the ID 45 and a sampling frequency of 545.8 Hz, and another mote with the ID 76 and a sampling frequency of 575.6 Hz, then change these lines to read:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Mote addresses (base-16)&lt;br /&gt;
motes =          45,    76&lt;br /&gt;
# Corresponding Measured sampling frequencies&lt;br /&gt;
frequencies = 545.8, 575.6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Once you have completed these steps, the WS2 system is set up and ready to be deployed.&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=WS2_Installation_Instructions&amp;diff=1278</id>
		<title>WS2 Installation Instructions</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=WS2_Installation_Instructions&amp;diff=1278"/>
		<updated>2008-12-08T19:44:15Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: /* Step 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Installing WS2 is a multi-step process that involves setting up several software tools and performing some sensor calibration.  This document is designed to walk you through this process.  These instructions assume that you have a PC running a recent version of Windows (Windows 2000, XP, or Vista) and know how to use a text editor like [http://www.textpad.com/ TextPad] or [http://notepad-plus.sourceforge.net/ Notepad++].&lt;br /&gt;
&lt;br /&gt;
You will need to use a text editor application which supports &amp;quot;UNIX-style&amp;quot; line endings.  Most text editor applications support this feature. Unfortunately, the Notepad application included with Windows does not.  [http://notepad-plus.sourceforge.net/ Notepad++] is a free alternative to Notepad which will work with this tutorial.&lt;br /&gt;
&lt;br /&gt;
== TinyOS Setup ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1 ===&lt;br /&gt;
&lt;br /&gt;
You will first need to install TinyOS 1.1 and add support for the iMote2 platform.  The Structural Health Monitoring group at UIUC has created a helpful [http://shm.cs.uiuc.edu/imotestart.html &amp;quot;Getting Started&amp;quot; guide] which explains this process.&lt;br /&gt;
&lt;br /&gt;
=== Step 2 ===&lt;br /&gt;
&lt;br /&gt;
Next, you will need to upgrade two components of TinyOS.  Get the latest packages of nesC (&amp;lt;code&amp;gt;nesc-xxx-cygwin.i386.rpm&amp;lt;/code&amp;gt;) and TinyOS-Tools (&amp;lt;code&amp;gt;tinyos-tools-xxx-cygwin.i386.rpm&amp;lt;/code&amp;gt;) from the [http://www.tinyos.net/dist-2.1.0/tinyos/windows/ TinyOS Web site] and download them into your Cygwin home directory.  Then in a Cygwin window, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rpm -Uvh --ignoreos ~/nesc-xxx-cygwin.i386.rpm ~/tinyos-tools-xxx-cygwin.i386.rpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 3 ===&lt;br /&gt;
&lt;br /&gt;
You will need to two edit TinyOS files.  Open the file &amp;lt;code&amp;gt;C:\tinyos\cygwin\opt\tinyos-cvs\beta\platform\imote2\.platform&amp;lt;/code&amp;gt; in a text editor.  Line 12 should say:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ENV{NESC_MACHINE} = &amp;quot;pointer=4,4 float=4,4 double=8,4 long_double=8,4 short=2,2 int=4,4 long=4,4 long_long=8,4 int1248_align=1,2,4,4 wchar_size_size=4,4 char_wchar_signed=false,true gcc=xscale-elf-gcc&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remove the part that read &amp;lt;code&amp;gt;gcc=xscale-elf-gcc&amp;lt;/code&amp;gt; from the end of this line, so that it now says:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ENV{NESC_MACHINE} = &amp;quot;pointer=4,4 float=4,4 double=8,4 long_double=8,4 short=2,2 int=4,4 long=4,4 long_long=8,4 int1248_align=1,2,4,4 wchar_size_size=4,4 char_wchar_signed=false,true&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, open the file &amp;lt;code&amp;gt;C:\tinyos\cygwin\opt\tinyos-cvs\contrib\imote2\tos\sensorboards\BasicSensorboard\BasicSensorboardAccelDataM.nc&amp;lt;/code&amp;gt; in a text editor.  Line 20 should say:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define SPEED 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; to a &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, so that it now says:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define SPEED 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 4 ===&lt;br /&gt;
&lt;br /&gt;
Finally, install the WS2 software.  Download the WS2 package from [[Structural Health Monitoring|this page]] to your Cygwin home directory.  Then run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $TOSROOT/apps&lt;br /&gt;
unzip ~/Ws2_*.zip&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can test your setup by running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $TOSROOT/apps/WS2-ARQ&lt;br /&gt;
make imote2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If everything was installed correctly, then the last line printed after running these commands will say &amp;quot;&amp;lt;code&amp;gt;dwarf2bd -nc build/imote2/main.exe&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Sensor Calibration ==&lt;br /&gt;
&lt;br /&gt;
The frequency at which each sensorboard collects vibration samples may vary by as much as 10%.  In the current version of WS2, you must manually calibrate each sensorboard by collecting its &amp;quot;actual&amp;quot; frequency ahead-of-time.  &lt;br /&gt;
&lt;br /&gt;
You can measure this frequency using an oscilloscope and TinyOS's &amp;lt;code&amp;gt;TestSensorboard&amp;lt;/code&amp;gt; application.&lt;br /&gt;
&lt;br /&gt;
=== Step 1 ===&lt;br /&gt;
&lt;br /&gt;
Attach the sensorboard to the iMote2.  Orient the iMote2 so that the sensorboard is on top, as shown in the photo below.  Attach the oscilloscope's probe to the pin circled on the photo below.&lt;br /&gt;
&lt;br /&gt;
[[Image:imote2-pin31.jpg]]&lt;br /&gt;
&lt;br /&gt;
=== Step 2 === &lt;br /&gt;
&lt;br /&gt;
Install and run the &amp;lt;code&amp;gt;TestSensorboard&amp;lt;/code&amp;gt; application on the iMote2 as described here: [[Testing the Imote2 Sensor Board]]&lt;br /&gt;
&lt;br /&gt;
=== Step 3 ===&lt;br /&gt;
&lt;br /&gt;
After running the &amp;lt;code&amp;gt;StartCollection&amp;lt;/code&amp;gt; command, the iMote2 will begin collecting sensor data for about one second.  Each time it samples the accelerometer, there will be a pulse on the pin that you attached the probe to, like shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:ws2-oscilloscope.png]]&lt;br /&gt;
&lt;br /&gt;
Use the oscilloscope to measure the frequency of this pulse.  It should be approximately 560 Hz, +/- 10%.  Record this measurement.&lt;br /&gt;
&lt;br /&gt;
You will also want to record the ID of the iMote2 attached to the sensorboard.  You can find this ID by reading the last two digits of the serial number sticker found on the bottom of the iMote2 board:&lt;br /&gt;
&lt;br /&gt;
[[Image:imote2-serial.jpg|thumb|left|Click for full-size image]]&lt;br /&gt;
&lt;br /&gt;
== Base Station Setup ==&lt;br /&gt;
&lt;br /&gt;
You will need to use one iMote2 to communicate wirelessly with the other iMote2s in the network.  We will refer to this mote as the &amp;quot;base station&amp;quot;.  Install the base station code on this mote by attaching the iMote2 to your PC, and then running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $TOSROOT/apps/TOSBase&lt;br /&gt;
make imote2&lt;br /&gt;
USBLoaderHost.exe -p build/imote2/main.bin.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sensor Node Setup ==&lt;br /&gt;
&lt;br /&gt;
Next, you will need to install the WS2 software on the nodes that you will attach to the structure.  Run the following command once:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $TOSROOT/apps/WS2-ARQ&lt;br /&gt;
make imote2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each mote you want attached to the structure, plug it into your PC and run this command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
USBLoaderHost.exe -p build/imote2/main.bin.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DLAC Parameters ==&lt;br /&gt;
&lt;br /&gt;
To set up the parameters to the DLAC algorithm, open the file &amp;lt;code&amp;gt;C:\tinyos\cygwin\opt\tinyos-cvs\apps\WS2-ARQ\java\ws2.properties&amp;lt;/code&amp;gt; in a text editor.&lt;br /&gt;
&lt;br /&gt;
Each line in this file with an &amp;quot;&amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt;&amp;quot; represents one DLAC parameter.  Each of these parameters has a line above it starting with a &amp;quot;&amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;&amp;quot; that describes what the parameter means.  Change the &amp;lt;code&amp;gt;W_EH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;W_AH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;W_AD&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;numNodes&amp;lt;/code&amp;gt; parameters to match the values computed offline.&lt;br /&gt;
&lt;br /&gt;
Below this, there is a section in the file that looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Mote addresses (base-16)&lt;br /&gt;
motes =          75,    46,    44&lt;br /&gt;
# Corresponding Measured sampling frequencies&lt;br /&gt;
frequencies = 598.8, 552.5, 586.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is where the calibration information is placed.  Change the &amp;lt;code&amp;gt;motes =&amp;lt;/code&amp;gt; line so that it lists the IDs on the bottom of each mote you calibrated.  Separate each ID by a comma.  Then, change the &amp;lt;code&amp;gt;frequencies =&amp;lt;/code&amp;gt; line to list the sampling frequency that you measured during the calibration step.  Again, separate each frequency by a comma.&lt;br /&gt;
&lt;br /&gt;
For example, if you have a mote with the ID 45 and a sampling frequency of 545.8 Hz, and another mote with the ID 76 and a sampling frequency of 575.6 Hz, then change these lines to read:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Mote addresses (base-16)&lt;br /&gt;
motes =          45,    76&lt;br /&gt;
# Corresponding Measured sampling frequencies&lt;br /&gt;
frequencies = 545.8, 575.6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Once you have completed these steps, the WS2 system is set up and ready to be deployed.&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=File:Imote2-serial.jpg&amp;diff=1277</id>
		<title>File:Imote2-serial.jpg</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=File:Imote2-serial.jpg&amp;diff=1277"/>
		<updated>2008-12-08T19:42:57Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
	<entry>
		<id>http://wsn.cse.wustl.edu/index.php?title=WS2_Installation_Instructions&amp;diff=1276</id>
		<title>WS2 Installation Instructions</title>
		<link rel="alternate" type="text/html" href="http://wsn.cse.wustl.edu/index.php?title=WS2_Installation_Instructions&amp;diff=1276"/>
		<updated>2008-12-08T19:42:48Z</updated>

		<summary type="html">&lt;p&gt;Gwh2: /* Step 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Installing WS2 is a multi-step process that involves setting up several software tools and performing some sensor calibration.  This document is designed to walk you through this process.  These instructions assume that you have a PC running a recent version of Windows (Windows 2000, XP, or Vista) and know how to use a text editor like [http://www.textpad.com/ TextPad] or [http://notepad-plus.sourceforge.net/ Notepad++].&lt;br /&gt;
&lt;br /&gt;
You will need to use a text editor application which supports &amp;quot;UNIX-style&amp;quot; line endings.  Most text editor applications support this feature. Unfortunately, the Notepad application included with Windows does not.  [http://notepad-plus.sourceforge.net/ Notepad++] is a free alternative to Notepad which will work with this tutorial.&lt;br /&gt;
&lt;br /&gt;
== TinyOS Setup ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1 ===&lt;br /&gt;
&lt;br /&gt;
You will first need to install TinyOS 1.1 and add support for the iMote2 platform.  The Structural Health Monitoring group at UIUC has created a helpful [http://shm.cs.uiuc.edu/imotestart.html &amp;quot;Getting Started&amp;quot; guide] which explains this process.&lt;br /&gt;
&lt;br /&gt;
=== Step 2 ===&lt;br /&gt;
&lt;br /&gt;
Next, you will need to upgrade two components of TinyOS.  Get the latest packages of nesC (&amp;lt;code&amp;gt;nesc-xxx-cygwin.i386.rpm&amp;lt;/code&amp;gt;) and TinyOS-Tools (&amp;lt;code&amp;gt;tinyos-tools-xxx-cygwin.i386.rpm&amp;lt;/code&amp;gt;) from the [http://www.tinyos.net/dist-2.1.0/tinyos/windows/ TinyOS Web site] and download them into your Cygwin home directory.  Then in a Cygwin window, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rpm -Uvh --ignoreos ~/nesc-xxx-cygwin.i386.rpm ~/tinyos-tools-xxx-cygwin.i386.rpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 3 ===&lt;br /&gt;
&lt;br /&gt;
You will need to two edit TinyOS files.  Open the file &amp;lt;code&amp;gt;C:\tinyos\cygwin\opt\tinyos-cvs\beta\platform\imote2\.platform&amp;lt;/code&amp;gt; in a text editor.  Line 12 should say:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ENV{NESC_MACHINE} = &amp;quot;pointer=4,4 float=4,4 double=8,4 long_double=8,4 short=2,2 int=4,4 long=4,4 long_long=8,4 int1248_align=1,2,4,4 wchar_size_size=4,4 char_wchar_signed=false,true gcc=xscale-elf-gcc&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remove the part that read &amp;lt;code&amp;gt;gcc=xscale-elf-gcc&amp;lt;/code&amp;gt; from the end of this line, so that it now says:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ENV{NESC_MACHINE} = &amp;quot;pointer=4,4 float=4,4 double=8,4 long_double=8,4 short=2,2 int=4,4 long=4,4 long_long=8,4 int1248_align=1,2,4,4 wchar_size_size=4,4 char_wchar_signed=false,true&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, open the file &amp;lt;code&amp;gt;C:\tinyos\cygwin\opt\tinyos-cvs\contrib\imote2\tos\sensorboards\BasicSensorboard\BasicSensorboardAccelDataM.nc&amp;lt;/code&amp;gt; in a text editor.  Line 20 should say:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define SPEED 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; to a &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, so that it now says:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define SPEED 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 4 ===&lt;br /&gt;
&lt;br /&gt;
Finally, install the WS2 software.  Download the WS2 package from [[Structural Health Monitoring|this page]] to your Cygwin home directory.  Then run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $TOSROOT/apps&lt;br /&gt;
unzip ~/Ws2_*.zip&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can test your setup by running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $TOSROOT/apps/WS2-ARQ&lt;br /&gt;
make imote2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If everything was installed correctly, then the last line printed after running these commands will say &amp;quot;&amp;lt;code&amp;gt;dwarf2bd -nc build/imote2/main.exe&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Sensor Calibration ==&lt;br /&gt;
&lt;br /&gt;
The frequency at which each sensorboard collects vibration samples may vary by as much as 10%.  In the current version of WS2, you must manually calibrate each sensorboard by collecting its &amp;quot;actual&amp;quot; frequency ahead-of-time.  &lt;br /&gt;
&lt;br /&gt;
You can measure this frequency using an oscilloscope and TinyOS's &amp;lt;code&amp;gt;TestSensorboard&amp;lt;/code&amp;gt; application.&lt;br /&gt;
&lt;br /&gt;
=== Step 1 ===&lt;br /&gt;
&lt;br /&gt;
Attach the sensorboard to the iMote2.  Orient the iMote2 so that the sensorboard is on top, as shown in the photo below.  Attach the oscilloscope's probe to the pin circled on the photo below.&lt;br /&gt;
&lt;br /&gt;
[[Image:imote2-pin31.jpg]]&lt;br /&gt;
&lt;br /&gt;
=== Step 2 === &lt;br /&gt;
&lt;br /&gt;
Install and run the &amp;lt;code&amp;gt;TestSensorboard&amp;lt;/code&amp;gt; application on the iMote2 as described here: [[Testing the Imote2 Sensor Board]]&lt;br /&gt;
&lt;br /&gt;
=== Step 3 ===&lt;br /&gt;
&lt;br /&gt;
After running the &amp;lt;code&amp;gt;StartCollection&amp;lt;/code&amp;gt; command, the iMote2 will begin collecting sensor data for about one second.  Each time it samples the accelerometer, there will be a pulse on the pin that you attached the probe to, like shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:ws2-oscilloscope.png]]&lt;br /&gt;
&lt;br /&gt;
Use the oscilloscope to measure the frequency of this pulse.  It should be approximately 560 Hz, +/- 10%.  Record this measurement.&lt;br /&gt;
&lt;br /&gt;
You will also want to record the ID of the iMote2 attached to the sensorboard.  You can find this ID by reading the last two digits of the serial number sticker found on the bottom of the iMote2 board:&lt;br /&gt;
&lt;br /&gt;
[[Image:imote2-serial.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Base Station Setup ==&lt;br /&gt;
&lt;br /&gt;
You will need to use one iMote2 to communicate wirelessly with the other iMote2s in the network.  We will refer to this mote as the &amp;quot;base station&amp;quot;.  Install the base station code on this mote by attaching the iMote2 to your PC, and then running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $TOSROOT/apps/TOSBase&lt;br /&gt;
make imote2&lt;br /&gt;
USBLoaderHost.exe -p build/imote2/main.bin.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sensor Node Setup ==&lt;br /&gt;
&lt;br /&gt;
Next, you will need to install the WS2 software on the nodes that you will attach to the structure.  Run the following command once:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $TOSROOT/apps/WS2-ARQ&lt;br /&gt;
make imote2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each mote you want attached to the structure, plug it into your PC and run this command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
USBLoaderHost.exe -p build/imote2/main.bin.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DLAC Parameters ==&lt;br /&gt;
&lt;br /&gt;
To set up the parameters to the DLAC algorithm, open the file &amp;lt;code&amp;gt;C:\tinyos\cygwin\opt\tinyos-cvs\apps\WS2-ARQ\java\ws2.properties&amp;lt;/code&amp;gt; in a text editor.&lt;br /&gt;
&lt;br /&gt;
Each line in this file with an &amp;quot;&amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt;&amp;quot; represents one DLAC parameter.  Each of these parameters has a line above it starting with a &amp;quot;&amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;&amp;quot; that describes what the parameter means.  Change the &amp;lt;code&amp;gt;W_EH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;W_AH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;W_AD&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;numNodes&amp;lt;/code&amp;gt; parameters to match the values computed offline.&lt;br /&gt;
&lt;br /&gt;
Below this, there is a section in the file that looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Mote addresses (base-16)&lt;br /&gt;
motes =          75,    46,    44&lt;br /&gt;
# Corresponding Measured sampling frequencies&lt;br /&gt;
frequencies = 598.8, 552.5, 586.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is where the calibration information is placed.  Change the &amp;lt;code&amp;gt;motes =&amp;lt;/code&amp;gt; line so that it lists the IDs on the bottom of each mote you calibrated.  Separate each ID by a comma.  Then, change the &amp;lt;code&amp;gt;frequencies =&amp;lt;/code&amp;gt; line to list the sampling frequency that you measured during the calibration step.  Again, separate each frequency by a comma.&lt;br /&gt;
&lt;br /&gt;
For example, if you have a mote with the ID 45 and a sampling frequency of 545.8 Hz, and another mote with the ID 76 and a sampling frequency of 575.6 Hz, then change these lines to read:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Mote addresses (base-16)&lt;br /&gt;
motes =          45,    76&lt;br /&gt;
# Corresponding Measured sampling frequencies&lt;br /&gt;
frequencies = 545.8, 575.6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Once you have completed these steps, the WS2 system is set up and ready to be deployed.&lt;/div&gt;</summary>
		<author><name>Gwh2</name></author>
		
	</entry>
</feed>