<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.robojackets.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ScottT</id>
	<title>RoboJackets Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.robojackets.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ScottT"/>
	<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/Special:Contributions/ScottT"/>
	<updated>2026-05-01T00:41:09Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.32.0</generator>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=User:ScottT&amp;diff=3767</id>
		<title>User:ScottT</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=User:ScottT&amp;diff=3767"/>
		<updated>2007-03-07T00:53:36Z</updated>

		<summary type="html">&lt;p&gt;ScottT: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Scott Travis'''&lt;br /&gt;
 RoboCup Electronics Team&lt;br /&gt;
 Wireless/ARM&lt;br /&gt;
 '''email''': scorpio@gatech.edu&lt;br /&gt;
 '''phone''': 770-314-5743&lt;br /&gt;
 '''AIM''': darkpathfinder&amp;lt;br&amp;gt;&lt;br /&gt;
 Feel free to AIM me sometime if you have a question.&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=RCsensors&amp;diff=3566</id>
		<title>RCsensors</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=RCsensors&amp;diff=3566"/>
		<updated>2006-12-04T16:01:06Z</updated>

		<summary type="html">&lt;p&gt;ScottT: /* Gyro */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==What We Need Now==&lt;br /&gt;
*  Gyro (for angle)&lt;br /&gt;
**  Analog Devices [http://www.analog.com/en/prod/0,2877,ADXRS300,00.html ADXRS300EB]&lt;br /&gt;
*  [[RCbatterymon|Battery monitor]]&lt;br /&gt;
*  &amp;lt;strike&amp;gt;Current Sensing (to motors)&amp;lt;/strike&amp;gt;(Will be packaged in motor drivers)--[[User:Marksp|Phillip]]&lt;br /&gt;
&lt;br /&gt;
==What We Need Eventually==&lt;br /&gt;
*  Collision Detection&lt;br /&gt;
**  Bumpers&lt;br /&gt;
**  Sonar&lt;br /&gt;
*  Ball Sensor&lt;br /&gt;
**  IR Beam&lt;br /&gt;
* &amp;lt;strike&amp;gt;Temperature Sensor&amp;lt;/strike&amp;gt;(Will also be packaged in motor drivers)--[[User:Marksp|Phillp]]&lt;br /&gt;
*  &amp;lt;strike&amp;gt;Accelerometer&amp;lt;/strike&amp;gt;/encoder - I would just go with encoders, according to CMU, we move to fast for an accelerometer/gyro --[[User:AndyB|Andy]] 21:34, 24 May 2006 (EDT)&lt;br /&gt;
** &amp;lt;strike&amp;gt;Encoder that goes with our motors: [http://maxonmotorusa.com/files/catalog/2005/pdf/05_235_e.pdf Encoder MR] [[User:ScottT|ScottT]] 19:23, 17 October 2006 (EDT)&amp;lt;/strike&amp;gt; Not getting because of lead time issue&lt;br /&gt;
&lt;br /&gt;
==Schematics==&lt;br /&gt;
Schematics&lt;br /&gt;
==Devices==&lt;br /&gt;
===Gyro===&lt;br /&gt;
Analog Devices [http://www.analog.com/en/prod/0,2877,ADXRS300,00.html ADXRS300EB]&lt;br /&gt;
&lt;br /&gt;
EagleCAD files for Gyro: [http://www.prism.gatech.edu/~gtg763x/ROBOCUP.zip ROBOCUP.zip]&lt;br /&gt;
&lt;br /&gt;
===IR Beam===&lt;br /&gt;
====IR LED====&lt;br /&gt;
*[http://robotag.carleton.ca/resources/technical/datasheets/liteon_ir_emitter_10-21.pdf Chosen 11/09/06 1.6V 50mA]&lt;br /&gt;
*[http://downloads.solarbotics.com/PDF/IR_LED_Xmit-QED233.pdf Fairchild 1.8V 180mW 940nm]&lt;br /&gt;
====IR Photo-Transistors====&lt;br /&gt;
*[http://downloads.solarbotics.com/PDF/PNA4602_datasheet.pdf Panasonic 5V bias]&lt;br /&gt;
&lt;br /&gt;
===Encoders===&lt;br /&gt;
Scott place your info here&lt;br /&gt;
Typical Circuit&lt;br /&gt;
*[http://focus.ti.com/lit/ds/symlink/cd54hct14.pdf Schimitt Tigger]&lt;br /&gt;
&lt;br /&gt;
===Collision Bumpers===&lt;br /&gt;
&lt;br /&gt;
==Articles==&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
[[RobocupElectrical|Electrical Homepage]]&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=RCsensors&amp;diff=3456</id>
		<title>RCsensors</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=RCsensors&amp;diff=3456"/>
		<updated>2006-10-17T23:23:32Z</updated>

		<summary type="html">&lt;p&gt;ScottT: /* What We Need Eventually */  - Added link for encoders that go with the motor we're currently looking at&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==What We Need Now==&lt;br /&gt;
*  Gyro (for angle)&lt;br /&gt;
**  Analog Devices [http://www.analog.com/en/prod/0,2877,ADXRS300,00.html ADXRS300EB]&lt;br /&gt;
*  [[RCbatterymon|Battery monitor]]&lt;br /&gt;
*  &amp;lt;strike&amp;gt;Current Sensing (to motors)&amp;lt;/strike&amp;gt;(Will be packaged in motor drivers)--[[User:Marksp|Phillip]]&lt;br /&gt;
&lt;br /&gt;
==What We Need Eventually==&lt;br /&gt;
*  Collision Detection&lt;br /&gt;
**  Bumpers&lt;br /&gt;
**  Sonar&lt;br /&gt;
*  Ball Sensor&lt;br /&gt;
**  IR Beam&lt;br /&gt;
* &amp;lt;strike&amp;gt;Temperature Sensor&amp;lt;/strike&amp;gt;(Will also be packaged in motor drivers)--[[User:Marksp|Phillp]]&lt;br /&gt;
*  &amp;lt;strike&amp;gt;Accelerometer&amp;lt;/strike&amp;gt;/encoder - I would just go with encoders, according to CMU, we move to fast for an accelerometer/gyro --[[User:AndyB|Andy]] 21:34, 24 May 2006 (EDT)&lt;br /&gt;
** Encoder that goes with our motors: [http://maxonmotorusa.com/files/catalog/2005/pdf/05_235_e.pdf Encoder MR] [[User:ScottT|ScottT]] 19:23, 17 October 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
==Schematics==&lt;br /&gt;
Schematics&lt;br /&gt;
==Devices==&lt;br /&gt;
==Articles==&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
[[RobocupElectrical|Electrical Homepage]]&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=RCCamera&amp;diff=3427</id>
		<title>RCCamera</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=RCCamera&amp;diff=3427"/>
		<updated>2006-10-09T23:16:19Z</updated>

		<summary type="html">&lt;p&gt;ScottT: /* Camera */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Camera==&lt;br /&gt;
So, after speaking with the folks at the US Open, I have some information to report about the cameras used. The CMU team used two of the smallest Sony prosumer three chip cameras with wide angle lenses. They did not stream from firewire, but rather used S-Video and a capture card per camera. They used  the deinterlaced frames to get a apparent speed of 60 FPS. Consequently, they need the enhanced color reproduction of the three chip cameras because they are using the deinterlaced frames which implies they have about half the resoloution (320 x 240) of interlaced frames (640 x 480). That is, the ball makes up only about 12 pixels with the deinterlaced frames, and accurate color reproduction is a necessity to be able to pick the ball out of the background noise.&lt;br /&gt;
&lt;br /&gt;
So, with a quick enough camera, the color reproduction should not matter as much. &lt;br /&gt;
&lt;br /&gt;
For professional machine vision cameras, the following look pretty good. &lt;br /&gt;
===Pro Cameras===&lt;br /&gt;
* [http://www.baslerweb.com/index.html Basler] &lt;br /&gt;
**[http://www.baslerweb.com/downloads/11684/A600_9.pdf A601fc (60 FPS) or the A602fc (100 FPS)]. They are VGA (640 x 480) color firewire cameras which are linux compatible.&lt;br /&gt;
* [http://www.ptgrey.com/index.asp Point Gray] has some promising cameras (and generally better pricing). &lt;br /&gt;
** [http://www.ptgrey.com/products/flea/index.asp Flea] 60 FPS at VGA 12 bit color&lt;br /&gt;
** [http://www.ptgrey.com/products/flea2/index.asp Flea 2] 60 FPS at VGA 12 bit color&lt;br /&gt;
** [http://www.ptgrey.com/products/dragonfly2/index.asp Dragonfly 2] 60 FPS at VGA 12 bit color onboard RGB, YUV etc conversion. &lt;br /&gt;
** [http://www.ptgrey.com/products/scorpion/index.asp Scorpion] 60 FPS at VGA 12 bit color&lt;br /&gt;
&lt;br /&gt;
===Camera We Have===&lt;br /&gt;
* Videre&lt;br /&gt;
** Model DCAM-L&lt;br /&gt;
** 4 mm CS mount lens&lt;br /&gt;
&lt;br /&gt;
===Camera Resources===&lt;br /&gt;
* [http://damien.douxchamps.net/ieee1394/cameras/index.php Linux Driver Page] Really good!!&lt;br /&gt;
* [http://www.cs.cmu.edu/~iwan/1394/ CMU 1394 page]&lt;br /&gt;
* [http://sourceforge.net/projects/linux1394 Sourceforge 1394]&lt;br /&gt;
* [http://sourceforge.net/projects/unicap Sourceforge Unicap]&lt;br /&gt;
* [http://sourceforge.net/projects/iidcapi Sourceforge IEEE1394 Digital Camera API]&lt;br /&gt;
&lt;br /&gt;
==Lens==&lt;br /&gt;
* 68 degree FOV (with one camera - not really practical)&lt;br /&gt;
* 35 degree FOV (with two cameras)&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=RCwicoprocessor&amp;diff=3426</id>
		<title>RCwicoprocessor</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=RCwicoprocessor&amp;diff=3426"/>
		<updated>2006-10-09T23:02:23Z</updated>

		<summary type="html">&lt;p&gt;ScottT: /* Parts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The wireless co-processor will act as a the link between the packet modem and the micro. Its main function is to handle the wireless communications protocol and serve as a simple buffer (do we need this?). Serial data from the wireless module will be feed into the co-processor's UART. The co-processor will then retransmit only the velocity and theta to the micro on the SPI or some other protocol, when the micro has its ready to recieve line pulled low.&lt;br /&gt;
==The Wall==&lt;br /&gt;
==To Do==  &lt;br /&gt;
==Specifications==&lt;br /&gt;
==Schematics==&lt;br /&gt;
==Parts==&lt;br /&gt;
Atmel ATiny 2313&lt;br /&gt;
*[http://www.atmel.com/dyn/resources/prod_documents/2543S.pdf Data Short]&lt;br /&gt;
*[http://www.atmel.com/dyn/resources/prod_documents/doc2543.pdf Data Sheet]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Atmega-16 40-pin dip JTAG&lt;br /&gt;
*[http://www.atmel.com/dyn/resources/prod_documents/2466S.pdf Data Short]&lt;br /&gt;
&lt;br /&gt;
==Articles==&lt;br /&gt;
==Links== &lt;br /&gt;
* [[RCwiproc|Wireless Protocol]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[RobocupElectrical|Electrical Homepage]]&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=RCmicro&amp;diff=3421</id>
		<title>RCmicro</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=RCmicro&amp;diff=3421"/>
		<updated>2006-10-09T22:16:04Z</updated>

		<summary type="html">&lt;p&gt;ScottT: WinARM link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The microprocessor is the heart of the 2007 robojackets robocup competition robot and acts as the interface between the wireless communication system and the robot proper. A simple firmware program monitoring the internal sensors of the robot and controling the motor and ball roller/shoot will run on the micro. Currently as part of our phase one objectives we are looking closly at processors from Atmel, SI Labs, Motorola, and PICs. Below are some specs.&lt;br /&gt;
==The Wall==&lt;br /&gt;
9/14/06 - We chose a dev kit see the sparkfun link below. It'll cost $64.95 a pop and we are getting 3.&lt;br /&gt;
&lt;br /&gt;
==To Do==&lt;br /&gt;
*Finalize number of I/O and type (SPI, PWM, ADC, etc)&lt;br /&gt;
*Design Schematic tying in all devices&lt;br /&gt;
*Breadboard to test write simple code&lt;br /&gt;
*Get board made&lt;br /&gt;
*Write Code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Specifications==&lt;br /&gt;
{| style=&amp;quot;text-align:center;&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090;&amp;quot; | Device &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 32-bit microprocessor&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Power&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 3.3V Low pwt&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Archetecture &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | ARM&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Clock&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | &amp;gt;50 MHz&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Memory&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Flash 128Kb &lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | IO pins &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 32-64 pins Software Configurable&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Interfaces &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | SPI, UART&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | DA/AD &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | (3)10-bit DAC (2)10/16-bit ADC&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Timers &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 8-bit (3)&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | PWM &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 4 channels&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Programming &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | JTAG or Bootloader&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; background:#909090&amp;quot; | &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; background:#d0d0d0&amp;quot; | &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Schematics==&lt;br /&gt;
Schematics&lt;br /&gt;
==Articles==&lt;br /&gt;
*[http://direct.xilinx.com/bvdocs/whitepapers/wp123.pdf Article on Interfacing ARM processors and FPGAs]&lt;br /&gt;
*[http://tech.groups.yahoo.com/group/lpc2000/ Yahoo group about just the LPC ARM from Phillips]&lt;br /&gt;
&lt;br /&gt;
==Possible Micros==&lt;br /&gt;
Phillips LPC &lt;br /&gt;
*[http://www.sparkfun.com/commerce/product_info.php?products_id=266 Sparkfun dev kit] &lt;br /&gt;
*[http://www.standardics.nxp.com/literature/leaflets/microcontrollers/pdf/lpc213x.pdf Phillips LPC213x series ARMs. Less memory than the LPC221x series but lower-power consumption and smaller footprint. Its still every bit as capable]&lt;br /&gt;
*[http://www.nxp.com/acrobat_download/literature/9397/75014627.pdf Phillips LPC221x series ARMs. More memory vs LPC2213x. COntains everything we need.]&lt;br /&gt;
*[http://www.lpctools.com/index.asp?PageAction=VIEWPROD&amp;amp;ProdID=54 Dev kit for LPC213x series $149.00. 2 issues: Do we have a JTAG programmer and if so will it fit the pin-out of this device?]&lt;br /&gt;
AVR32&lt;br /&gt;
*[http://www.atmel.com/products/AVR32/ ATMEL's answer to the ARM. Has everything '''including''' the kitchen sink.]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
*[http://www.skyeye.org/index.shtml ARM processor simulator for Linux] - might be able to use this to test things, but I'm not sure it would be better than just taking home a dev board. :P [[User:ScottT|ScottT]]&lt;br /&gt;
*[http://www.open-research.org.uk/ARMuC/ ARM Wiki] - Good page with a lot of ARM resources/links. [[User:ScottT|ScottT]]&lt;br /&gt;
*[http://www.heyrick.co.uk/assembler/qfinder.html Page of ARM processor instructions] - ASSEMBLY instructions, if we need them. [[User:ScottT|ScottT]]&lt;br /&gt;
*[http://www.arm.com/support/training/type4680.html Apparently free ARM course] - Not sure how useful this could be. [[User:ScottT|ScottT]]&lt;br /&gt;
*[[RCfirmware|Firmware]]&lt;br /&gt;
*[http://bray.velenje.cx/avr/terminal/ Bray++ Terminal (just download/run, no install!)]&lt;br /&gt;
*[http://gandalf.arubi.uni-kl.de/avr_projects/arm_projects/#winarm WinARM ARM development programs for Windows]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[RobocupElectrical|Electrical Homepage]]&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=RCmicro&amp;diff=3420</id>
		<title>RCmicro</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=RCmicro&amp;diff=3420"/>
		<updated>2006-10-09T22:09:31Z</updated>

		<summary type="html">&lt;p&gt;ScottT: Bray++ Terminal Link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The microprocessor is the heart of the 2007 robojackets robocup competition robot and acts as the interface between the wireless communication system and the robot proper. A simple firmware program monitoring the internal sensors of the robot and controling the motor and ball roller/shoot will run on the micro. Currently as part of our phase one objectives we are looking closly at processors from Atmel, SI Labs, Motorola, and PICs. Below are some specs.&lt;br /&gt;
==The Wall==&lt;br /&gt;
9/14/06 - We chose a dev kit see the sparkfun link below. It'll cost $64.95 a pop and we are getting 3.&lt;br /&gt;
&lt;br /&gt;
==To Do==&lt;br /&gt;
*Finalize number of I/O and type (SPI, PWM, ADC, etc)&lt;br /&gt;
*Design Schematic tying in all devices&lt;br /&gt;
*Breadboard to test write simple code&lt;br /&gt;
*Get board made&lt;br /&gt;
*Write Code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Specifications==&lt;br /&gt;
{| style=&amp;quot;text-align:center;&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090;&amp;quot; | Device &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 32-bit microprocessor&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Power&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 3.3V Low pwt&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Archetecture &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | ARM&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Clock&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | &amp;gt;50 MHz&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Memory&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Flash 128Kb &lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | IO pins &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 32-64 pins Software Configurable&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Interfaces &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | SPI, UART&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | DA/AD &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | (3)10-bit DAC (2)10/16-bit ADC&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Timers &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 8-bit (3)&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | PWM &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 4 channels&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Programming &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | JTAG or Bootloader&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; background:#909090&amp;quot; | &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; background:#d0d0d0&amp;quot; | &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Schematics==&lt;br /&gt;
Schematics&lt;br /&gt;
==Articles==&lt;br /&gt;
*[http://direct.xilinx.com/bvdocs/whitepapers/wp123.pdf Article on Interfacing ARM processors and FPGAs]&lt;br /&gt;
*[http://tech.groups.yahoo.com/group/lpc2000/ Yahoo group about just the LPC ARM from Phillips]&lt;br /&gt;
&lt;br /&gt;
==Possible Micros==&lt;br /&gt;
Phillips LPC &lt;br /&gt;
*[http://www.sparkfun.com/commerce/product_info.php?products_id=266 Sparkfun dev kit] &lt;br /&gt;
*[http://www.standardics.nxp.com/literature/leaflets/microcontrollers/pdf/lpc213x.pdf Phillips LPC213x series ARMs. Less memory than the LPC221x series but lower-power consumption and smaller footprint. Its still every bit as capable]&lt;br /&gt;
*[http://www.nxp.com/acrobat_download/literature/9397/75014627.pdf Phillips LPC221x series ARMs. More memory vs LPC2213x. COntains everything we need.]&lt;br /&gt;
*[http://www.lpctools.com/index.asp?PageAction=VIEWPROD&amp;amp;ProdID=54 Dev kit for LPC213x series $149.00. 2 issues: Do we have a JTAG programmer and if so will it fit the pin-out of this device?]&lt;br /&gt;
AVR32&lt;br /&gt;
*[http://www.atmel.com/products/AVR32/ ATMEL's answer to the ARM. Has everything '''including''' the kitchen sink.]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
*[http://www.skyeye.org/index.shtml ARM processor simulator for Linux] - might be able to use this to test things, but I'm not sure it would be better than just taking home a dev board. :P [[User:ScottT|ScottT]]&lt;br /&gt;
*[http://www.open-research.org.uk/ARMuC/ ARM Wiki] - Good page with a lot of ARM resources/links. [[User:ScottT|ScottT]]&lt;br /&gt;
*[http://www.heyrick.co.uk/assembler/qfinder.html Page of ARM processor instructions] - ASSEMBLY instructions, if we need them. [[User:ScottT|ScottT]]&lt;br /&gt;
*[http://www.arm.com/support/training/type4680.html Apparently free ARM course] - Not sure how useful this could be. [[User:ScottT|ScottT]]&lt;br /&gt;
*[[RCfirmware|Firmware]]&lt;br /&gt;
*[http://bray.velenje.cx/avr/terminal/ Bray++ Terminal (just download/run, no install!)]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[RobocupElectrical|Electrical Homepage]]&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=RCwiproc&amp;diff=3419</id>
		<title>RCwiproc</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=RCwiproc&amp;diff=3419"/>
		<updated>2006-10-09T21:13:31Z</updated>

		<summary type="html">&lt;p&gt;ScottT: Added link about programming communication protocols&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Wireless Protocol==&lt;br /&gt;
&lt;br /&gt;
The host will send each robot velocity, direction, and shoot directives, at a rate of about 40-50 Hz. '''(This data rate still needs to be confirmed with testing)''' In such a way the enitre system (host, camera, and robot) will behave as a real-time system. The robot will send its current error status, battery voltage, wheel velocity, unique ID, and whether or not it has the ball to the host but at the much slower rate of 10Hz.&lt;br /&gt;
&lt;br /&gt;
==Comments==&lt;br /&gt;
'''MOVED TO [[Talk:RCwiproc|DISCUSSION PAGE]] (discussion tab up top, or just click that link)''' [[User:ScottT|ScottT]]&lt;br /&gt;
&lt;br /&gt;
==To Do==&lt;br /&gt;
* Research protocols &lt;br /&gt;
** &amp;lt;strike&amp;gt;UDP (User Datagram Protocol)&amp;lt;/strike&amp;gt; - Dropping UDP as a choice in protocol. Would need a module that implements it already&lt;br /&gt;
** &amp;lt;strike&amp;gt;Protocol Book&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Determine the rate at which to update robots - Will need to find theoretical base for this and confirm with test.&lt;br /&gt;
* &amp;lt;strike&amp;gt;Specify a custom protocol&amp;lt;/strike&amp;gt; - Remeber to do Visio graph of packet structure&lt;br /&gt;
* &amp;lt;strike&amp;gt;Evaluate and compare UDP to a custom protocol&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Protocol Structure==&lt;br /&gt;
===What is a Protocol?===&lt;br /&gt;
A protocol is a set of rules to define how two or more entities comunicate. It contains 5 basic elements:&lt;br /&gt;
*A '''service''' definition - What information will the protocol provide the entities that utilize it?&lt;br /&gt;
*A set of '''assumptions''' - What is assumed to in the protocol? What isn't?&lt;br /&gt;
*A '''vocabulary''' - What will be the forms of data that I will use to communicate with this protocol&lt;br /&gt;
*A '''format/encoding''' - How will my vocabulary coherantly  fit together to form larger msgs, and cmds&lt;br /&gt;
*A set of '''procedural rules''' - How will I intiate communication? How are the entities using this protocol indentied? What are thier roles?&amp;lt;br&amp;gt;&lt;br /&gt;
Other considerations such as the medium are not specifically stated in the protocol but influence how the protocol is formed. Consider the difference between Wi-Fi where one router can talk to multiple devices versus communication between a wired video game controller and a console. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
As an example of a protocol consider the english language in its vocal form. The '''service''' it provides is a means of conveying thoughts thruogh the use of sound. It '''assumes''' that all the parties involved can speak and understand english, that the medium is such that the transmission of sound waves is possible, and that meaning of the '''vocabulary''' used is the same among all parties involved. Its '''vocabulary''' is made up of 26 letters that by themselves or in groups represent a set of vocal patterns generated and recieved by all the parties involved. In this abstract defintion of '''vocabulary''', it is not words but rather letters and the sounds they make that form the protocol. The basic '''format''' of the english language is such that the vocabulary of letters is formed into words, which each carry the meaning of the thought being conveyed. The procedural rules change based on the situation. Sometimes one person is communicating with a group of passive listeners, at other times several people are communicating with one person at once. There are even times (eavesdropping) where one or more parties are listening to a speaker not directly communicating to them.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===Our Protocol===&lt;br /&gt;
====Packet Structure====&lt;br /&gt;
Header Format:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{|  cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Start/Flag (1 byte)&lt;br /&gt;
! width=&amp;quot;240&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|RobotID (5 bits) / Type (3 bits)&lt;br /&gt;
! width=&amp;quot;280&amp;quot; bgcolor=&amp;quot;#d0d0d0&amp;quot;|Data (0 - 137 bits)&lt;br /&gt;
! width =&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Checksum/CRC (1 - 2 byte)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The header consists of a start or flag byte to indicate the start of a packet, 5 bits to identify the robot(s) being sent to (00000 for robot-&amp;gt;host communication), and 3 bits to indicate the type of message. The types of messages can be:&lt;br /&gt;
* Init Message&lt;br /&gt;
* Data Message&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
For Init messages, the robot sends the init message out to each robot (1-5) in turn and waits for an ACK message. For data messages, they can either be Control messages or Data/Movement messages as specified by the first bit of the data field. Init/Data Control messages are followed by a 8 or 16 bit CRC/Checksum while the Data Movement/Data messages are followed by a 16 or 32 bit CRC/Checksum.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Control Message:&lt;br /&gt;
{|  cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! bgcolor=&amp;quot;#909090&amp;quot;|Flag/0 (1 bit)&lt;br /&gt;
! width=&amp;quot;93&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Message Type (3 bits)&lt;br /&gt;
! width=&amp;quot;124&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Errors (4 bits)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Checksum/CRC (8 or 16 bits)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Data Message:&lt;br /&gt;
{|  cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! bgcolor=&amp;quot;#909090&amp;quot;|Flag/1 (1 bit)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 1 Data (3 bytes/24 bits)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 2 Data (3 bytes/24 bits)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 3 Data (3 bytes/24 bits)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 4 Data (3 bytes/24 bits)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 5 Data (3 bytes/24 bits)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Checksum/CRC (16 or 32 bits)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''OUTDATED'''&lt;br /&gt;
----&lt;br /&gt;
{| style=&amp;quot;text-align:left; width:100%; height:300px&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|+ '''Host to Robot Messages'''&lt;br /&gt;
|-style=&amp;quot;border:1px solid black; border-bottom:0px; background:#909090&amp;quot;&lt;br /&gt;
! style=&amp;quot;border:1px solid black;border-bottom:1px&amp;quot;|MsgID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ACK? !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|To &lt;br /&gt;
!! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|DLC !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Data Format !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Description&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090;&amp;quot; | Wakeup &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x01&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Byte 1 Robot ID&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Host polls for each robot individually. When this msg is recieved by a robot it responds with a status msg indicating that it is ready for action.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Go/Start  &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x02&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | None&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Intiates main process on robots.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Data&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x03&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | All robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 15&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | See below&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Streaming data sent to all robots in one msg.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Game Reset&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x04&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | All robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | None&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Ends the main process on all robots. Reverts them back to wakeup state.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Shoot Ball&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x05&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Robot ID (1 byte) Robot Angle (1 byte)&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Commands the robot with ID given to take the shot. &lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Robot Stop&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x06&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Robot ID&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Commands an indivdual robot to stop. May not be used.&lt;br /&gt;
|}&lt;br /&gt;
With the format for the Data messages being defined as:&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
{|  cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Byte 1||Byte 2||Byte 3&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Vx (1 byte)&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Vy (3 bits)&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Theta (5 bits)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{| style=&amp;quot;text-align:left; width:100%; height:100px&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|+ '''Robot to Host Messages'''&lt;br /&gt;
|-style=&amp;quot;border:1px solid black; border-bottom:0px; background:#909090&amp;quot;&lt;br /&gt;
! style=&amp;quot;border:1px solid black;border-bottom:1px&amp;quot;|MsgID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ACK? !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|To &lt;br /&gt;
!! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|DLC !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Data Format !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Description&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090;&amp;quot; | Status &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0xA&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Host&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | None&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Given in response to Wakeup message. Data section not fully specified, contains battery info serial number error state&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Protocol Procedural Rules====&lt;br /&gt;
When messages are being sent between the host and the team robots care must be taken to cause data collisions, message oscillations, and other errors. To prevent such events a set of procedural rules are implemented dictating when each msg is sent and what happens both before and after the messages transmission. Below is a detailed explanation of the procedural rules for each message and finally somMay be folded into msg 0x04e flow charts for events such as initial startup and stopping.&lt;br /&gt;
&lt;br /&gt;
=====Wakeup=====&lt;br /&gt;
As the title says this msg brings the robots out of a known &amp;quot;sleep&amp;quot; state and registers them the host controller. The motivaton for the message and the procedure it details is so that message transfer starts from a known safe state, this state being the &amp;quot;sleep&amp;quot; the state. The &amp;quot;sleep&amp;quot; state is entered once the robot is turned on and is written in firmware. In &amp;quot;sleep&amp;quot; state the robots will not talk to the host nor respond to any messages except wakeup. The procedure for waking up a team is as follows:&lt;br /&gt;
*First the human operator feeds in the unique ID of each robot on the field. These ID numbers range from 1-10 and in fact are the IDs included in each message. &lt;br /&gt;
*When the command is given the host sends out the wakeup msg to the robot whose ID is first in the list of IDs fed in the the operator.&lt;br /&gt;
*If the robot with that ID is on the field it will immediately respond back to the host with a status message giving information on its health, and its unique serial number.&lt;br /&gt;
*When the host recieved this status message it will move on the next ID in its list and transmit a wakeup message with that ID.&lt;br /&gt;
*If the host does not recieve a status message back or the health of the robot is such that its not ready it will alert the operator and will not continue the wakeup sequence.&lt;br /&gt;
*Once all the robots have been verified to be on the field and ready the wakeup sequence shall be considered complete and host is now ready to start a game. &amp;lt;br&amp;gt;&lt;br /&gt;
You may wonder why the wakeup msg is sent to each robot one at a time. Even though our protocol is full-duplex it doesn't define an arbitration scheme. As work-around messages from the robots to the host are only sent when asked for by the host. In such a manner we can ensure that only one robot can talk to the host at a time, avoiding data collisions. Future implementations we see the addition of arbitration.&lt;br /&gt;
=====GO/Start=====&lt;br /&gt;
Once the robots on the field are found and in good order we can start a game. The GO/Start message signals the robots to begin thier main process and prepare to recieve data. The robots do not acknowledge this message since it is a broadcast message. Broadcast messages are messages sent to all robots at once, and makeup the majority of msgs sent on the wirless channel. The motivation for these message types is simplicity. Instead of sending most messages to each robot individually and flooding the wireless channel thereby increasing chances for a dropped packets we package the information in one big message. As a consequence there can be no acknowledgments to these messages due to the lack of an arbitration scheme. &lt;br /&gt;
=====Data=====&lt;br /&gt;
This message will be the bulk of the messages sent from on the wireless channel. It is a broadcast message for the above reasons and hence no acknowledgment is required. Each robots data values are picked off from the data section. This message can only be recieved by a robot when it is out of sleep mode.&lt;br /&gt;
=====Game Stop=====&lt;br /&gt;
Another broadcast message. Singals the end or stoppage of game play. When the robots are stopped they are not in sleep mode and can still communicate with the host. But since they are stopped thier internal process is no longer active and they act as &amp;quot;dumb&amp;quot; terminals.&lt;br /&gt;
=====Shoot Ball=====&lt;br /&gt;
As the title says this messages signals the robot whose ID it is sent to to shoot the ball, once it has rotated a given number of degrees. Since this is an individual robot message an acknowledgment is allowed and is required.&lt;br /&gt;
=====Robot Stop=====&lt;br /&gt;
The same as Game Stop only sent to individual robots. Since this is an individual robot message an acknowledgment is allowed and is required.&lt;br /&gt;
=====Status=====&lt;br /&gt;
The only message sent from the robot to the host, the status message serves as both an actual status message and as an ACK. In any case status messages are only sent was ack to messages that allow acknowledgments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Articles==&lt;br /&gt;
*[http://www.linxtechnologies.com/documents/AN-00160.pdf Linx article on protocol design]&lt;br /&gt;
*[http://focus-webapps.ti.com/general/docs/sitesearch/searchsite.tsp?searchTerm=serial%20RS232%20drivers&amp;amp;selectedTopic=1077383935&amp;amp;numRecords=25 TI Example wireless system design protocol and all]&lt;br /&gt;
*[http://www.mathpages.com/home/kmath458.htm Paper on the Cylical Redundancy Check error checking algorithm (CRC)]&lt;br /&gt;
*[http://spinroot.com/spin/Doc/Book91.html Enitre book on protocol design, a bit dated though like 1990 dated]&lt;br /&gt;
*[http://bwrc.eecs.berkeley.edu/People/Faculty/jan/publications/p124.pdf Berkeley article on wireless protocol design. Gives a real world example of how to design a wireless protocol.]&lt;br /&gt;
*[http://www.ohiolink.edu/etd/send-pdf.cgi?ohiou1121356426 Ohio University article. Details an intresting communications method]&lt;br /&gt;
*[http://www.eetasia.com/ARTICLES/2005JUN/A/2005JUN06_RFD_AN01.PDF Paper from Maxim on Manchester Encoding]&lt;br /&gt;
*[http://webs.cs.berkeley.edu/retreat-6-03/slides/ChipconECC.ppt Berkeley PPT on errors and wireless]&lt;br /&gt;
*[http://bbs.circuitcellar.com/phpBB2/viewtopic.php?t=2233&amp;amp; Circuit Cellar discussion on Manchester Encoder/Decoder]&lt;br /&gt;
*[http://robocup.mae.cornell.edu/documentation/robocup/2002/2002EE.pdf Cornell electrical design document]&lt;br /&gt;
*[http://www.ddj.com/dept/cpp/193004231 Page on coding communications protocols in C++]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
[[RCcoms|Wireless Hompage]]&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=User:ScottT&amp;diff=3386</id>
		<title>User:ScottT</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=User:ScottT&amp;diff=3386"/>
		<updated>2006-10-06T01:51:00Z</updated>

		<summary type="html">&lt;p&gt;ScottT: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Scott Travis'''&lt;br /&gt;
 RoboCup Electronics Team&lt;br /&gt;
 Wireless/ARM&lt;br /&gt;
 '''email''': scorpio@gatech.edu&lt;br /&gt;
 '''AIM''': darkpathfinder&amp;lt;br&amp;gt;&lt;br /&gt;
 Feel free to AIM me sometime if you have a question.&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=User:ScottT&amp;diff=3385</id>
		<title>User:ScottT</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=User:ScottT&amp;diff=3385"/>
		<updated>2006-10-06T01:48:17Z</updated>

		<summary type="html">&lt;p&gt;ScottT: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;RoboCup Electronics Team&lt;br /&gt;
Wireless/ARM &lt;br /&gt;
AIM: darkpathfinder&lt;br /&gt;
&amp;lt;bR&amp;gt;&lt;br /&gt;
Feel free to AIM me sometime if you have a question.&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=Talk:RCwiproc&amp;diff=3379</id>
		<title>Talk:RCwiproc</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=Talk:RCwiproc&amp;diff=3379"/>
		<updated>2006-10-05T05:03:29Z</updated>

		<summary type="html">&lt;p&gt;ScottT: reponse to problem&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Why is this a problem? The robot would be constantly receiving on it's Rx channel and transmitting when it needs to on the Tx channel. The Rx channel on the robot will always be fed with information from the host. The Tx channel should be able to be read with whichever wireless module is on the Tx channel, right? I mean, just because it's a dedicated transmitting channel doesn't mean the robot can't read it just to determine if there's traffic on the channel, right? I'm not sure if I understand the problem. [[User:ScottT|ScottT]] 01:03, 5 October 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* Realized a problem with the design from Tuesday, mainly how does the robot check if the RX is clear if the TX module is on another frequency and talking with the host. This is the problem I mentioned earlier. We might need to go back to the previous version unless we don't want collision detection on the RX channel. [[User:Marksp|Marksp]] 13:32, 4 October 2006 (EDT)&lt;br /&gt;
* I've been looking into the issue of how/when the robots/host should be sending data over the wireless. I suggest that we go about it one of two ways... the first/easiest being keeping every transmitter/station in sync and devoting specific times during a cycle for each of the robots and the host to use the channel. Essentially, divide a ~14-20ms space of time between the 5 robots and the host depending how much they need to transmit (host packets may be larger than robot packets...). While this would work, it's inefficient in using the channel if not every robot needs to trasmit during a cycle. The second way would be something close to [[http://en.wikipedia.org/wiki/CSMA-CD CSMA/CD]] (Carrier Sense Multiple Access with Collision Detection). This works by checking the channel to see if it's free and also checking to see if, while transmitting, a collision occurs and to handle such an event accordingly. This would be a more efficient use of the available time on the channel however, it would be more complicated. We could work it to give the host precidence over the robots to transmit, possibly. There is, of course, the option of using two wireless modules on every station to allow different Tx/Rx channels. The host could be constantly transmitting over it's Tx channel while listening for any robots on the Rx channel. Meanwhile, the robots would be constantly listening on their Rx channels (same freq as host Tx) and transmit when necessary over their Tx channels (same freq as host Rx). I believe this would provide the most efficient use of the channels and would free us from worrying about the host transmissions getting in collisions with robot transmissions. We could also implement the CSMA/CD scheme on the robot Tx/host Rx channel so that the robots can make efficient use of their available bandwidth in communicating with the host. Any or all of these schemes should work and, time permitting, I think we should try and test them all to see which we like better. The scheme with a single-channel and time divided transmissions between host and robots would likely be the simplest to implement... the main problem there may be keeping the timing constant. What do you guys think? [[User:ScottT|ScottT]] 17:05, 2 October 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* I'll be at the meeting today until 7 at the latest. That said, I'll see if I can get this page a bit cleaner and divided better based on topics. Do we have the wireless modules/ARM dev kits so that we can start testing? It'd be great to have a testbed for the wireless itself so we can try out different protocol ideas. Here's a question I'll pose to you guys though: how reliable do we want the protocol to be? If it's very reliable, we'd have things like retransmission of packets and such that'd make sure each command got to the robots, but we might lose some of that &amp;quot;real-time&amp;quot; aspect in the process. If it's unreliable, we can be as real-time as we want but we'd have to make sure the robots could deal with some dropped/lost packets. [[User:ScottT|ScottT]] 16:22, 25 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* Man, we are filling this comments section up. Yeah, work first. Don't worry about showing up if you really want to we can just conference you on aim, but I don't want you to have to be worrying about 4 test and go to a meeting. As for the article it looks promising, we might slash certian parts in the packets since the size of our network is know. As for assembly programming, only if its punch-cards and bare teeth. Oh yeah some Grand Challenge guys were in the COC lab and were talkin mess about how they would rather have a Porsches than little robots.  --[[User:Marksp|Phillip]] 20:32, 24 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* I came across an interesting paper doing some work for my ECE4605 class; it details RTP which is a transport protocol for real-time applications. I haven't had a chance to read it, but we may be able to gleam some good information from it. [http://www.ietf.org/rfc/rfc3550.txt RTP - RFC3550] I'll also try and take a look at that book on protocols you mentioned. I should give you a heads up, however, that I'm not sure how much time I'll get to goto the meetings this week as I have 4 tests (one on 4 different days...) and a 30-minute presentation to give (on the day I don't have a test). I should be able to make it for maybe an hour on Monday and a little while on Thursday, but I probably wont be able to stay as long as I'd like. That said, if you could let me know of any pertanent information I miss from the meetings, I'll try and keep doing some research/work on the protocol and programming for the ARM. Which reminds me, we're just programming in C/C++ then compiling it for ARM, right? Or are we going to do really low-level assembly programming for the ARM? If we run out of topics to talk about sometime during the meetings, perhaps we can determine exactly what we want the robots to be able to do... then think about what programs/functions we'll have to program in. [[User:ScottT|ScottT]] 21:53, 23 September 2006 (EDT)&lt;br /&gt;
** We have GCC I'm gonna strongly reccomend we use it. --[[User:AndyB|Andy]] 01:32, 24 September 2006 (EDT)&lt;br /&gt;
*** I completely agree. Just making sure that I wasn't assuming we'd have higher-level languages when all we could actually use was assembly. :P [[User:ScottT|ScottT]] 16:22, 25 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* Also remember two other things. Our module is going to filter out all parts of the spectrun except for the area around the carrier frequency. Unless another team is being an ass we should be the only team on that frequency. Also monitoring the channel means that either our RX module and TX always be on the same frequency so that RX module can look for the channel to be clear or we have to switch frequencies on the RX module which takes a fair amount of time in fact more than we can handle and still be broadcasting at 55Hz. But we'll have to do some investigating at the meeting on Monday. In the mean time be sure to take a look at that book on protocol design thats at the bottom of this page, it actually has a caculation in chp7 I believe for determining the optimal configuration for a protocol based on reliability. [[User:MarksP|MarksP]] 19:16, 21 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* I think we should definatly go with monitoring the channel for when the channel is clear... or, perhaps, dividing the sending time between each of the systems... each block of time is divided between the host sending a message, then each robot in turn sending a message... I actually hadn't thought about that mostly because my classes haven't dealt with wireless protocols so much yet. ;) Something to consider when watching the channel, however, is whether or not interference from other teams will be picked up as activity on the channel. [[User:ScottT|ScottT]] 18:59, 20 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
*As far as ACKs are concerned remember that for wireless arbitration between msgs gets a bit hairy. Say two robots try to respond back to the host at the same time. The wireless signal that the host will recieve will be the analog sum the signals from those two robots. It is impossible for the host to tell which is which. Two ways around this: We could have each robot time out a set time t before it responds with an ACK. If we add a delay to t for each robot, then they will respond in an orderly fashion one after the other. Another solution is to have each robot look for traffic on the wireless channel and transmit only when the channel is clear. This is the best solution and is similar to the scheme used in CAN. Also remember this protocol needs to be as low level as possible. As for checking for wheel jams thats an issue for the motor controller. In the event of a jam its probably best to end gameplay for that robot since this isn't a safetly critical application. [[User:Marksp|Phillip]]&lt;br /&gt;
&lt;br /&gt;
* What about the rate of dropped packets... how many do we actually expect to have? Since the system will be as close to real-time as possible, we'll have to deal with these dropped packets as well as any out-of-order packets that may arise because of the drop. Unless there's a good reason not to, we might want to have ACKs for every packet sent... both to and from the robots. We obviously have a unique situation in that we have a designated server and clients all the time... in other words, we only have to imeplement a client and a server protocol that correctly interact rather than a universal protocol where you could be either client or server (TCP, etc.). I think one of the first things we should do is figure out how we want to handle errors (if at all). Also, should the server be constantly broadcasting to each robot? Maybe a constant packet size, always transmitting at set times with corresponding ACKs from each robot after every packet? Just shooting some ideas out there. I'll try and look into this more before Thursday so we can speak on it some. [[User:ScottT|ScottT]] 00:48, 20 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* Do the robots implement any kind of checking on whether or not their wheels are jammed? Or other mechanical/electrical errors? [[User:ScottT|ScottT]] 22:23, 19 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* Parts of this protocol seem like there's too much or too little emphasis on some areas. Also, we may be able to work on the size of each packet a bit by playing around with what information we put in the header. The checksum is definatly good, but we need to consider the impact this could have on the &amp;quot;real-time&amp;quot; nature of the protocol. We may not be using UDP, but perhaps we can draw some from it. This is a great start, and I'll put some more comments/thoughts later, but I managed to burn the fingertips of 3 of my fingers, so typing takes some time right now, heh. [[User:ScottT|ScottT]] 22:20, 19 September 2006 (EDT)&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=RCwiproc&amp;diff=3376</id>
		<title>RCwiproc</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=RCwiproc&amp;diff=3376"/>
		<updated>2006-10-02T23:25:12Z</updated>

		<summary type="html">&lt;p&gt;ScottT: Began rewriting protocol page based on discussion during the 10/2/2006 meeting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Wireless Protocol==&lt;br /&gt;
&lt;br /&gt;
The host will send each robot velocity, direction, and shoot directives, at a rate of about 40-50 Hz. '''(This data rate still needs to be confirmed with testing)''' In such a way the enitre system (host, camera, and robot) will behave as a real-time system. The robot will send its current error status, battery voltage, wheel velocity, unique ID, and whether or not it has the ball to the host but at the much slower rate of 10Hz.&lt;br /&gt;
&lt;br /&gt;
==Comments==&lt;br /&gt;
'''MOVED TO [[Talk:RCwiproc|DISCUSSION PAGE]] (discussion tab up top, or just click that link)''' [[User:ScottT|ScottT]]&lt;br /&gt;
&lt;br /&gt;
==To Do==&lt;br /&gt;
* Research protocols &lt;br /&gt;
** &amp;lt;strike&amp;gt;UDP (User Datagram Protocol)&amp;lt;/strike&amp;gt; - Dropping UDP as a choice in protocol. Would need a module that implements it already&lt;br /&gt;
** &amp;lt;strike&amp;gt;Protocol Book&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Determine the rate at which to update robots - Will need to find theoretical base for this and confirm with test.&lt;br /&gt;
* &amp;lt;strike&amp;gt;Specify a custom protocol&amp;lt;/strike&amp;gt; - Remeber to do Visio graph of packet structure&lt;br /&gt;
* &amp;lt;strike&amp;gt;Evaluate and compare UDP to a custom protocol&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Protocol Structure==&lt;br /&gt;
===What is a Protocol?===&lt;br /&gt;
A protocol is a set of rules to define how two or more entities comunicate. It contains 5 basic elements:&lt;br /&gt;
*A '''service''' definition - What information will the protocol provide the entities that utilize it?&lt;br /&gt;
*A set of '''assumptions''' - What is assumed to in the protocol? What isn't?&lt;br /&gt;
*A '''vocabulary''' - What will be the forms of data that I will use to communicate with this protocol&lt;br /&gt;
*A '''format/encoding''' - How will my vocabulary coherantly  fit together to form larger msgs, and cmds&lt;br /&gt;
*A set of '''procedural rules''' - How will I intiate communication? How are the entities using this protocol indentied? What are thier roles?&amp;lt;br&amp;gt;&lt;br /&gt;
Other considerations such as the medium are not specifically stated in the protocol but influence how the protocol is formed. Consider the difference between Wi-Fi where one router can talk to multiple devices versus communication between a wired video game controller and a console. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
As an example of a protocol consider the english language in its vocal form. The '''service''' it provides is a means of conveying thoughts thruogh the use of sound. It '''assumes''' that all the parties involved can speak and understand english, that the medium is such that the transmission of sound waves is possible, and that meaning of the '''vocabulary''' used is the same among all parties involved. Its '''vocabulary''' is made up of 26 letters that by themselves or in groups represent a set of vocal patterns generated and recieved by all the parties involved. In this abstract defintion of '''vocabulary''', it is not words but rather letters and the sounds they make that form the protocol. The basic '''format''' of the english language is such that the vocabulary of letters is formed into words, which each carry the meaning of the thought being conveyed. The procedural rules change based on the situation. Sometimes one person is communicating with a group of passive listeners, at other times several people are communicating with one person at once. There are even times (eavesdropping) where one or more parties are listening to a speaker not directly communicating to them.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===Our Protocol===&lt;br /&gt;
====Packet Structure====&lt;br /&gt;
Header Format:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{|  cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Start/Flag (1 byte)&lt;br /&gt;
! width=&amp;quot;240&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|RobotID (5 bits) / Type (3 bits)&lt;br /&gt;
! width=&amp;quot;280&amp;quot; bgcolor=&amp;quot;#d0d0d0&amp;quot;|Data (0 - 137 bits)&lt;br /&gt;
! width =&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Checksum/CRC (1 - 2 byte)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The header consists of a start or flag byte to indicate the start of a packet, 5 bits to identify the robot(s) being sent to (00000 for robot-&amp;gt;host communication), and 3 bits to indicate the type of message. The types of messages can be:&lt;br /&gt;
* Init Message&lt;br /&gt;
* Data Message&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
For Init messages, the robot sends the init message out to each robot (1-5) in turn and waits for an ACK message. For data messages, they can either be Control messages or Data/Movement messages as specified by the first bit of the data field. Init/Data Control messages are followed by a 8 or 16 bit CRC/Checksum while the Data Movement/Data messages are followed by a 16 or 32 bit CRC/Checksum.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Control Message:&lt;br /&gt;
{|  cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! bgcolor=&amp;quot;#909090&amp;quot;|Flag/0 (1 bit)&lt;br /&gt;
! width=&amp;quot;93&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Message Type (3 bits)&lt;br /&gt;
! width=&amp;quot;124&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Errors (4 bits)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Checksum/CRC (8 or 16 bits)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Data Message:&lt;br /&gt;
{|  cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! bgcolor=&amp;quot;#909090&amp;quot;|Flag/1 (1 bit)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 1 Data (3 bytes/24 bits)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 2 Data (3 bytes/24 bits)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 3 Data (3 bytes/24 bits)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 4 Data (3 bytes/24 bits)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 5 Data (3 bytes/24 bits)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Checksum/CRC (16 or 32 bits)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''OUTDATED'''&lt;br /&gt;
----&lt;br /&gt;
{| style=&amp;quot;text-align:left; width:100%; height:300px&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|+ '''Host to Robot Messages'''&lt;br /&gt;
|-style=&amp;quot;border:1px solid black; border-bottom:0px; background:#909090&amp;quot;&lt;br /&gt;
! style=&amp;quot;border:1px solid black;border-bottom:1px&amp;quot;|MsgID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ACK? !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|To &lt;br /&gt;
!! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|DLC !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Data Format !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Description&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090;&amp;quot; | Wakeup &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x01&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Byte 1 Robot ID&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Host polls for each robot individually. When this msg is recieved by a robot it responds with a status msg indicating that it is ready for action.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Go/Start  &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x02&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | None&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Intiates main process on robots.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Data&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x03&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | All robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 15&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | See below&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Streaming data sent to all robots in one msg.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Game Reset&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x04&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | All robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | None&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Ends the main process on all robots. Reverts them back to wakeup state.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Shoot Ball&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x05&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Robot ID (1 byte) Robot Angle (1 byte)&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Commands the robot with ID given to take the shot. &lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Robot Stop&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x06&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Robot ID&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Commands an indivdual robot to stop. May not be used.&lt;br /&gt;
|}&lt;br /&gt;
With the format for the Data messages being defined as:&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
{|  cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Byte 1||Byte 2||Byte 3&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Vx (1 byte)&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Vy (3 bits)&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Theta (5 bits)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{| style=&amp;quot;text-align:left; width:100%; height:100px&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|+ '''Robot to Host Messages'''&lt;br /&gt;
|-style=&amp;quot;border:1px solid black; border-bottom:0px; background:#909090&amp;quot;&lt;br /&gt;
! style=&amp;quot;border:1px solid black;border-bottom:1px&amp;quot;|MsgID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ACK? !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|To &lt;br /&gt;
!! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|DLC !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Data Format !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Description&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090;&amp;quot; | Status &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0xA&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Host&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | None&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Given in response to Wakeup message. Data section not fully specified, contains battery info serial number error state&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Protocol Procedural Rules====&lt;br /&gt;
When messages are being sent between the host and the team robots care must be taken to cause data collisions, message oscillations, and other errors. To prevent such events a set of procedural rules are implemented dictating when each msg is sent and what happens both before and after the messages transmission. Below is a detailed explanation of the procedural rules for each message and finally somMay be folded into msg 0x04e flow charts for events such as initial startup and stopping.&lt;br /&gt;
&lt;br /&gt;
=====Wakeup=====&lt;br /&gt;
As the title says this msg brings the robots out of a known &amp;quot;sleep&amp;quot; state and registers them the host controller. The motivaton for the message and the procedure it details is so that message transfer starts from a known safe state, this state being the &amp;quot;sleep&amp;quot; the state. The &amp;quot;sleep&amp;quot; state is entered once the robot is turned on and is written in firmware. In &amp;quot;sleep&amp;quot; state the robots will not talk to the host nor respond to any messages except wakeup. The procedure for waking up a team is as follows:&lt;br /&gt;
*First the human operator feeds in the unique ID of each robot on the field. These ID numbers range from 1-10 and in fact are the IDs included in each message. &lt;br /&gt;
*When the command is given the host sends out the wakeup msg to the robot whose ID is first in the list of IDs fed in the the operator.&lt;br /&gt;
*If the robot with that ID is on the field it will immediately respond back to the host with a status message giving information on its health, and its unique serial number.&lt;br /&gt;
*When the host recieved this status message it will move on the next ID in its list and transmit a wakeup message with that ID.&lt;br /&gt;
*If the host does not recieve a status message back or the health of the robot is such that its not ready it will alert the operator and will not continue the wakeup sequence.&lt;br /&gt;
*Once all the robots have been verified to be on the field and ready the wakeup sequence shall be considered complete and host is now ready to start a game. &amp;lt;br&amp;gt;&lt;br /&gt;
You may wonder why the wakeup msg is sent to each robot one at a time. Even though our protocol is full-duplex it doesn't define an arbitration scheme. As work-around messages from the robots to the host are only sent when asked for by the host. In such a manner we can ensure that only one robot can talk to the host at a time, avoiding data collisions. Future implementations we see the addition of arbitration.&lt;br /&gt;
=====GO/Start=====&lt;br /&gt;
Once the robots on the field are found and in good order we can start a game. The GO/Start message signals the robots to begin thier main process and prepare to recieve data. The robots do not acknowledge this message since it is a broadcast message. Broadcast messages are messages sent to all robots at once, and makeup the majority of msgs sent on the wirless channel. The motivation for these message types is simplicity. Instead of sending most messages to each robot individually and flooding the wireless channel thereby increasing chances for a dropped packets we package the information in one big message. As a consequence there can be no acknowledgments to these messages due to the lack of an arbitration scheme. &lt;br /&gt;
=====Data=====&lt;br /&gt;
This message will be the bulk of the messages sent from on the wireless channel. It is a broadcast message for the above reasons and hence no acknowledgment is required. Each robots data values are picked off from the data section. This message can only be recieved by a robot when it is out of sleep mode.&lt;br /&gt;
=====Game Stop=====&lt;br /&gt;
Another broadcast message. Singals the end or stoppage of game play. When the robots are stopped they are not in sleep mode and can still communicate with the host. But since they are stopped thier internal process is no longer active and they act as &amp;quot;dumb&amp;quot; terminals.&lt;br /&gt;
=====Shoot Ball=====&lt;br /&gt;
As the title says this messages signals the robot whose ID it is sent to to shoot the ball, once it has rotated a given number of degrees. Since this is an individual robot message an acknowledgment is allowed and is required.&lt;br /&gt;
=====Robot Stop=====&lt;br /&gt;
The same as Game Stop only sent to individual robots. Since this is an individual robot message an acknowledgment is allowed and is required.&lt;br /&gt;
=====Status=====&lt;br /&gt;
The only message sent from the robot to the host, the status message serves as both an actual status message and as an ACK. In any case status messages are only sent was ack to messages that allow acknowledgments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Articles==&lt;br /&gt;
*[http://www.linxtechnologies.com/documents/AN-00160.pdf Linx article on protocol design]&lt;br /&gt;
*[http://focus-webapps.ti.com/general/docs/sitesearch/searchsite.tsp?searchTerm=serial%20RS232%20drivers&amp;amp;selectedTopic=1077383935&amp;amp;numRecords=25 TI Example wireless system design protocol and all]&lt;br /&gt;
*[http://www.mathpages.com/home/kmath458.htm Paper on the Cylical Redundancy Check error checking algorithm (CRC)]&lt;br /&gt;
*[http://spinroot.com/spin/Doc/Book91.html Enitre book on protocol design, a bit dated though like 1990 dated]&lt;br /&gt;
*[http://bwrc.eecs.berkeley.edu/People/Faculty/jan/publications/p124.pdf Berkeley article on wireless protocol design. Gives a real world example of how to design a wireless protocol.]&lt;br /&gt;
*[http://www.ohiolink.edu/etd/send-pdf.cgi?ohiou1121356426 Ohio University article. Details an intresting communications method]&lt;br /&gt;
*[http://www.eetasia.com/ARTICLES/2005JUN/A/2005JUN06_RFD_AN01.PDF Paper from Maxim on Manchester Encoding]&lt;br /&gt;
*[http://webs.cs.berkeley.edu/retreat-6-03/slides/ChipconECC.ppt Berkeley PPT on errors and wireless]&lt;br /&gt;
*[http://bbs.circuitcellar.com/phpBB2/viewtopic.php?t=2233&amp;amp; Circuit Cellar discussion on Manchester Encoder/Decoder]&lt;br /&gt;
*[http://robocup.mae.cornell.edu/documentation/robocup/2002/2002EE.pdf Cornell electrical design document]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
[[RCcoms|Wireless Hompage]]&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=Talk:RCwiproc&amp;diff=3374</id>
		<title>Talk:RCwiproc</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=Talk:RCwiproc&amp;diff=3374"/>
		<updated>2006-10-02T21:05:40Z</updated>

		<summary type="html">&lt;p&gt;ScottT: Thoughts on wireless transmission schemes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* I've been looking into the issue of how/when the robots/host should be sending data over the wireless. I suggest that we go about it one of two ways... the first/easiest being keeping every transmitter/station in sync and devoting specific times during a cycle for each of the robots and the host to use the channel. Essentially, divide a ~14-20ms space of time between the 5 robots and the host depending how much they need to transmit (host packets may be larger than robot packets...). While this would work, it's inefficient in using the channel if not every robot needs to trasmit during a cycle. The second way would be something close to [[http://en.wikipedia.org/wiki/CSMA-CD CSMA/CD]] (Carrier Sense Multiple Access with Collision Detection). This works by checking the channel to see if it's free and also checking to see if, while transmitting, a collision occurs and to handle such an event accordingly. This would be a more efficient use of the available time on the channel however, it would be more complicated. We could work it to give the host precidence over the robots to transmit, possibly. There is, of course, the option of using two wireless modules on every station to allow different Tx/Rx channels. The host could be constantly transmitting over it's Tx channel while listening for any robots on the Rx channel. Meanwhile, the robots would be constantly listening on their Rx channels (same freq as host Tx) and transmit when necessary over their Tx channels (same freq as host Rx). I believe this would provide the most efficient use of the channels and would free us from worrying about the host transmissions getting in collisions with robot transmissions. We could also implement the CSMA/CD scheme on the robot Tx/host Rx channel so that the robots can make efficient use of their available bandwidth in communicating with the host. Any or all of these schemes should work and, time permitting, I think we should try and test them all to see which we like better. The scheme with a single-channel and time divided transmissions between host and robots would likely be the simplest to implement... the main problem there may be keeping the timing constant. What do you guys think? [[User:ScottT|ScottT]] 17:05, 2 October 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* I'll be at the meeting today until 7 at the latest. That said, I'll see if I can get this page a bit cleaner and divided better based on topics. Do we have the wireless modules/ARM dev kits so that we can start testing? It'd be great to have a testbed for the wireless itself so we can try out different protocol ideas. Here's a question I'll pose to you guys though: how reliable do we want the protocol to be? If it's very reliable, we'd have things like retransmission of packets and such that'd make sure each command got to the robots, but we might lose some of that &amp;quot;real-time&amp;quot; aspect in the process. If it's unreliable, we can be as real-time as we want but we'd have to make sure the robots could deal with some dropped/lost packets. [[User:ScottT|ScottT]] 16:22, 25 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* Man, we are filling this comments section up. Yeah, work first. Don't worry about showing up if you really want to we can just conference you on aim, but I don't want you to have to be worrying about 4 test and go to a meeting. As for the article it looks promising, we might slash certian parts in the packets since the size of our network is know. As for assembly programming, only if its punch-cards and bare teeth. Oh yeah some Grand Challenge guys were in the COC lab and were talkin mess about how they would rather have a Porsches than little robots.  --[[User:Marksp|Phillip]] 20:32, 24 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* I came across an interesting paper doing some work for my ECE4605 class; it details RTP which is a transport protocol for real-time applications. I haven't had a chance to read it, but we may be able to gleam some good information from it. [http://www.ietf.org/rfc/rfc3550.txt RTP - RFC3550] I'll also try and take a look at that book on protocols you mentioned. I should give you a heads up, however, that I'm not sure how much time I'll get to goto the meetings this week as I have 4 tests (one on 4 different days...) and a 30-minute presentation to give (on the day I don't have a test). I should be able to make it for maybe an hour on Monday and a little while on Thursday, but I probably wont be able to stay as long as I'd like. That said, if you could let me know of any pertanent information I miss from the meetings, I'll try and keep doing some research/work on the protocol and programming for the ARM. Which reminds me, we're just programming in C/C++ then compiling it for ARM, right? Or are we going to do really low-level assembly programming for the ARM? If we run out of topics to talk about sometime during the meetings, perhaps we can determine exactly what we want the robots to be able to do... then think about what programs/functions we'll have to program in. [[User:ScottT|ScottT]] 21:53, 23 September 2006 (EDT)&lt;br /&gt;
** We have GCC I'm gonna strongly reccomend we use it. --[[User:AndyB|Andy]] 01:32, 24 September 2006 (EDT)&lt;br /&gt;
*** I completely agree. Just making sure that I wasn't assuming we'd have higher-level languages when all we could actually use was assembly. :P [[User:ScottT|ScottT]] 16:22, 25 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* Also remember two other things. Our module is going to filter out all parts of the spectrun except for the area around the carrier frequency. Unless another team is being an ass we should be the only team on that frequency. Also monitoring the channel means that either our RX module and TX always be on the same frequency so that RX module can look for the channel to be clear or we have to switch frequencies on the RX module which takes a fair amount of time in fact more than we can handle and still be broadcasting at 55Hz. But we'll have to do some investigating at the meeting on Monday. In the mean time be sure to take a look at that book on protocol design thats at the bottom of this page, it actually has a caculation in chp7 I believe for determining the optimal configuration for a protocol based on reliability. [[User:MarksP|MarksP]] 19:16, 21 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* I think we should definatly go with monitoring the channel for when the channel is clear... or, perhaps, dividing the sending time between each of the systems... each block of time is divided between the host sending a message, then each robot in turn sending a message... I actually hadn't thought about that mostly because my classes haven't dealt with wireless protocols so much yet. ;) Something to consider when watching the channel, however, is whether or not interference from other teams will be picked up as activity on the channel. [[User:ScottT|ScottT]] 18:59, 20 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
*As far as ACKs are concerned remember that for wireless arbitration between msgs gets a bit hairy. Say two robots try to respond back to the host at the same time. The wireless signal that the host will recieve will be the analog sum the signals from those two robots. It is impossible for the host to tell which is which. Two ways around this: We could have each robot time out a set time t before it responds with an ACK. If we add a delay to t for each robot, then they will respond in an orderly fashion one after the other. Another solution is to have each robot look for traffic on the wireless channel and transmit only when the channel is clear. This is the best solution and is similar to the scheme used in CAN. Also remember this protocol needs to be as low level as possible. As for checking for wheel jams thats an issue for the motor controller. In the event of a jam its probably best to end gameplay for that robot since this isn't a safetly critical application. [[User:Marksp|Phillip]]&lt;br /&gt;
&lt;br /&gt;
* What about the rate of dropped packets... how many do we actually expect to have? Since the system will be as close to real-time as possible, we'll have to deal with these dropped packets as well as any out-of-order packets that may arise because of the drop. Unless there's a good reason not to, we might want to have ACKs for every packet sent... both to and from the robots. We obviously have a unique situation in that we have a designated server and clients all the time... in other words, we only have to imeplement a client and a server protocol that correctly interact rather than a universal protocol where you could be either client or server (TCP, etc.). I think one of the first things we should do is figure out how we want to handle errors (if at all). Also, should the server be constantly broadcasting to each robot? Maybe a constant packet size, always transmitting at set times with corresponding ACKs from each robot after every packet? Just shooting some ideas out there. I'll try and look into this more before Thursday so we can speak on it some. [[User:ScottT|ScottT]] 00:48, 20 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* Do the robots implement any kind of checking on whether or not their wheels are jammed? Or other mechanical/electrical errors? [[User:ScottT|ScottT]] 22:23, 19 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* Parts of this protocol seem like there's too much or too little emphasis on some areas. Also, we may be able to work on the size of each packet a bit by playing around with what information we put in the header. The checksum is definatly good, but we need to consider the impact this could have on the &amp;quot;real-time&amp;quot; nature of the protocol. We may not be using UDP, but perhaps we can draw some from it. This is a great start, and I'll put some more comments/thoughts later, but I managed to burn the fingertips of 3 of my fingers, so typing takes some time right now, heh. [[User:ScottT|ScottT]] 22:20, 19 September 2006 (EDT)&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=Talk:RCwiproc&amp;diff=3322</id>
		<title>Talk:RCwiproc</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=Talk:RCwiproc&amp;diff=3322"/>
		<updated>2006-09-25T20:22:23Z</updated>

		<summary type="html">&lt;p&gt;ScottT: Added some comments&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* I'll be at the meeting today until 7 at the latest. That said, I'll see if I can get this page a bit cleaner and divided better based on topics. Do we have the wireless modules/ARM dev kits so that we can start testing? It'd be great to have a testbed for the wireless itself so we can try out different protocol ideas. Here's a question I'll pose to you guys though: how reliable do we want the protocol to be? If it's very reliable, we'd have things like retransmission of packets and such that'd make sure each command got to the robots, but we might lose some of that &amp;quot;real-time&amp;quot; aspect in the process. If it's unreliable, we can be as real-time as we want but we'd have to make sure the robots could deal with some dropped/lost packets. [[User:ScottT|ScottT]] 16:22, 25 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* Man, we are filling this comments section up. Yeah, work first. Don't worry about showing up if you really want to we can just conference you on aim, but I don't want you to have to be worrying about 4 test and go to a meeting. As for the article it looks promising, we might slash certian parts in the packets since the size of our network is know. As for assembly programming, only if its punch-cards and bare teeth. Oh yeah some Grand Challenge guys were in the COC lab and were talkin mess about how they would rather have a Porsches than little robots.  --[[User:Marksp|Phillip]] 20:32, 24 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* I came across an interesting paper doing some work for my ECE4605 class; it details RTP which is a transport protocol for real-time applications. I haven't had a chance to read it, but we may be able to gleam some good information from it. [http://www.ietf.org/rfc/rfc3550.txt RTP - RFC3550] I'll also try and take a look at that book on protocols you mentioned. I should give you a heads up, however, that I'm not sure how much time I'll get to goto the meetings this week as I have 4 tests (one on 4 different days...) and a 30-minute presentation to give (on the day I don't have a test). I should be able to make it for maybe an hour on Monday and a little while on Thursday, but I probably wont be able to stay as long as I'd like. That said, if you could let me know of any pertanent information I miss from the meetings, I'll try and keep doing some research/work on the protocol and programming for the ARM. Which reminds me, we're just programming in C/C++ then compiling it for ARM, right? Or are we going to do really low-level assembly programming for the ARM? If we run out of topics to talk about sometime during the meetings, perhaps we can determine exactly what we want the robots to be able to do... then think about what programs/functions we'll have to program in. [[User:ScottT|ScottT]] 21:53, 23 September 2006 (EDT)&lt;br /&gt;
** We have GCC I'm gonna strongly reccomend we use it. --[[User:AndyB|Andy]] 01:32, 24 September 2006 (EDT)&lt;br /&gt;
*** I completely agree. Just making sure that I wasn't assuming we'd have higher-level languages when all we could actually use was assembly. :P [[User:ScottT|ScottT]] 16:22, 25 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* Also remember two other things. Our module is going to filter out all parts of the spectrun except for the area around the carrier frequency. Unless another team is being an ass we should be the only team on that frequency. Also monitoring the channel means that either our RX module and TX always be on the same frequency so that RX module can look for the channel to be clear or we have to switch frequencies on the RX module which takes a fair amount of time in fact more than we can handle and still be broadcasting at 55Hz. But we'll have to do some investigating at the meeting on Monday. In the mean time be sure to take a look at that book on protocol design thats at the bottom of this page, it actually has a caculation in chp7 I believe for determining the optimal configuration for a protocol based on reliability. [[User:MarksP|MarksP]] 19:16, 21 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* I think we should definatly go with monitoring the channel for when the channel is clear... or, perhaps, dividing the sending time between each of the systems... each block of time is divided between the host sending a message, then each robot in turn sending a message... I actually hadn't thought about that mostly because my classes haven't dealt with wireless protocols so much yet. ;) Something to consider when watching the channel, however, is whether or not interference from other teams will be picked up as activity on the channel. [[User:ScottT|ScottT]] 18:59, 20 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
*As far as ACKs are concerned remember that for wireless arbitration between msgs gets a bit hairy. Say two robots try to respond back to the host at the same time. The wireless signal that the host will recieve will be the analog sum the signals from those two robots. It is impossible for the host to tell which is which. Two ways around this: We could have each robot time out a set time t before it responds with an ACK. If we add a delay to t for each robot, then they will respond in an orderly fashion one after the other. Another solution is to have each robot look for traffic on the wireless channel and transmit only when the channel is clear. This is the best solution and is similar to the scheme used in CAN. Also remember this protocol needs to be as low level as possible. As for checking for wheel jams thats an issue for the motor controller. In the event of a jam its probably best to end gameplay for that robot since this isn't a safetly critical application. [[User:Marksp|Phillip]]&lt;br /&gt;
&lt;br /&gt;
* What about the rate of dropped packets... how many do we actually expect to have? Since the system will be as close to real-time as possible, we'll have to deal with these dropped packets as well as any out-of-order packets that may arise because of the drop. Unless there's a good reason not to, we might want to have ACKs for every packet sent... both to and from the robots. We obviously have a unique situation in that we have a designated server and clients all the time... in other words, we only have to imeplement a client and a server protocol that correctly interact rather than a universal protocol where you could be either client or server (TCP, etc.). I think one of the first things we should do is figure out how we want to handle errors (if at all). Also, should the server be constantly broadcasting to each robot? Maybe a constant packet size, always transmitting at set times with corresponding ACKs from each robot after every packet? Just shooting some ideas out there. I'll try and look into this more before Thursday so we can speak on it some. [[User:ScottT|ScottT]] 00:48, 20 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* Do the robots implement any kind of checking on whether or not their wheels are jammed? Or other mechanical/electrical errors? [[User:ScottT|ScottT]] 22:23, 19 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* Parts of this protocol seem like there's too much or too little emphasis on some areas. Also, we may be able to work on the size of each packet a bit by playing around with what information we put in the header. The checksum is definatly good, but we need to consider the impact this could have on the &amp;quot;real-time&amp;quot; nature of the protocol. We may not be using UDP, but perhaps we can draw some from it. This is a great start, and I'll put some more comments/thoughts later, but I managed to burn the fingertips of 3 of my fingers, so typing takes some time right now, heh. [[User:ScottT|ScottT]] 22:20, 19 September 2006 (EDT)&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=RCwiproc&amp;diff=3321</id>
		<title>RCwiproc</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=RCwiproc&amp;diff=3321"/>
		<updated>2006-09-25T20:13:07Z</updated>

		<summary type="html">&lt;p&gt;ScottT: /* Comments */  -Moved the comments to the discussion page!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Wireless Protocol==&lt;br /&gt;
&lt;br /&gt;
The host will send each robot velocity, direction, and shoot directives, at a rate of about 40-50 Hz. '''(This data rate still needs to be confirmed with testing)''' In such a way the enitre system (host, camera, and robot) will behave as a real-time system. The robot will send its current error status, battery voltage, wheel velocity, unique ID, and whether or not it has the ball to the host but at the much slower rate of 10Hz.&lt;br /&gt;
&lt;br /&gt;
==Comments==&lt;br /&gt;
'''MOVED TO [[Talk:RCwiproc|DISCUSSION PAGE]] (discussion tab up top, or just click that link)''' [[User:ScottT|ScottT]]&lt;br /&gt;
&lt;br /&gt;
==To Do==&lt;br /&gt;
* Research protocols &lt;br /&gt;
** &amp;lt;strike&amp;gt;UDP (User Datagram Protocol)&amp;lt;/strike&amp;gt; - Dropping UDP as a choice in protocol. Would need a module that implements it already&lt;br /&gt;
** &amp;lt;strike&amp;gt;Protocol Book&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Determine the rate at which to update robots - Will need to find theoretical base for this and confirm with test.&lt;br /&gt;
* &amp;lt;strike&amp;gt;Specify a custom protocol&amp;lt;/strike&amp;gt; - Remeber to do Visio graph of packet structure&lt;br /&gt;
* &amp;lt;strike&amp;gt;Evaluate and compare UDP to a custom protocol&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Protocol Structure==&lt;br /&gt;
===What is a Protocol?===&lt;br /&gt;
A protocol is a set of rules to define how two or more entities comunicate. It contains 5 basic elements:&lt;br /&gt;
*A '''service''' definition - What information will the protocol provide the entities that utilize it?&lt;br /&gt;
*A set of '''assumptions''' - What is assumed to in the protocol? What isn't?&lt;br /&gt;
*A '''vocabulary''' - What will be the forms of data that I will use to communicate with this protocol&lt;br /&gt;
*A '''format/encoding''' - How will my vocabulary coherantly  fit together to form larger msgs, and cmds&lt;br /&gt;
*A set of '''procedural rules''' - How will I intiate communication? How are the entities using this protocol indentied? What are thier roles?&amp;lt;br&amp;gt;&lt;br /&gt;
Other considerations such as the medium are not specifically stated in the protocol but influence how the protocol is formed. Consider the difference between Wi-Fi where one router can talk to multiple devices versus communication between a wired video game controller and a console. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
As an example of a protocol consider the english language in its vocal form. The '''service''' it provides is a means of conveying thoughts thruogh the use of sound. It '''assumes''' that all the parties involved can speak and understand english, that the medium is such that the transmission of sound waves is possible, and that meaning of the '''vocabulary''' used is the same among all parties involved. Its '''vocabulary''' is made up of 26 letters that by themselves or in groups represent a set of vocal patterns generated and recieved by all the parties involved. In this abstract defintion of '''vocabulary''', it is not words but rather letters and the sounds they make that form the protocol. The basic '''format''' of the english language is such that the vocabulary of letters is formed into words, which each carry the meaning of the thought being conveyed. The procedural rules change based on the situation. Sometimes one person is communicating with a group of passive listeners, at other times several people are communicating with one person at once. There are even times (eavesdropping) where one or more parties are listening to a speaker not directly communicating to them.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===Our Protocol===&lt;br /&gt;
====Packet Structure====&lt;br /&gt;
A vital part of our robocup team is its communication system. Therefore an effective means of sending information across this system will need to be realized with a protocol of some sort. In general our protocol needs to allow the host to command movements and actions to the robots, while allowing the robots to provide status information back to the host. The medium will be RF signals in the 900mHz range. This means that we can assume an appreciable dropped packet rate, and interfereance from other teams, and devices. Binary data clocked at 57Kbps will be our vocabulary, and the msg format will be in packets of varying length. Specifically each packet will be divided in bytes, with the first byte consisting of a know header, followed by bytes containg the msg ID, its length, who its intended for, the data being sent, and a checksum.  Below in the figure is a a detail of what each packet will look like.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{|  cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Byte 1|| Byte 2||Bytes 3 up to 17||Last Byte&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Header (1 byte)&lt;br /&gt;
! width=&amp;quot;240&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|ID (3 bits) Length (5 bits)&lt;br /&gt;
! width=&amp;quot;280&amp;quot; bgcolor=&amp;quot;#d0d0d0&amp;quot;|Data (0 - 15 bytes)&lt;br /&gt;
! width =&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Checksum (1 byte)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The header consists of two transitions 0 to 1 and 1 to 0 spread over the time of one byte. The ID of the msg is a unique 3-bit value the identifies the type of msg being sent. In the table below is a listing of the different msgs and thier ID's. Each msg's length is described by a 5-bit value called the DLC or data length code. Who the msg is intended for is determined by which bit is set in the Recipient ID. Bits 1-5 correspond to robots 1-5, 6 corresponds to the host and 7 means the msg is meant for all robots. The format of the data section of the packet is based on the msg being sent. In most cases it is blank but for data msgs it has the following format:&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
{|  cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 1 Data (3 bytes)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 2 Data (3 bytes)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 3 Data (3 bytes)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 4 Data (3 bytes)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 5 Data (3 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align:left; width:100%; height:300px&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|+ '''Host to Robot Messages'''&lt;br /&gt;
|-style=&amp;quot;border:1px solid black; border-bottom:0px; background:#909090&amp;quot;&lt;br /&gt;
! style=&amp;quot;border:1px solid black;border-bottom:1px&amp;quot;|MsgID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ACK? !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|To &lt;br /&gt;
!! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|DLC !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Data Format !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Description&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090;&amp;quot; | Wakeup &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x01&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Byte 1 Robot ID&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Host polls for each robot individually. When this msg is recieved by a robot it responds with a status msg indicating that it is ready for action.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Go/Start  &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x02&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | None&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Intiates main process on robots.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Data&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x03&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | All robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 15&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | See below&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Streaming data sent to all robots in one msg.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Game Reset&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x04&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | All robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | None&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Ends the main process on all robots. Reverts them back to wakeup state.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Shoot Ball&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x05&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Robot ID (1 byte) Robot Angle (1 byte)&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Commands the robot with ID given to take the shot. &lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Robot Stop&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x06&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Robot ID&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Commands an indivdual robot to stop. May not be used.&lt;br /&gt;
|}&lt;br /&gt;
With the format for the Data messages being defined as:&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
{|  cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Byte 1||Byte 2||Byte 3&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Vx (1 byte)&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Vy (3 bits)&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Theta (5 bits)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{| style=&amp;quot;text-align:left; width:100%; height:100px&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|+ '''Robot to Host Messages'''&lt;br /&gt;
|-style=&amp;quot;border:1px solid black; border-bottom:0px; background:#909090&amp;quot;&lt;br /&gt;
! style=&amp;quot;border:1px solid black;border-bottom:1px&amp;quot;|MsgID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ACK? !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|To &lt;br /&gt;
!! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|DLC !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Data Format !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Description&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090;&amp;quot; | Status &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0xA&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Host&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | None&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Given in response to Wakeup message. Data section not fully specified, contains battery info serial number error state&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Protocol Procedural Rules====&lt;br /&gt;
When messages are being sent between the host and the team robots care must be taken to cause data collisions, message oscillations, and other errors. To prevent such events a set of procedural rules are implemented dictating when each msg is sent and what happens both before and after the messages transmission. Below is a detailed explanation of the procedural rules for each message and finally somMay be folded into msg 0x04e flow charts for events such as initial startup and stopping.&lt;br /&gt;
&lt;br /&gt;
=====Wakeup=====&lt;br /&gt;
As the title says this msg brings the robots out of a known &amp;quot;sleep&amp;quot; state and registers them the host controller. The motivaton for the message and the procedure it details is so that message transfer starts from a known safe state, this state being the &amp;quot;sleep&amp;quot; the state. The &amp;quot;sleep&amp;quot; state is entered once the robot is turned on and is written in firmware. In &amp;quot;sleep&amp;quot; state the robots will not talk to the host nor respond to any messages except wakeup. The procedure for waking up a team is as follows:&lt;br /&gt;
*First the human operator feeds in the unique ID of each robot on the field. These ID numbers range from 1-10 and in fact are the IDs included in each message. &lt;br /&gt;
*When the command is given the host sends out the wakeup msg to the robot whose ID is first in the list of IDs fed in the the operator.&lt;br /&gt;
*If the robot with that ID is on the field it will immediately respond back to the host with a status message giving information on its health, and its unique serial number.&lt;br /&gt;
*When the host recieved this status message it will move on the next ID in its list and transmit a wakeup message with that ID.&lt;br /&gt;
*If the host does not recieve a status message back or the health of the robot is such that its not ready it will alert the operator and will not continue the wakeup sequence.&lt;br /&gt;
*Once all the robots have been verified to be on the field and ready the wakeup sequence shall be considered complete and host is now ready to start a game. &amp;lt;br&amp;gt;&lt;br /&gt;
You may wonder why the wakeup msg is sent to each robot one at a time. Even though our protocol is full-duplex it doesn't define an arbitration scheme. As work-around messages from the robots to the host are only sent when asked for by the host. In such a manner we can ensure that only one robot can talk to the host at a time, avoiding data collisions. Future implementations we see the addition of arbitration.&lt;br /&gt;
=====GO/Start=====&lt;br /&gt;
Once the robots on the field are found and in good order we can start a game. The GO/Start message signals the robots to begin thier main process and prepare to recieve data. The robots do not acknowledge this message since it is a broadcast message. Broadcast messages are messages sent to all robots at once, and makeup the majority of msgs sent on the wirless channel. The motivation for these message types is simplicity. Instead of sending most messages to each robot individually and flooding the wireless channel thereby increasing chances for a dropped packets we package the information in one big message. As a consequence there can be no acknowledgments to these messages due to the lack of an arbitration scheme. &lt;br /&gt;
=====Data=====&lt;br /&gt;
This message will be the bulk of the messages sent from on the wireless channel. It is a broadcast message for the above reasons and hence no acknowledgment is required. Each robots data values are picked off from the data section. This message can only be recieved by a robot when it is out of sleep mode.&lt;br /&gt;
=====Game Stop=====&lt;br /&gt;
Another broadcast message. Singals the end or stoppage of game play. When the robots are stopped they are not in sleep mode and can still communicate with the host. But since they are stopped thier internal process is no longer active and they act as &amp;quot;dumb&amp;quot; terminals.&lt;br /&gt;
=====Shoot Ball=====&lt;br /&gt;
As the title says this messages signals the robot whose ID it is sent to to shoot the ball, once it has rotated a given number of degrees. Since this is an individual robot message an acknowledgment is allowed and is required.&lt;br /&gt;
=====Robot Stop=====&lt;br /&gt;
The same as Game Stop only sent to individual robots. Since this is an individual robot message an acknowledgment is allowed and is required.&lt;br /&gt;
=====Status=====&lt;br /&gt;
The only message sent from the robot to the host, the status message serves as both an actual status message and as an ACK. In any case status messages are only sent was ack to messages that allow acknowledgments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Articles==&lt;br /&gt;
*[http://www.linxtechnologies.com/documents/AN-00160.pdf Linx article on protocol design]&lt;br /&gt;
*[http://focus-webapps.ti.com/general/docs/sitesearch/searchsite.tsp?searchTerm=serial%20RS232%20drivers&amp;amp;selectedTopic=1077383935&amp;amp;numRecords=25 TI Example wireless system design protocol and all]&lt;br /&gt;
*[http://www.mathpages.com/home/kmath458.htm Paper on the Cylical Redundancy Check error checking algorithm (CRC)]&lt;br /&gt;
*[http://spinroot.com/spin/Doc/Book91.html Enitre book on protocol design, a bit dated though like 1990 dated]&lt;br /&gt;
*[http://bwrc.eecs.berkeley.edu/People/Faculty/jan/publications/p124.pdf Berkeley article on wireless protocol design. Gives a real world example of how to design a wireless protocol.]&lt;br /&gt;
*[http://www.ohiolink.edu/etd/send-pdf.cgi?ohiou1121356426 Ohio University article. Details an intresting communications method]&lt;br /&gt;
*[http://www.eetasia.com/ARTICLES/2005JUN/A/2005JUN06_RFD_AN01.PDF Paper from Maxim on Manchester Encoding]&lt;br /&gt;
*[http://webs.cs.berkeley.edu/retreat-6-03/slides/ChipconECC.ppt Berkeley PPT on errors and wireless]&lt;br /&gt;
*[http://bbs.circuitcellar.com/phpBB2/viewtopic.php?t=2233&amp;amp; Circuit Cellar discussion on Manchester Encoder/Decoder]&lt;br /&gt;
*[http://robocup.mae.cornell.edu/documentation/robocup/2002/2002EE.pdf Cornell electrical design document]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
[[RCcoms|Wireless Hompage]]&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=Talk:RCwiproc&amp;diff=3320</id>
		<title>Talk:RCwiproc</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=Talk:RCwiproc&amp;diff=3320"/>
		<updated>2006-09-25T20:12:09Z</updated>

		<summary type="html">&lt;p&gt;ScottT: Page created, moved over everything from the comments section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Man, we are filling this comments section up. Yeah, work first. Don't worry about showing up if you really want to we can just conference you on aim, but I don't want you to have to be worrying about 4 test and go to a meeting. As for the article it looks promising, we might slash certian parts in the packets since the size of our network is know. As for assembly programming, only if its punch-cards and bare teeth. Oh yeah some Grand Challenge guys were in the COC lab and were talkin mess about how they would rather have a Porsches than little robots.  --[[User:Marksp|Phillip]] 20:32, 24 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* I came across an interesting paper doing some work for my ECE4605 class; it details RTP which is a transport protocol for real-time applications. I haven't had a chance to read it, but we may be able to gleam some good information from it. [http://www.ietf.org/rfc/rfc3550.txt RTP - RFC3550] I'll also try and take a look at that book on protocols you mentioned. I should give you a heads up, however, that I'm not sure how much time I'll get to goto the meetings this week as I have 4 tests (one on 4 different days...) and a 30-minute presentation to give (on the day I don't have a test). I should be able to make it for maybe an hour on Monday and a little while on Thursday, but I probably wont be able to stay as long as I'd like. That said, if you could let me know of any pertanent information I miss from the meetings, I'll try and keep doing some research/work on the protocol and programming for the ARM. Which reminds me, we're just programming in C/C++ then compiling it for ARM, right? Or are we going to do really low-level assembly programming for the ARM? If we run out of topics to talk about sometime during the meetings, perhaps we can determine exactly what we want the robots to be able to do... then think about what programs/functions we'll have to program in. [[User:ScottT|ScottT]] 21:53, 23 September 2006 (EDT)&lt;br /&gt;
** We have GCC I'm gonna strongly reccomend we use it. --[[User:AndyB|Andy]] 01:32, 24 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* Also remember two other things. Our module is going to filter out all parts of the spectrun except for the area around the carrier frequency. Unless another team is being an ass we should be the only team on that frequency. Also monitoring the channel means that either our RX module and TX always be on the same frequency so that RX module can look for the channel to be clear or we have to switch frequencies on the RX module which takes a fair amount of time in fact more than we can handle and still be broadcasting at 55Hz. But we'll have to do some investigating at the meeting on Monday. In the mean time be sure to take a look at that book on protocol design thats at the bottom of this page, it actually has a caculation in chp7 I believe for determining the optimal configuration for a protocol based on reliability. [[User:MarksP|MarksP]] 19:16, 21 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* I think we should definatly go with monitoring the channel for when the channel is clear... or, perhaps, dividing the sending time between each of the systems... each block of time is divided between the host sending a message, then each robot in turn sending a message... I actually hadn't thought about that mostly because my classes haven't dealt with wireless protocols so much yet. ;) Something to consider when watching the channel, however, is whether or not interference from other teams will be picked up as activity on the channel. [[User:ScottT|ScottT]] 18:59, 20 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
*As far as ACKs are concerned remember that for wireless arbitration between msgs gets a bit hairy. Say two robots try to respond back to the host at the same time. The wireless signal that the host will recieve will be the analog sum the signals from those two robots. It is impossible for the host to tell which is which. Two ways around this: We could have each robot time out a set time t before it responds with an ACK. If we add a delay to t for each robot, then they will respond in an orderly fashion one after the other. Another solution is to have each robot look for traffic on the wireless channel and transmit only when the channel is clear. This is the best solution and is similar to the scheme used in CAN. Also remember this protocol needs to be as low level as possible. As for checking for wheel jams thats an issue for the motor controller. In the event of a jam its probably best to end gameplay for that robot since this isn't a safetly critical application. [[User:Marksp|Phillip]]&lt;br /&gt;
&lt;br /&gt;
* What about the rate of dropped packets... how many do we actually expect to have? Since the system will be as close to real-time as possible, we'll have to deal with these dropped packets as well as any out-of-order packets that may arise because of the drop. Unless there's a good reason not to, we might want to have ACKs for every packet sent... both to and from the robots. We obviously have a unique situation in that we have a designated server and clients all the time... in other words, we only have to imeplement a client and a server protocol that correctly interact rather than a universal protocol where you could be either client or server (TCP, etc.). I think one of the first things we should do is figure out how we want to handle errors (if at all). Also, should the server be constantly broadcasting to each robot? Maybe a constant packet size, always transmitting at set times with corresponding ACKs from each robot after every packet? Just shooting some ideas out there. I'll try and look into this more before Thursday so we can speak on it some. [[User:ScottT|ScottT]] 00:48, 20 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* Do the robots implement any kind of checking on whether or not their wheels are jammed? Or other mechanical/electrical errors? [[User:ScottT|ScottT]] 22:23, 19 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* Parts of this protocol seem like there's too much or too little emphasis on some areas. Also, we may be able to work on the size of each packet a bit by playing around with what information we put in the header. The checksum is definatly good, but we need to consider the impact this could have on the &amp;quot;real-time&amp;quot; nature of the protocol. We may not be using UDP, but perhaps we can draw some from it. This is a great start, and I'll put some more comments/thoughts later, but I managed to burn the fingertips of 3 of my fingers, so typing takes some time right now, heh. [[User:ScottT|ScottT]] 22:20, 19 September 2006 (EDT)&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=RCwiproc&amp;diff=3301</id>
		<title>RCwiproc</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=RCwiproc&amp;diff=3301"/>
		<updated>2006-09-24T01:53:42Z</updated>

		<summary type="html">&lt;p&gt;ScottT: /* Comments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Wireless Protocol==&lt;br /&gt;
&lt;br /&gt;
The host will send each robot velocity, direction, and shoot directives, at a rate of about 40-50 Hz. '''(This data rate still needs to be confirmed with testing)''' In such a way the enitre system (host, camera, and robot) will behave as a real-time system. The robot will send its current error status, battery voltage, wheel velocity, unique ID, and whether or not it has the ball to the host but at the much slower rate of 10Hz.&lt;br /&gt;
&lt;br /&gt;
==Comments==&lt;br /&gt;
* I came across an interesting paper doing some work for my ECE4605 class; it details RTP which is a transport protocol for real-time applications. I haven't had a chance to read it, but we may be able to gleam some good information from it. [http://www.ietf.org/rfc/rfc3550.txt RTP - RFC3550] I'll also try and take a look at that book on protocols you mentioned. I should give you a heads up, however, that I'm not sure how much time I'll get to goto the meetings this week as I have 4 tests (one on 4 different days...) and a 30-minute presentation to give (on the day I don't have a test). I should be able to make it for maybe an hour on Monday and a little while on Thursday, but I probably wont be able to stay as long as I'd like. That said, if you could let me know of any pertanent information I miss from the meetings, I'll try and keep doing some research/work on the protocol and programming for the ARM. Which reminds me, we're just programming in C/C++ then compiling it for ARM, right? Or are we going to do really low-level assembly programming for the ARM? If we run out of topics to talk about sometime during the meetings, perhaps we can determine exactly what we want the robots to be able to do... then think about what programs/functions we'll have to program in. [[User:ScottT|ScottT]] 21:53, 23 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* Also remember two other things. Our module is going to filter out all parts of the spectrun except for the area around the carrier frequency. Unless another team is being an ass we should be the only team on that frequency. Also monitoring the channel means that either our RX module and TX always be on the same frequency so that RX module can look for the channel to be clear or we have to switch frequencies on the RX module which takes a fair amount of time in fact more than we can handle and still be broadcasting at 55Hz. But we'll have to do some investigating at the meeting on Monday. In the mean time be sure to take a look at that book on protocol design thats at the bottom of this page, it actually has a caculation in chp7 I believe for determining the optimal configuration for a protocol based on reliability. [[User:MarksP|MarksP]] 19:16, 21 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* I think we should definatly go with monitoring the channel for when the channel is clear... or, perhaps, dividing the sending time between each of the systems... each block of time is divided between the host sending a message, then each robot in turn sending a message... I actually hadn't thought about that mostly because my classes haven't dealt with wireless protocols so much yet. ;) Something to consider when watching the channel, however, is whether or not interference from other teams will be picked up as activity on the channel. [[User:ScottT|ScottT]] 18:59, 20 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
*As far as ACKs are concerned remember that for wireless arbitration between msgs gets a bit hairy. Say two robots try to respond back to the host at the same time. The wireless signal that the host will recieve will be the analog sum the signals from those two robots. It is impossible for the host to tell which is which. Two ways around this: We could have each robot time out a set time t before it responds with an ACK. If we add a delay to t for each robot, then they will respond in an orderly fashion one after the other. Another solution is to have each robot look for traffic on the wireless channel and transmit only when the channel is clear. This is the best solution and is similar to the scheme used in CAN. Also remember this protocol needs to be as low level as possible. As for checking for wheel jams thats an issue for the motor controller. In the event of a jam its probably best to end gameplay for that robot since this isn't a safetly critical application. [[User:Marksp|Phillip]]&lt;br /&gt;
&lt;br /&gt;
* What about the rate of dropped packets... how many do we actually expect to have? Since the system will be as close to real-time as possible, we'll have to deal with these dropped packets as well as any out-of-order packets that may arise because of the drop. Unless there's a good reason not to, we might want to have ACKs for every packet sent... both to and from the robots. We obviously have a unique situation in that we have a designated server and clients all the time... in other words, we only have to imeplement a client and a server protocol that correctly interact rather than a universal protocol where you could be either client or server (TCP, etc.). I think one of the first things we should do is figure out how we want to handle errors (if at all). Also, should the server be constantly broadcasting to each robot? Maybe a constant packet size, always transmitting at set times with corresponding ACKs from each robot after every packet? Just shooting some ideas out there. I'll try and look into this more before Thursday so we can speak on it some. [[User:ScottT|ScottT]] 00:48, 20 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* Do the robots implement any kind of checking on whether or not their wheels are jammed? Or other mechanical/electrical errors? [[User:ScottT|ScottT]] 22:23, 19 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* Parts of this protocol seem like there's too much or too little emphasis on some areas. Also, we may be able to work on the size of each packet a bit by playing around with what information we put in the header. The checksum is definatly good, but we need to consider the impact this could have on the &amp;quot;real-time&amp;quot; nature of the protocol. We may not be using UDP, but perhaps we can draw some from it. This is a great start, and I'll put some more comments/thoughts later, but I managed to burn the fingertips of 3 of my fingers, so typing takes some time right now, heh. [[User:ScottT|ScottT]] 22:20, 19 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
==To Do==&lt;br /&gt;
* Research protocols &lt;br /&gt;
** &amp;lt;strike&amp;gt;UDP (User Datagram Protocol)&amp;lt;/strike&amp;gt; - Dropping UDP as a choice in protocol. Would need a module that implements it already&lt;br /&gt;
** &amp;lt;strike&amp;gt;Protocol Book&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Determine the rate at which to update robots - Will need to find theoretical base for this and confirm with test.&lt;br /&gt;
* &amp;lt;strike&amp;gt;Specify a custom protocol&amp;lt;/strike&amp;gt; - Remeber to do Visio graph of packet structure&lt;br /&gt;
* &amp;lt;strike&amp;gt;Evaluate and compare UDP to a custom protocol&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Protocol Structure==&lt;br /&gt;
===What is a Protocol?===&lt;br /&gt;
A protocol is a set of rules to define how two or more entities comunicate. It contains 5 basic elements:&lt;br /&gt;
*A '''service''' definition - What information will the protocol provide the entities that utilize it?&lt;br /&gt;
*A set of '''assumptions''' - What is assumed to in the protocol? What isn't?&lt;br /&gt;
*A '''vocabulary''' - What will be the forms of data that I will use to communicate with this protocol&lt;br /&gt;
*A '''format/encoding''' - How will my vocabulary coherantly  fit together to form larger msgs, and cmds&lt;br /&gt;
*A set of '''procedural rules''' - How will I intiate communication? How are the entities using this protocol indentied? What are thier roles?&amp;lt;br&amp;gt;&lt;br /&gt;
Other considerations such as the medium are not specifically stated in the protocol but influence how the protocol is formed. Consider the difference between Wi-Fi where one router can talk to multiple devices versus communication between a wired video game controller and a console. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
As an example of a protocol consider the english language in its vocal form. The '''service''' it provides is a means of conveying thoughts thruogh the use of sound. It '''assumes''' that all the parties involved can speak and understand english, that the medium is such that the transmission of sound waves is possible, and that meaning of the '''vocabulary''' used is the same among all parties involved. Its '''vocabulary''' is made up of 26 letters that by themselves or in groups represent a set of vocal patterns generated and recieved by all the parties involved. In this abstract defintion of '''vocabulary''', it is not words but rather letters and the sounds they make that form the protocol. The basic '''format''' of the english language is such that the vocabulary of letters is formed into words, which each carry the meaning of the thought being conveyed. The procedural rules change based on the situation. Sometimes one person is communicating with a group of passive listeners, at other times several people are communicating with one person at once. There are even times (eavesdropping) where one or more parties are listening to a speaker not directly communicating to them.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===Our Protocol===&lt;br /&gt;
====Packet Structure====&lt;br /&gt;
A vital part of our robocup team is its communication system. Therefore an effective means of sending information across this system will need to be realized with a protocol of some sort. In general our protocol needs to allow the host to command movements and actions to the robots, while allowing the robots to provide status information back to the host. The medium will be RF signals in the 900mHz range. This means that we can assume an appreciable dropped packet rate, and interfereance from other teams, and devices. Binary data clocked at 57Kbps will be our vocabulary, and the msg format will be in packets of varying length. Specifically each packet will be divided in bytes, with the first byte consisting of a know header, followed by bytes containg the msg ID, its length, who its intended for, the data being sent, and a checksum.  Below in the figure is a a detail of what each packet will look like.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{|  cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Byte 1|| Byte 2||Bytes 3 up to 17||Last Byte&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Header (1 byte)&lt;br /&gt;
! width=&amp;quot;240&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|ID (3 bits) Length (5 bits)&lt;br /&gt;
! width=&amp;quot;280&amp;quot; bgcolor=&amp;quot;#d0d0d0&amp;quot;|Data (0 - 15 bytes)&lt;br /&gt;
! width =&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Checksum (1 byte)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The header consists of two transitions 0 to 1 and 1 to 0 spread over the time of one byte. The ID of the msg is a unique 3-bit value the identifies the type of msg being sent. In the table below is a listing of the different msgs and thier ID's. Each msg's length is described by a 5-bit value called the DLC or data length code. Who the msg is intended for is determined by which bit is set in the Recipient ID. Bits 1-5 correspond to robots 1-5, 6 corresponds to the host and 7 means the msg is meant for all robots. The format of the data section of the packet is based on the msg being sent. In most cases it is blank but for data msgs it has the following format:&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
{|  cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 1 Data (3 bytes)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 2 Data (3 bytes)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 3 Data (3 bytes)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 4 Data (3 bytes)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 5 Data (3 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align:left; width:100%; height:300px&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|+ '''Host to Robot Messages'''&lt;br /&gt;
|-style=&amp;quot;border:1px solid black; border-bottom:0px; background:#909090&amp;quot;&lt;br /&gt;
! style=&amp;quot;border:1px solid black;border-bottom:1px&amp;quot;|MsgID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ACK? !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|To &lt;br /&gt;
!! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|DLC !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Data Format !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Description&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090;&amp;quot; | Wakeup &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x01&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Byte 1 Robot ID&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Host polls for each robot individually. When this msg is recieved by a robot it responds with a status msg indicating that it is ready for action.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Go/Start  &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x02&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | None&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Intiates main process on robots.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Data&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x03&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | All robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 15&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | See below&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Streaming data sent to all robots in one msg.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Game Reset&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x04&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | All robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | None&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Ends the main process on all robots. Reverts them back to wakeup state.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Shoot Ball&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x05&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Robot ID (1 byte) Robot Angle (1 byte)&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Commands the robot with ID given to take the shot. &lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Robot Stop&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x06&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Robot ID&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Commands an indivdual robot to stop. May not be used.&lt;br /&gt;
|}&lt;br /&gt;
With the format for the Data messages being defined as:&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
{|  cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Byte 1||Byte 2||Byte 3&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Vx (1 byte)&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Vy (3 bits)&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Theta (5 bits)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{| style=&amp;quot;text-align:left; width:100%; height:100px&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|+ '''Robot to Host Messages'''&lt;br /&gt;
|-style=&amp;quot;border:1px solid black; border-bottom:0px; background:#909090&amp;quot;&lt;br /&gt;
! style=&amp;quot;border:1px solid black;border-bottom:1px&amp;quot;|MsgID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ACK? !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|To &lt;br /&gt;
!! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|DLC !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Data Format !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Description&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090;&amp;quot; | Status &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0xA&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Host&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | None&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Given in response to Wakeup message. Data section not fully specified, contains battery info serial number error state&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Protocol Procedural Rules====&lt;br /&gt;
When messages are being sent between the host and the team robots care must be taken to cause data collisions, message oscillations, and other errors. To prevent such events a set of procedural rules are implemented dictating when each msg is sent and what happens both before and after the messages transmission. Below is a detailed explanation of the procedural rules for each message and finally somMay be folded into msg 0x04e flow charts for events such as initial startup and stopping.&lt;br /&gt;
&lt;br /&gt;
=====Wakeup=====&lt;br /&gt;
As the title says this msg brings the robots out of a known &amp;quot;sleep&amp;quot; state and registers them the host controller. The motivaton for the message and the procedure it details is so that message transfer starts from a known safe state, this state being the &amp;quot;sleep&amp;quot; the state. The &amp;quot;sleep&amp;quot; state is entered once the robot is turned on and is written in firmware. In &amp;quot;sleep&amp;quot; state the robots will not talk to the host nor respond to any messages except wakeup. The procedure for waking up a team is as follows:&lt;br /&gt;
*First the human operator feeds in the unique ID of each robot on the field. These ID numbers range from 1-10 and in fact are the IDs included in each message. &lt;br /&gt;
*When the command is given the host sends out the wakeup msg to the robot whose ID is first in the list of IDs fed in the the operator.&lt;br /&gt;
*If the robot with that ID is on the field it will immediately respond back to the host with a status message giving information on its health, and its unique serial number.&lt;br /&gt;
*When the host recieved this status message it will move on the next ID in its list and transmit a wakeup message with that ID.&lt;br /&gt;
*If the host does not recieve a status message back or the health of the robot is such that its not ready it will alert the operator and will not continue the wakeup sequence.&lt;br /&gt;
*Once all the robots have been verified to be on the field and ready the wakeup sequence shall be considered complete and host is now ready to start a game. &amp;lt;br&amp;gt;&lt;br /&gt;
You may wonder why the wakeup msg is sent to each robot one at a time. Even though our protocol is full-duplex it doesn't define an arbitration scheme. As work-around messages from the robots to the host are only sent when asked for by the host. In such a manner we can ensure that only one robot can talk to the host at a time, avoiding data collisions. Future implementations we see the addition of arbitration.&lt;br /&gt;
=====GO/Start=====&lt;br /&gt;
Once the robots on the field are found and in good order we can start a game. The GO/Start message signals the robots to begin thier main process and prepare to recieve data. The robots do not acknowledge this message since it is a broadcast message. Broadcast messages are messages sent to all robots at once, and makeup the majority of msgs sent on the wirless channel. The motivation for these message types is simplicity. Instead of sending most messages to each robot individually and flooding the wireless channel thereby increasing chances for a dropped packets we package the information in one big message. As a consequence there can be no acknowledgments to these messages due to the lack of an arbitration scheme. &lt;br /&gt;
=====Data=====&lt;br /&gt;
This message will be the bulk of the messages sent from on the wireless channel. It is a broadcast message for the above reasons and hence no acknowledgment is required. Each robots data values are picked off from the data section. This message can only be recieved by a robot when it is out of sleep mode.&lt;br /&gt;
=====Game Stop=====&lt;br /&gt;
Another broadcast message. Singals the end or stoppage of game play. When the robots are stopped they are not in sleep mode and can still communicate with the host. But since they are stopped thier internal process is no longer active and they act as &amp;quot;dumb&amp;quot; terminals.&lt;br /&gt;
=====Shoot Ball=====&lt;br /&gt;
As the title says this messages signals the robot whose ID it is sent to to shoot the ball, once it has rotated a given number of degrees. Since this is an individual robot message an acknowledgment is allowed and is required.&lt;br /&gt;
=====Robot Stop=====&lt;br /&gt;
The same as Game Stop only sent to individual robots. Since this is an individual robot message an acknowledgment is allowed and is required.&lt;br /&gt;
=====Status=====&lt;br /&gt;
The only message sent from the robot to the host, the status message serves as both an actual status message and as an ACK. In any case status messages are only sent was ack to messages that allow acknowledgments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Articles==&lt;br /&gt;
*[http://www.linxtechnologies.com/documents/AN-00160.pdf Linx article on protocol design]&lt;br /&gt;
*[http://focus-webapps.ti.com/general/docs/sitesearch/searchsite.tsp?searchTerm=serial%20RS232%20drivers&amp;amp;selectedTopic=1077383935&amp;amp;numRecords=25 TI Example wireless system design protocol and all]&lt;br /&gt;
*[http://www.mathpages.com/home/kmath458.htm Paper on the Cylical Redundancy Check error checking algorithm (CRC)]&lt;br /&gt;
*[http://spinroot.com/spin/Doc/Book91.html Enitre book on protocol design, a bit dated though like 1990 dated]&lt;br /&gt;
*[http://bwrc.eecs.berkeley.edu/People/Faculty/jan/publications/p124.pdf Berkeley article on wireless protocol design. Gives a real world example of how to design a wireless protocol.]&lt;br /&gt;
*[http://www.ohiolink.edu/etd/send-pdf.cgi?ohiou1121356426 Ohio University article. Details an intresting communications method]&lt;br /&gt;
*[http://www.eetasia.com/ARTICLES/2005JUN/A/2005JUN06_RFD_AN01.PDF Paper from Maxim on Manchester Encoding]&lt;br /&gt;
*[http://webs.cs.berkeley.edu/retreat-6-03/slides/ChipconECC.ppt Berkeley PPT on errors and wireless]&lt;br /&gt;
*[http://bbs.circuitcellar.com/phpBB2/viewtopic.php?t=2233&amp;amp; Circuit Cellar discussion on Manchester Encoder/Decoder]&lt;br /&gt;
*[http://robocup.mae.cornell.edu/documentation/robocup/2002/2002EE.pdf Cornell electrical design document]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
[[RCcoms|Wireless Hompage]]&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=RCwiproc&amp;diff=3290</id>
		<title>RCwiproc</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=RCwiproc&amp;diff=3290"/>
		<updated>2006-09-20T22:59:18Z</updated>

		<summary type="html">&lt;p&gt;ScottT: /* Comments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Wireless Protocol==&lt;br /&gt;
&lt;br /&gt;
The host will send each robot velocity, direction, and shoot directives, at a rate of about 40-50 Hz. '''(This data rate still needs to be confirmed with testing)''' In such a way the enitre system (host, camera, and robot) will behave as a real-time system. The robot will send its current error status, battery voltage, wheel velocity, unique ID, and whether or not it has the ball to the host but at the much slower rate of 10Hz.&lt;br /&gt;
&lt;br /&gt;
==Comments==&lt;br /&gt;
* I think we should definatly go with monitoring the channel for when the channel is clear... or, perhaps, dividing the sending time between each of the systems... each block of time is divided between the host sending a message, then each robot in turn sending a message... I actually hadn't thought about that mostly because my classes haven't dealt with wireless protocols so much yet. ;) Something to consider when watching the channel, however, is whether or not interference from other teams will be picked up as activity on the channel. [[User:ScottT|ScottT]] 18:59, 20 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
*As far as ACKs are concerned remember that for wireless arbitration between msgs gets a bit hairy. Say two robots try to respond back to the host at the sametime. The wireless signal that the host will recieve will be the ananlog sum the signals from those two robots. It is impossible for the host to tell which is which. Two ways around this: We could have each robot time out a set time t before it responds with an ACK. If we add a delay to t for each robot, then they will respond in an orderly fashion one after the other. Another solution is to have each robot look for traffic on the wireless channel and transmit only when the channel is clear. This is the best solution and is similar to the scheme used in CAN. Also remember this protocol needs to be as low level as possible. As for checking for wheel jams thats an issue for the motor controller. In the event of a jam its probably best to end gameplay for that robot since this isn't a safetly critical application. [[User:Marksp|Phillip]]&lt;br /&gt;
* What about the rate of dropped packets... how many do we actually expect to have? Since the system will be as close to real-time as possible, we'll have to deal with these dropped packets as well as any out-of-order packets that may arise because of the drop. Unless there's a good reason not to, we might want to have ACKs for every packet sent... both to and from the robots. We obviously have a unique situation in that we have a designated server and clients all the time... in other words, we only have to imeplement a client and a server protocol that correctly interact rather than a universal protocol where you could be either client or server (TCP, etc.). I think one of the first things we should do is figure out how we want to handle errors (if at all). Also, should the server be constantly broadcasting to each robot? Maybe a constant packet size, always transmitting at set times with corresponding ACKs from each robot after every packet? Just shooting some ideas out there. I'll try and look into this more before Thursday so we can speak on it some. [[User:ScottT|ScottT]] 00:48, 20 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* Do the robots implement any kind of checking on whether or not their wheels are jammed? Or other mechanical/electrical errors? [[User:ScottT|ScottT]] 22:23, 19 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* Parts of this protocol seem like there's too much or too little emphasis on some areas. Also, we may be able to work on the size of each packet a bit by playing around with what information we put in the header. The checksum is definatly good, but we need to consider the impact this could have on the &amp;quot;real-time&amp;quot; nature of the protocol. We may not be using UDP, but perhaps we can draw some from it. This is a great start, and I'll put some more comments/thoughts later, but I managed to burn the fingertips of 3 of my fingers, so typing takes some time right now, heh. [[User:ScottT|ScottT]] 22:20, 19 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
==To Do==&lt;br /&gt;
* Research protocols &lt;br /&gt;
** &amp;lt;strike&amp;gt;UDP (User Datagram Protocol)&amp;lt;/strike&amp;gt; - Dropping UDP as a choice in protocol. Would need a module that implements it already&lt;br /&gt;
** &amp;lt;strike&amp;gt;Protocol Book&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Determine the rate at which to update robots - Will need to find theoretical base for this and confirm with test.&lt;br /&gt;
* &amp;lt;strike&amp;gt;Specify a custom protocol&amp;lt;/strike&amp;gt; - Remeber to do Visio graph of packet structure&lt;br /&gt;
* &amp;lt;strike&amp;gt;Evaluate and compare UDP to a custom protocol&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Protocol Structure==&lt;br /&gt;
===What is a Protocol?===&lt;br /&gt;
A protocol is a set of rules to define how two or more entities comunicate. It contains 5 basic elements:&lt;br /&gt;
*A '''service''' definition - What information will the protocol provide the entities that utilize it?&lt;br /&gt;
*A set of '''assumptions''' - What is assumed to in the protocol? What isn't?&lt;br /&gt;
*A '''vocabulary''' - What will be the forms of data that I will use to communicate with this protocol&lt;br /&gt;
*A '''format/encoding''' - How will my vocabulary coherantly  fit together to form larger msgs, and cmds&lt;br /&gt;
*A set of '''procedural rules''' - How will I intiate communication? How are the entities using this protocol indentied? What are thier roles?&amp;lt;br&amp;gt;&lt;br /&gt;
Other considerations such as the medium are not specifically stated in the protocol but influence how the protocol is formed. Consider the difference between Wi-Fi where one router can talk to multiple devices versus communication between a wired video game controller and a console. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
As an example of a protocol consider the english language in its vocal form. The '''service''' it provides is a means of conveying thoughts thruogh the use of sound. It '''assumes''' that all the parties involved can speak and understand english, that the medium is such that the transmission of sound waves is possible, and that meaning of the '''vocabulary''' used is the same among all parties involved. Its '''vocabulary''' is made up of 26 letters that by themselves or in groups represent a set of vocal patterns generated and recieved by all the parties involved. In this abstract defintion of '''vocabulary''', it is not words but rather letters and the sounds they make that form the protocol. The basic '''format''' of the english language is such that the vocabulary of letters is formed into words, which each carry the meaning of the thought being conveyed. The procedural rules change based on the situation. Sometimes one person is communicating with a group of passive listeners, at other times several people are communicating with one person at once. There are even times (eavesdropping) where one or more parties are listening to a speaker not directly communicating to them.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===Our Protocol===&lt;br /&gt;
====Packet Structure====&lt;br /&gt;
A vital part of our robocup team is its communication system. Therefore an effective means of sending information across this system will need to be realized with a protocol of some sort. In general our protocol needs to allow the host to command movements and actions to the robots, while allowing the robots to provide status information back to the host. The medium will be RF signals in the 900mHz range. This means that we can assume an appreciable dropped packet rate, and interfereance from other teams, and devices. Binary data clocked at 57Kbps will be our vocabulary, and the msg format will be in packets of varying length. Specifically each packet will be divided in bytes, with the first byte consisting of a know header, followed by bytes containg the msg ID, its length, who its intended for, the data being sent, and a checksum.  Below in the figure is a a detail of what each packet will look like.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{|  cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Byte 1|| Byte 2||Bytes 3 up to 17||Last Byte&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Header (1 byte)&lt;br /&gt;
! width=&amp;quot;240&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|ID (3 bits) Length (5 bits)&lt;br /&gt;
! width=&amp;quot;280&amp;quot; bgcolor=&amp;quot;#d0d0d0&amp;quot;|Data (0 - 15 bytes)&lt;br /&gt;
! width =&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Checksum (1 byte)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The header consists of two transitions 0 to 1 and 1 to 0 spread over the time of one byte. The ID of the msg is a unique 3-bit value the identifies the type of msg being sent. In the table below is a listing of the different msgs and thier ID's. Each msg's length is described by a 5-bit value called the DLC or data length code. Who the msg is intended for is determined by which bit is set in the Recipient ID. Bits 1-5 correspond to robots 1-5, 6 corresponds to the host and 7 means the msg is meant for all robots. The format of the data section of the packet is based on the msg being sent. In most cases it is blank but for data msgs it has the following format:&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
{|  cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 1 Data (3 bytes)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 2 Data (3 bytes)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 3 Data (3 bytes)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 4 Data (3 bytes)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 5 Data (3 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align:left; width:100%; height:300px&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|+ '''Host to Robot Messages'''&lt;br /&gt;
|-style=&amp;quot;border:1px solid black; border-bottom:0px; background:#909090&amp;quot;&lt;br /&gt;
! style=&amp;quot;border:1px solid black;border-bottom:1px&amp;quot;|MsgID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ACK? !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|To &lt;br /&gt;
!! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|DLC !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Data Format !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Description&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090;&amp;quot; | Wakeup &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x01&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Byte 1 Robot ID&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Host polls for each robot individually. When this msg is recieved by a robot it responds with a status msg indicating that it is ready for action.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Go/Start  &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x02&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | None&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Intiates main process on robots.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Data&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x03&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | All robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 15&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | See below&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Streaming data sent to all robots in one msg.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Game Reset&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x04&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | All robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | None&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Ends the main process on all robots. Reverts them back to wakeup state.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Shoot Ball&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x05&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Robot ID (1 byte) Robot Angle (1 byte)&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Commands the robot with ID given to take the shot. &lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Robot Stop&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x06&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Robot ID&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Commands an indivdual robot to stop. May not be used.&lt;br /&gt;
|}&lt;br /&gt;
With the format for the Data messages being defined as:&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
{|  cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Byte 1||Byte 2||Byte 3&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Vx (1 byte)&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Vy (3 bits)&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Theta (5 bits)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{| style=&amp;quot;text-align:left; width:100%; height:100px&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|+ '''Robot to Host Messages'''&lt;br /&gt;
|-style=&amp;quot;border:1px solid black; border-bottom:0px; background:#909090&amp;quot;&lt;br /&gt;
! style=&amp;quot;border:1px solid black;border-bottom:1px&amp;quot;|MsgID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ACK? !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|To &lt;br /&gt;
!! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|DLC !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Data Format !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Description&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090;&amp;quot; | Status &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0xA&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Host&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | None&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Given in response to Wakeup message. Data section not fully specified, contains battery info serial number error state&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Protocol Procedural Rules====&lt;br /&gt;
When messages are being sent between the host and the team robots care must be taken to cause data collisions, message oscillations, and other errors. To prevent such events a set of procedural rules are implemented dictating when each msg is sent and what happens both before and after the messages transmission. Below is a detailed explanation of the procedural rules for each message and finally somMay be folded into msg 0x04e flow charts for events such as initial startup and stopping.&lt;br /&gt;
&lt;br /&gt;
=====Wakeup=====&lt;br /&gt;
As the title says this msg brings the robots out of a known &amp;quot;sleep&amp;quot; state and registers them the host controller. The motivaton for the message and the procedure it details is so that message transfer starts from a known safe state, this state being the &amp;quot;sleep&amp;quot; the state. The &amp;quot;sleep&amp;quot; state is entered once the robot is turned on and is written in firmware. In &amp;quot;sleep&amp;quot; state the robots will not talk to the host nor respond to any messages except wakeup. The procedure for waking up a team is as follows:&lt;br /&gt;
*First the human operator feeds in the unique ID of each robot on the field. These ID numbers range from 1-10 and in fact are the IDs included in each message. &lt;br /&gt;
*When the command is given the host sends out the wakeup msg to the robot whose ID is first in the list of IDs fed in the the operator.&lt;br /&gt;
*If the robot with that ID is on the field it will immediately respond back to the host with a status message giving information on its health, and its unique serial number.&lt;br /&gt;
*When the host recieved this status message it will move on the next ID in its list and transmit a wakeup message with that ID.&lt;br /&gt;
*If the host does not recieve a status message back or the health of the robot is such that its not ready it will alert the operator and will not continue the wakeup sequence.&lt;br /&gt;
*Once all the robots have been verified to be on the field and ready the wakeup sequence shall be considered complete and host is now ready to start a game. &amp;lt;br&amp;gt;&lt;br /&gt;
You may wonder why the wakeup msg is sent to each robot one at a time. Even though our protocol is full-duplex it doesn't define an arbitration scheme. As work-around messages from the robots to the host are only sent when asked for by the host. In such a manner we can ensure that only one robot can talk to the host at a time, avoiding data collisions. Future implementations we see the addition of arbitration.&lt;br /&gt;
=====GO/Start=====&lt;br /&gt;
Once the robots on the field are found and in good order we can start a game. The GO/Start message signals the robots to begin thier main process and prepare to recieve data. The robots do not acknowledge this message since it is a broadcast message. Broadcast messages are messages sent to all robots at once, and makeup the majority of msgs sent on the wirless channel. The motivation for these message types is simplicity. Instead of sending most messages to each robot individually and flooding the wireless channel thereby increasing chances for a dropped packets we package the information in one big message. As a consequence there can be no acknowledgments to these messages due to the lack of an arbitration scheme. &lt;br /&gt;
=====Data=====&lt;br /&gt;
This message will be the bulk of the messages sent from on the wireless channel. It is a broadcast message for the above reasons and hence no acknowledgment is required. Each robots data values are picked off from the data section. This message can only be recieved by a robot when it is out of sleep mode.&lt;br /&gt;
=====Game Stop=====&lt;br /&gt;
Another broadcast message. Singals the end or stoppage of game play. When the robots are stopped they are not in sleep mode and can still communicate with the host. But since they are stopped thier internal process is no longer active and they act as &amp;quot;dumb&amp;quot; terminals.&lt;br /&gt;
=====Shoot Ball=====&lt;br /&gt;
As the title says this messages signals the robot whose ID it is sent to to shoot the ball, once it has rotated a given number of degrees. Since this is an individual robot message an acknowledgment is allowed and is required.&lt;br /&gt;
=====Robot Stop=====&lt;br /&gt;
The same as Game Stop only sent to individual robots. Since this is an individual robot message an acknowledgment is allowed and is required.&lt;br /&gt;
=====Status=====&lt;br /&gt;
The only message sent from the robot to the host, the status message serves as both an actual status message and as an ACK. In any case status messages are only sent was ack to messages that allow acknowledgments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Articles==&lt;br /&gt;
*[http://www.linxtechnologies.com/documents/AN-00160.pdf Linx article on protocol design]&lt;br /&gt;
*[http://focus-webapps.ti.com/general/docs/sitesearch/searchsite.tsp?searchTerm=serial%20RS232%20drivers&amp;amp;selectedTopic=1077383935&amp;amp;numRecords=25 TI Example wireless system design protocol and all]&lt;br /&gt;
*[http://www.mathpages.com/home/kmath458.htm Paper on the Cylical Redundancy Check error checking algorithm (CRC)]&lt;br /&gt;
*[http://spinroot.com/spin/Doc/Book91.html Enitre book on protocol design, a bit dated though like 1990 dated]&lt;br /&gt;
*[http://bwrc.eecs.berkeley.edu/People/Faculty/jan/publications/p124.pdf Berkeley article on wireless protocol design. Gives a real world example of how to design a wireless protocol.]&lt;br /&gt;
*[http://www.ohiolink.edu/etd/send-pdf.cgi?ohiou1121356426 Ohio University article. Details an intresting communications method]&lt;br /&gt;
*[http://www.eetasia.com/ARTICLES/2005JUN/A/2005JUN06_RFD_AN01.PDF Paper from Maxim on Manchester Encoding]&lt;br /&gt;
*[http://webs.cs.berkeley.edu/retreat-6-03/slides/ChipconECC.ppt Berkeley PPT on errors and wireless]&lt;br /&gt;
*[http://bbs.circuitcellar.com/phpBB2/viewtopic.php?t=2233&amp;amp; Circuit Cellar discussion on Manchester Encoder/Decoder]&lt;br /&gt;
*[http://robocup.mae.cornell.edu/documentation/robocup/2002/2002EE.pdf Cornell electrical design document]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
[[RCcoms|Wireless Hompage]]&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=RCwiproc&amp;diff=3287</id>
		<title>RCwiproc</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=RCwiproc&amp;diff=3287"/>
		<updated>2006-09-20T04:48:19Z</updated>

		<summary type="html">&lt;p&gt;ScottT: /* Comments */  New thoughts&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Wireless Protocol==&lt;br /&gt;
&lt;br /&gt;
The host will send each robot velocity, direction, and shoot directives, at a rate of about 40-50 Hz. '''(This data rate still needs to be confirmed with testing)''' In such a way the enitre system (host, camera, and robot) will behave as a real-time system. The robot will send its current error status, battery voltage, wheel velocity, unique ID, and whether or not it has the ball to the host but at the much slower rate of 10Hz.&lt;br /&gt;
&lt;br /&gt;
==Comments==&lt;br /&gt;
* What about the rate of dropped packets... how many do we actually expect to have? Since the system will be as close to real-time as possible, we'll have to deal with these dropped packets as well as any out-of-order packets that may arise because of the drop. Unless there's a good reason not to, we might want to have ACKs for every packet sent... both to and from the robots. We obviously have a unique situation in that we have a designated server and clients all the time... in other words, we only have to imeplement a client and a server protocol that correctly interact rather than a universal protocol where you could be either client or server (TCP, etc.). I think one of the first things we should do is figure out how we want to handle errors (if at all). Also, should the server be constantly broadcasting to each robot? Maybe a constant packet size, always transmitting at set times with corresponding ACKs from each robot after every packet? Just shooting some ideas out there. I'll try and look into this more before Thursday so we can speak on it some. [[User:ScottT|ScottT]] 00:48, 20 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* Do the robots implement any kind of checking on whether or not their wheels are jammed? Or other mechanical/electrical errors? [[User:ScottT|ScottT]] 22:23, 19 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* Parts of this protocol seem like there's too much or too little emphasis on some areas. Also, we may be able to work on the size of each packet a bit by playing around with what information we put in the header. The checksum is definatly good, but we need to consider the impact this could have on the &amp;quot;real-time&amp;quot; nature of the protocol. We may not be using UDP, but perhaps we can draw some from it. This is a great start, and I'll put some more comments/thoughts later, but I managed to burn the fingertips of 3 of my fingers, so typing takes some time right now, heh. [[User:ScottT|ScottT]] 22:20, 19 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
==To Do==&lt;br /&gt;
* Research protocols &lt;br /&gt;
** &amp;lt;strike&amp;gt;UDP (User Datagram Protocol)&amp;lt;/strike&amp;gt; - Dropping UDP as a choice in protocol. Would need a module that implements it already&lt;br /&gt;
** &amp;lt;strike&amp;gt;Protocol Book&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Determine the rate at which to update robots - Will need to find theoretical base for this and confirm with test.&lt;br /&gt;
* &amp;lt;strike&amp;gt;Specify a custom protocol&amp;lt;/strike&amp;gt; - Remeber to do Visio graph of packet structure&lt;br /&gt;
* &amp;lt;strike&amp;gt;Evaluate and compare UDP to a custom protocol&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Protocol Structure==&lt;br /&gt;
===What is a Protocol?===&lt;br /&gt;
A protocol is a set of rules to define how two or more entities comunicate. It contains 5 basic elements:&lt;br /&gt;
*A '''service''' definition - What information will the protocol provide the entities that utilize it?&lt;br /&gt;
*A set of '''assumptions''' - What is assumed to in the protocol? What isn't?&lt;br /&gt;
*A '''vocabulary''' - What will be the forms of data that I will use to communicate with this protocol&lt;br /&gt;
*A '''format/encoding''' - How will my vocabulary coherantly  fit together to form larger msgs, and cmds&lt;br /&gt;
*A set of '''procedural rules''' - How will I intiate communication? How are the entities using this protocol indentied? What are thier roles?&amp;lt;br&amp;gt;&lt;br /&gt;
Other considerations such as the medium are not specifically stated in the protocol but influence how the protocol is formed. Consider the difference between Wi-Fi where one router can talk to multiple devices versus communication between a wired video game controller and a console. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
As an example of a protocol consider the english language in its vocal form. The '''service''' it provides is a means of conveying thoughts thruogh the use of sound. It '''assumes''' that all the parties involved can speak and understand english, that the medium is such that the transmission of sound waves is possible, and that meaning of the '''vocabulary''' used is the same among all parties involved. Its '''vocabulary''' is made up of 26 letters that by themselves or in groups represent a set of vocal patterns generated and recieved by all the parties involved. In this abstract defintion of '''vocabulary''', it is not words but rather letters and the sounds they make that form the protocol. The basic '''format''' of the english language is such that the vocabulary of letters is formed into words, which each carry the meaning of the thought being conveyed. The procedural rules change based on the situation. Sometimes one person is communicating with a group of passive listeners, at other times several people are communicating with one person at once. There are even times (eavesdropping) where one or more parties are listening to a speaker not directly communicating to them.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===Our Protocol===&lt;br /&gt;
====Packet Structure====&lt;br /&gt;
A vital part of our robocup team is its communication system. Therefore an effective means of sending information across this system will need to be realized with a protocol of some sort. In general our protocol needs to allow the host to command movements and actions to the robots, while allowing the robots to provide status information back to the host. The medium will be RF signals in the 900mHz range. This means that we can assume an appreciable dropped packet rate, and interfereance from other teams, and devices. Binary data clocked at 57Kbps will be our vocabulary, and the msg format will be in packets of varying length. Specifically each packet will be divided in bytes, with the first byte consisting of a know header, followed by bytes containg the msg ID, its length, who its intended for, the data being sent, and a checksum.  Below in the figure is a a detail of what each packet will look like.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{|  cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Byte 1|| Byte 2||Bytes 3 up to 17||Last Byte&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Header (1 byte)&lt;br /&gt;
! width=&amp;quot;240&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|ID (3 bits) Length (5 bits)&lt;br /&gt;
! width=&amp;quot;280&amp;quot; bgcolor=&amp;quot;#d0d0d0&amp;quot;|Data (0 - 15 bytes)&lt;br /&gt;
! width =&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Checksum (1 byte)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The header consists of two transitions 0 to 1 and 1 to 0 spread over the time of one byte. The ID of the msg is a unique 3-bit value the identifies the type of msg being sent. In the table below is a listing of the different msgs and thier ID's. Each msg's length is described by a 5-bit value called the DLC or data length code. Who the msg is intended for is determined by which bit is set in the Recipient ID. Bits 1-5 correspond to robots 1-5, 6 corresponds to the host and 7 means the msg is meant for all robots. The format of the data section of the packet is based on the msg being sent. In most cases it is blank but for data msgs it has the following format:&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
{|  cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 1 Data (3 bytes)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 2 Data (3 bytes)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 3 Data (3 bytes)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 4 Data (3 bytes)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 5 Data (3 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align:left; width:100%; height:300px&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|+ '''Host to Robot Messages'''&lt;br /&gt;
|-style=&amp;quot;border:1px solid black; border-bottom:0px; background:#909090&amp;quot;&lt;br /&gt;
! style=&amp;quot;border:1px solid black;border-bottom:1px&amp;quot;|MsgID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ACK? !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|To &lt;br /&gt;
!! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|DLC !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Data Format !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Description&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090;&amp;quot; | Wakeup &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x01&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Byte 1 Robot ID&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Host polls for each robot individually. When this msg is recieved by a robot it responds with a status msg indicating that it is ready for action.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Go/Start  &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x02&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | None&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Intiates main process on robots.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Data&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x03&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | All robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 15&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | See below&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Streaming data sent to all robots in one msg.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Game Reset&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x04&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | All robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | None&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Ends the main process on all robots. Reverts them back to wakeup state.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Shoot Ball&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x05&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Robot ID (1 byte) Robot Angle (1 byte)&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Commands the robot with ID given to take the shot. &lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Robot Stop&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x06&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Robot ID&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Commands an indivdual robot to stop. May not be used.&lt;br /&gt;
|}&lt;br /&gt;
With the format for the Data messages being defined as:&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
{|  cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Byte 1||Byte 2||Byte 3&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Vx (1 byte)&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Vy (3 bits)&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Theta (5 bits)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{| style=&amp;quot;text-align:left; width:100%; height:100px&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|+ '''Robot to Host Messages'''&lt;br /&gt;
|-style=&amp;quot;border:1px solid black; border-bottom:0px; background:#909090&amp;quot;&lt;br /&gt;
! style=&amp;quot;border:1px solid black;border-bottom:1px&amp;quot;|MsgID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ACK? !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|To &lt;br /&gt;
!! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|DLC !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Data Format !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Description&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090;&amp;quot; | Status &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0xA&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Host&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | None&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Given in response to Wakeup message. Data section not fully specified, contains battery info serial number error state&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Protocol Procedural Rules====&lt;br /&gt;
When messages are being sent between the host and the team robots care must be taken to cause data collisions, message oscillations, and other errors. To prevent such events a set of procedural rules are implemented dictating when each msg is sent and what happens both before and after the messages transmission. Below is a detailed explanation of the procedural rules for each message and finally somMay be folded into msg 0x04e flow charts for events such as initial startup and stopping.&lt;br /&gt;
&lt;br /&gt;
=====Wakeup=====&lt;br /&gt;
As the title says this msg brings the robots out of a known &amp;quot;sleep&amp;quot; state and registers them the host controller. The motivaton for the message and the procedure it details is so that message transfer starts from a known safe state, this state being the &amp;quot;sleep&amp;quot; the state. The &amp;quot;sleep&amp;quot; state is entered once the robot is turned on and is written in firmware. In &amp;quot;sleep&amp;quot; state the robots will not talk to the host nor respond to any messages except wakeup. The procedure for waking up a team is as follows:&lt;br /&gt;
*First the human operator feeds in the unique ID of each robot on the field. These ID numbers range from 1-10 and in fact are the IDs included in each message. &lt;br /&gt;
*When the command is given the host sends out the wakeup msg to the robot whose ID is first in the list of IDs fed in the the operator.&lt;br /&gt;
*If the robot with that ID is on the field it will immediately respond back to the host with a status message giving information on its health, and its unique serial number.&lt;br /&gt;
*When the host recieved this status message it will move on the next ID in its list and transmit a wakeup message with that ID.&lt;br /&gt;
*If the host does not recieve a status message back or the health of the robot is such that its not ready it will alert the operator and will not continue the wakeup sequence.&lt;br /&gt;
*Once all the robots have been verified to be on the field and ready the wakeup sequence shall be considered complete and host is now ready to start a game. &amp;lt;br&amp;gt;&lt;br /&gt;
You may wonder why the wakeup msg is sent to each robot one at a time. Even though our protocol is full-duplex it doesn't define an arbitration scheme. As work-around messages from the robots to the host are only sent when asked for by the host. In such a manner we can ensure that only one robot can talk to the host at a time, avoiding data collisions. Future implementations we see the addition of arbitration.&lt;br /&gt;
=====GO/Start=====&lt;br /&gt;
Once the robots on the field are found and in good order we can start a game. The GO/Start message signals the robots to begin thier main process and prepare to recieve data. The robots do not acknowledge this message since it is a broadcast message. Broadcast messages are messages sent to all robots at once, and makeup the majority of msgs sent on the wirless channel. The motivation for these message types is simplicity. Instead of sending most messages to each robot individually and flooding the wireless channel thereby increasing chances for a dropped packets we package the information in one big message. As a consequence there can be no acknowledgments to these messages due to the lack of an arbitration scheme. &lt;br /&gt;
=====Data=====&lt;br /&gt;
This message will be the bulk of the messages sent from on the wireless channel. It is a broadcast message for the above reasons and hence no acknowledgment is required. Each robots data values are picked off from the data section. This message can only be recieved by a robot when it is out of sleep mode.&lt;br /&gt;
=====Game Stop=====&lt;br /&gt;
Another broadcast message. Singals the end or stoppage of game play. When the robots are stopped they are not in sleep mode and can still communicate with the host. But since they are stopped thier internal process is no longer active and they act as &amp;quot;dumb&amp;quot; terminals.&lt;br /&gt;
=====Shoot Ball=====&lt;br /&gt;
As the title says this messages signals the robot whose ID it is sent to to shoot the ball, once it has rotated a given number of degrees. Since this is an individual robot message an acknowledgment is allowed and is required.&lt;br /&gt;
=====Robot Stop=====&lt;br /&gt;
The same as Game Stop only sent to individual robots. Since this is an individual robot message an acknowledgment is allowed and is required.&lt;br /&gt;
=====Status=====&lt;br /&gt;
The only message sent from the robot to the host, the status message serves as both an actual status message and as an ACK. In any case status messages are only sent was ack to messages that allow acknowledgments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Articles==&lt;br /&gt;
*[http://www.linxtechnologies.com/documents/AN-00160.pdf Linx article on protocol design]&lt;br /&gt;
*[http://focus-webapps.ti.com/general/docs/sitesearch/searchsite.tsp?searchTerm=serial%20RS232%20drivers&amp;amp;selectedTopic=1077383935&amp;amp;numRecords=25 TI Example wireless system design protocol and all]&lt;br /&gt;
*[http://www.mathpages.com/home/kmath458.htm Paper on the Cylical Redundancy Check error checking algorithm (CRC)]&lt;br /&gt;
*[http://spinroot.com/spin/Doc/Book91.html Enitre book on protocol design, a bit dated though like 1990 dated]&lt;br /&gt;
*[http://bwrc.eecs.berkeley.edu/People/Faculty/jan/publications/p124.pdf Berkeley article on wireless protocol design. Gives a real world example of how to design a wireless protocol.]&lt;br /&gt;
*[http://www.ohiolink.edu/etd/send-pdf.cgi?ohiou1121356426 Ohio University article. Details an intresting communications method]&lt;br /&gt;
*[http://www.eetasia.com/ARTICLES/2005JUN/A/2005JUN06_RFD_AN01.PDF Paper from Maxim on Manchester Encoding]&lt;br /&gt;
*[http://webs.cs.berkeley.edu/retreat-6-03/slides/ChipconECC.ppt Berkeley PPT on errors and wireless]&lt;br /&gt;
*[http://bbs.circuitcellar.com/phpBB2/viewtopic.php?t=2233&amp;amp; Circuit Cellar discussion on Manchester Encoder/Decoder]&lt;br /&gt;
*[http://robocup.mae.cornell.edu/documentation/robocup/2002/2002EE.pdf Cornell electrical design document]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
[[RCcoms|Wireless Hompage]]&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=RCwiproc&amp;diff=3285</id>
		<title>RCwiproc</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=RCwiproc&amp;diff=3285"/>
		<updated>2006-09-20T02:23:00Z</updated>

		<summary type="html">&lt;p&gt;ScottT: /* Comments */  - posing a question&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Wireless Protocol==&lt;br /&gt;
&lt;br /&gt;
The host will send each robot velocity, direction, and shoot directives, at a rate of about 40-50 Hz. '''(This data rate still needs to be confirmed with testing)''' In such a way the enitre system (host, camera, and robot) will behave as a real-time system. The robot will send its current error status, battery voltage, wheel velocity, unique ID, and whether or not it has the ball to the host but at the much slower rate of 10Hz.&lt;br /&gt;
&lt;br /&gt;
==Comments==&lt;br /&gt;
* Do the robots implement any kind of checking on whether or not their wheels are jammed? Or other mechanical/electrical errors? [[User:ScottT|ScottT]] 22:23, 19 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
* Parts of this protocol seem like there's too much or too little emphasis on some areas. Also, we may be able to work on the size of each packet a bit by playing around with what information we put in the header. The checksum is definatly good, but we need to consider the impact this could have on the &amp;quot;real-time&amp;quot; nature of the protocol. We may not be using UDP, but perhaps we can draw some from it. This is a great start, and I'll put some more comments/thoughts later, but I managed to burn the fingertips of 3 of my fingers, so typing takes some time right now, heh. [[User:ScottT|ScottT]] 22:20, 19 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
==To Do==&lt;br /&gt;
* Research protocols &lt;br /&gt;
** &amp;lt;strike&amp;gt;UDP (User Datagram Protocol)&amp;lt;/strike&amp;gt; - Dropping UDP as a choice in protocol. Would need a module that implements it already&lt;br /&gt;
** &amp;lt;strike&amp;gt;Protocol Book&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Determine the rate at which to update robots - Will need to find theoretical base for this and confirm with test.&lt;br /&gt;
* &amp;lt;strike&amp;gt;Specify a custom protocol&amp;lt;/strike&amp;gt; - Remeber to do Visio graph of packet structure&lt;br /&gt;
* &amp;lt;strike&amp;gt;Evaluate and compare UDP to a custom protocol&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Protocol Structure==&lt;br /&gt;
===What is a Protocol?===&lt;br /&gt;
A protocol is a set of rules to define how two or more entities comunicate. It contains 5 basic elements:&lt;br /&gt;
*A '''service''' definition - What information will the protocol provide the entities that utilize it?&lt;br /&gt;
*A set of '''assumptions''' - What is assumed to in the protocol? What isn't?&lt;br /&gt;
*A '''vocabulary''' - What will be the forms of data that I will use to communicate with this protocol&lt;br /&gt;
*A '''format/encoding''' - How will my vocabulary coherantly  fit together to form larger msgs, and cmds&lt;br /&gt;
*A set of '''procedural rules''' - How will I intiate communication? How are the entities using this protocol indentied? What are thier roles?&amp;lt;br&amp;gt;&lt;br /&gt;
Other considerations such as the medium are not specifically stated in the protocol but influence how the protocol is formed. Consider the difference between Wi-Fi where one router can talk to multiple devices versus communication between a wired video game controller and a console. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
As an example of a protocol consider the english language in its vocal form. The '''service''' it provides is a means of conveying thoughts thruogh the use of sound. It '''assumes''' that all the parties involved can speak and understand english, that the medium is such that the transmission of sound waves is possible, and that meaning of the '''vocabulary''' used is the same among all parties involved. Its '''vocabulary''' is made up of 26 letters that by themselves or in groups represent a set of vocal patterns generated and recieved by all the parties involved. In this abstract defintion of '''vocabulary''', it is not words but rather letters and the sounds they make that form the protocol. The basic '''format''' of the english language is such that the vocabulary of letters is formed into words, which each carry the meaning of the thought being conveyed. The procedural rules change based on the situation. Sometimes one person is communicating with a group of passive listeners, at other times several people are communicating with one person at once. There are even times (eavesdropping) where one or more parties are listening to a speaker not directly communicating to them.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===Our Protocol===&lt;br /&gt;
====Packet Structure====&lt;br /&gt;
A vital part of our robocup team is its communication system. Therefore an effective means of sending information across this system will need to be realized with a protocol of some sort. In general our protocol needs to allow the host to command movements and actions to the robots, while allowing the robots to provide status information back to the host. The medium will be RF signals in the 900mHz range. This means that we can assume an appreciable dropped packet rate, and interfereance from other teams, and devices. Binary data clocked at 57Kbps will be our vocabulary, and the msg format will be in packets of varying length. Specifically each packet will be divided in bytes, with the first byte consisting of a know header, followed by bytes containg the msg ID, its length, who its intended for, the data being sent, and a checksum.  Below in the figure is a a detail of what each packet will look like.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{|  cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Byte 1|| Byte 2||Bytes 3 up to 17||Last Byte&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Header (1 byte)&lt;br /&gt;
! width=&amp;quot;240&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|ID (3 bits) Length (5 bits)&lt;br /&gt;
! width=&amp;quot;280&amp;quot; bgcolor=&amp;quot;#d0d0d0&amp;quot;|Data (0 - 15 bytes)&lt;br /&gt;
! width =&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Checksum (1 byte)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The header consists of two transitions 0 to 1 and 1 to 0 spread over the time of one byte. The ID of the msg is a unique 3-bit value the identifies the type of msg being sent. In the table below is a listing of the different msgs and thier ID's. Each msg's length is described by a 5-bit value called the DLC or data length code. Who the msg is intended for is determined by which bit is set in the Recipient ID. Bits 1-5 correspond to robots 1-5, 6 corresponds to the host and 7 means the msg is meant for all robots. The format of the data section of the packet is based on the msg being sent. In most cases it is blank but for data msgs it has the following format:&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
{|  cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 1 Data (3 bytes)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 2 Data (3 bytes)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 3 Data (3 bytes)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 4 Data (3 bytes)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 5 Data (3 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align:left; width:100%; height:300px&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|+ '''Host to Robot Messages'''&lt;br /&gt;
|-style=&amp;quot;border:1px solid black; border-bottom:0px; background:#909090&amp;quot;&lt;br /&gt;
! style=&amp;quot;border:1px solid black;border-bottom:1px&amp;quot;|MsgID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ACK? !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|To &lt;br /&gt;
!! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|DLC !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Data Format !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Description&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090;&amp;quot; | Wakeup &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x01&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Byte 1 Robot ID&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Host polls for each robot individually. When this msg is recieved by a robot it responds with a status msg indicating that it is ready for action.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Go/Start  &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x02&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | None&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Intiates main process on robots.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Data&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x03&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | All robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 15&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | See below&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Streaming data sent to all robots in one msg.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Game Reset&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x04&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | All robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | None&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Ends the main process on all robots. Reverts them back to wakeup state.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Shoot Ball&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x05&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Robot ID (1 byte) Robot Angle (1 byte)&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Commands the robot with ID given to take the shot. &lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Robot Stop&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x06&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Robot ID&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Commands an indivdual robot to stop. May not be used.&lt;br /&gt;
|}&lt;br /&gt;
With the format for the Data messages being defined as:&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
{|  cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Byte 1||Byte 2||Byte 3&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Vx (1 byte)&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Vy (3 bits)&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Theta (5 bits)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{| style=&amp;quot;text-align:left; width:100%; height:100px&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|+ '''Robot to Host Messages'''&lt;br /&gt;
|-style=&amp;quot;border:1px solid black; border-bottom:0px; background:#909090&amp;quot;&lt;br /&gt;
! style=&amp;quot;border:1px solid black;border-bottom:1px&amp;quot;|MsgID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ACK? !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|To &lt;br /&gt;
!! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|DLC !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Data Format !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Description&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090;&amp;quot; | Status &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0xA&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Host&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | None&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Given in response to Wakeup message. Data section not fully specified, contains battery info serial number error state&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Protocol Procedural Rules====&lt;br /&gt;
When messages are being sent between the host and the team robots care must be taken to cause data collisions, message oscillations, and other errors. To prevent such events a set of procedural rules are implemented dictating when each msg is sent and what happens both before and after the messages transmission. Below is a detailed explanation of the procedural rules for each message and finally somMay be folded into msg 0x04e flow charts for events such as initial startup and stopping.&lt;br /&gt;
&lt;br /&gt;
=====Wakeup=====&lt;br /&gt;
As the title says this msg brings the robots out of a known &amp;quot;sleep&amp;quot; state and registers them the host controller. The motivaton for the message and the procedure it details is so that message transfer starts from a known safe state, this state being the &amp;quot;sleep&amp;quot; the state. The &amp;quot;sleep&amp;quot; state is entered once the robot is turned on and is written in firmware. In &amp;quot;sleep&amp;quot; state the robots will not talk to the host nor respond to any messages except wakeup. The procedure for waking up a team is as follows:&lt;br /&gt;
*First the human operator feeds in the unique ID of each robot on the field. These ID numbers range from 1-10 and in fact are the IDs included in each message. &lt;br /&gt;
*When the command is given the host sends out the wakeup msg to the robot whose ID is first in the list of IDs fed in the the operator.&lt;br /&gt;
*If the robot with that ID is on the field it will immediately respond back to the host with a status message giving information on its health, and its unique serial number.&lt;br /&gt;
*When the host recieved this status message it will move on the next ID in its list and transmit a wakeup message with that ID.&lt;br /&gt;
*If the host does not recieve a status message back or the health of the robot is such that its not ready it will alert the operator and will not continue the wakeup sequence.&lt;br /&gt;
*Once all the robots have been verified to be on the field and ready the wakeup sequence shall be considered complete and host is now ready to start a game. &amp;lt;br&amp;gt;&lt;br /&gt;
You may wonder why the wakeup msg is sent to each robot one at a time. Even though our protocol is full-duplex it doesn't define an arbitration scheme. As work-around messages from the robots to the host are only sent when asked for by the host. In such a manner we can ensure that only one robot can talk to the host at a time, avoiding data collisions. Future implementations we see the addition of arbitration.&lt;br /&gt;
=====GO/Start=====&lt;br /&gt;
Once the robots on the field are found and in good order we can start a game. The GO/Start message signals the robots to begin thier main process and prepare to recieve data. The robots do not acknowledge this message since it is a broadcast message. Broadcast messages are messages sent to all robots at once, and makeup the majority of msgs sent on the wirless channel. The motivation for these message types is simplicity. Instead of sending most messages to each robot individually and flooding the wireless channel thereby increasing chances for a dropped packets we package the information in one big message. As a consequence there can be no acknowledgments to these messages due to the lack of an arbitration scheme. &lt;br /&gt;
=====Data=====&lt;br /&gt;
This message will be the bulk of the messages sent from on the wireless channel. It is a broadcast message for the above reasons and hence no acknowledgment is required. Each robots data values are picked off from the data section. This message can only be recieved by a robot when it is out of sleep mode.&lt;br /&gt;
=====Game Stop=====&lt;br /&gt;
Another broadcast message. Singals the end or stoppage of game play. When the robots are stopped they are not in sleep mode and can still communicate with the host. But since they are stopped thier internal process is no longer active and they act as &amp;quot;dumb&amp;quot; terminals.&lt;br /&gt;
=====Shoot Ball=====&lt;br /&gt;
As the title says this messages signals the robot whose ID it is sent to to shoot the ball, once it has rotated a given number of degrees. Since this is an individual robot message an acknowledgment is allowed and is required.&lt;br /&gt;
=====Robot Stop=====&lt;br /&gt;
The same as Game Stop only sent to individual robots. Since this is an individual robot message an acknowledgment is allowed and is required.&lt;br /&gt;
=====Status=====&lt;br /&gt;
The only message sent from the robot to the host, the status message serves as both an actual status message and as an ACK. In any case status messages are only sent was ack to messages that allow acknowledgments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Articles==&lt;br /&gt;
*[http://www.linxtechnologies.com/documents/AN-00160.pdf Linx article on protocol design]&lt;br /&gt;
*[http://focus-webapps.ti.com/general/docs/sitesearch/searchsite.tsp?searchTerm=serial%20RS232%20drivers&amp;amp;selectedTopic=1077383935&amp;amp;numRecords=25 TI Example wireless system design protocol and all]&lt;br /&gt;
*[http://www.mathpages.com/home/kmath458.htm Paper on the Cylical Redundancy Check error checking algorithm (CRC)]&lt;br /&gt;
*[http://spinroot.com/spin/Doc/Book91.html Enitre book on protocol design, a bit dated though like 1990 dated]&lt;br /&gt;
*[http://bwrc.eecs.berkeley.edu/People/Faculty/jan/publications/p124.pdf Berkeley article on wireless protocol design. Gives a real world example of how to design a wireless protocol.]&lt;br /&gt;
*[http://www.ohiolink.edu/etd/send-pdf.cgi?ohiou1121356426 Ohio University article. Details an intresting communications method]&lt;br /&gt;
*[http://www.eetasia.com/ARTICLES/2005JUN/A/2005JUN06_RFD_AN01.PDF Paper from Maxim on Manchester Encoding]&lt;br /&gt;
*[http://webs.cs.berkeley.edu/retreat-6-03/slides/ChipconECC.ppt Berkeley PPT on errors and wireless]&lt;br /&gt;
*[http://bbs.circuitcellar.com/phpBB2/viewtopic.php?t=2233&amp;amp; Circuit Cellar discussion on Manchester Encoder/Decoder]&lt;br /&gt;
*[http://robocup.mae.cornell.edu/documentation/robocup/2002/2002EE.pdf Cornell electrical design document]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
[[RCcoms|Wireless Hompage]]&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=RCwiproc&amp;diff=3284</id>
		<title>RCwiproc</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=RCwiproc&amp;diff=3284"/>
		<updated>2006-09-20T02:20:29Z</updated>

		<summary type="html">&lt;p&gt;ScottT: Added comments section and a comment. We could use the discussion page for this... but I dunno how many people would check there.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Wireless Protocol==&lt;br /&gt;
&lt;br /&gt;
The host will send each robot velocity, direction, and shoot directives, at a rate of about 40-50 Hz. '''(This data rate still needs to be confirmed with testing)''' In such a way the enitre system (host, camera, and robot) will behave as a real-time system. The robot will send its current error status, battery voltage, wheel velocity, unique ID, and whether or not it has the ball to the host but at the much slower rate of 10Hz.&lt;br /&gt;
&lt;br /&gt;
==Comments==&lt;br /&gt;
* Parts of this protocol seem like there's too much or too little emphasis on some areas. Also, we may be able to work on the size of each packet a bit by playing around with what information we put in the header. The checksum is definatly good, but we need to consider the impact this could have on the &amp;quot;real-time&amp;quot; nature of the protocol. We may not be using UDP, but perhaps we can draw some from it. This is a great start, and I'll put some more comments/thoughts later, but I managed to burn the fingertips of 3 of my fingers, so typing takes some time right now, heh. [[User:ScottT|ScottT]] 22:20, 19 September 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
==To Do==&lt;br /&gt;
* Research protocols &lt;br /&gt;
** &amp;lt;strike&amp;gt;UDP (User Datagram Protocol)&amp;lt;/strike&amp;gt; - Dropping UDP as a choice in protocol. Would need a module that implements it already&lt;br /&gt;
** &amp;lt;strike&amp;gt;Protocol Book&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Determine the rate at which to update robots - Will need to find theoretical base for this and confirm with test.&lt;br /&gt;
* &amp;lt;strike&amp;gt;Specify a custom protocol&amp;lt;/strike&amp;gt; - Remeber to do Visio graph of packet structure&lt;br /&gt;
* &amp;lt;strike&amp;gt;Evaluate and compare UDP to a custom protocol&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Protocol Structure==&lt;br /&gt;
===What is a Protocol?===&lt;br /&gt;
A protocol is a set of rules to define how two or more entities comunicate. It contains 5 basic elements:&lt;br /&gt;
*A '''service''' definition - What information will the protocol provide the entities that utilize it?&lt;br /&gt;
*A set of '''assumptions''' - What is assumed to in the protocol? What isn't?&lt;br /&gt;
*A '''vocabulary''' - What will be the forms of data that I will use to communicate with this protocol&lt;br /&gt;
*A '''format/encoding''' - How will my vocabulary coherantly  fit together to form larger msgs, and cmds&lt;br /&gt;
*A set of '''procedural rules''' - How will I intiate communication? How are the entities using this protocol indentied? What are thier roles?&amp;lt;br&amp;gt;&lt;br /&gt;
Other considerations such as the medium are not specifically stated in the protocol but influence how the protocol is formed. Consider the difference between Wi-Fi where one router can talk to multiple devices versus communication between a wired video game controller and a console. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
As an example of a protocol consider the english language in its vocal form. The '''service''' it provides is a means of conveying thoughts thruogh the use of sound. It '''assumes''' that all the parties involved can speak and understand english, that the medium is such that the transmission of sound waves is possible, and that meaning of the '''vocabulary''' used is the same among all parties involved. Its '''vocabulary''' is made up of 26 letters that by themselves or in groups represent a set of vocal patterns generated and recieved by all the parties involved. In this abstract defintion of '''vocabulary''', it is not words but rather letters and the sounds they make that form the protocol. The basic '''format''' of the english language is such that the vocabulary of letters is formed into words, which each carry the meaning of the thought being conveyed. The procedural rules change based on the situation. Sometimes one person is communicating with a group of passive listeners, at other times several people are communicating with one person at once. There are even times (eavesdropping) where one or more parties are listening to a speaker not directly communicating to them.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===Our Protocol===&lt;br /&gt;
====Packet Structure====&lt;br /&gt;
A vital part of our robocup team is its communication system. Therefore an effective means of sending information across this system will need to be realized with a protocol of some sort. In general our protocol needs to allow the host to command movements and actions to the robots, while allowing the robots to provide status information back to the host. The medium will be RF signals in the 900mHz range. This means that we can assume an appreciable dropped packet rate, and interfereance from other teams, and devices. Binary data clocked at 57Kbps will be our vocabulary, and the msg format will be in packets of varying length. Specifically each packet will be divided in bytes, with the first byte consisting of a know header, followed by bytes containg the msg ID, its length, who its intended for, the data being sent, and a checksum.  Below in the figure is a a detail of what each packet will look like.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{|  cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Byte 1|| Byte 2||Bytes 3 up to 17||Last Byte&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Header (1 byte)&lt;br /&gt;
! width=&amp;quot;240&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|ID (3 bits) Length (5 bits)&lt;br /&gt;
! width=&amp;quot;280&amp;quot; bgcolor=&amp;quot;#d0d0d0&amp;quot;|Data (0 - 15 bytes)&lt;br /&gt;
! width =&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Checksum (1 byte)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The header consists of two transitions 0 to 1 and 1 to 0 spread over the time of one byte. The ID of the msg is a unique 3-bit value the identifies the type of msg being sent. In the table below is a listing of the different msgs and thier ID's. Each msg's length is described by a 5-bit value called the DLC or data length code. Who the msg is intended for is determined by which bit is set in the Recipient ID. Bits 1-5 correspond to robots 1-5, 6 corresponds to the host and 7 means the msg is meant for all robots. The format of the data section of the packet is based on the msg being sent. In most cases it is blank but for data msgs it has the following format:&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
{|  cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 1 Data (3 bytes)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 2 Data (3 bytes)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 3 Data (3 bytes)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 4 Data (3 bytes)&lt;br /&gt;
! width=&amp;quot;250&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Robot 5 Data (3 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align:left; width:100%; height:300px&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|+ '''Host to Robot Messages'''&lt;br /&gt;
|-style=&amp;quot;border:1px solid black; border-bottom:0px; background:#909090&amp;quot;&lt;br /&gt;
! style=&amp;quot;border:1px solid black;border-bottom:1px&amp;quot;|MsgID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ACK? !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|To &lt;br /&gt;
!! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|DLC !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Data Format !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Description&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090;&amp;quot; | Wakeup &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x01&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Byte 1 Robot ID&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Host polls for each robot individually. When this msg is recieved by a robot it responds with a status msg indicating that it is ready for action.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Go/Start  &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x02&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | None&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Intiates main process on robots.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Data&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x03&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | All robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 15&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | See below&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Streaming data sent to all robots in one msg.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Game Reset&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x04&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | All robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | None&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Ends the main process on all robots. Reverts them back to wakeup state.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Shoot Ball&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x05&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Robot ID (1 byte) Robot Angle (1 byte)&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Commands the robot with ID given to take the shot. &lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Robot Stop&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0x06&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Individual robots&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Robot ID&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Commands an indivdual robot to stop. May not be used.&lt;br /&gt;
|}&lt;br /&gt;
With the format for the Data messages being defined as:&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
{|  cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Byte 1||Byte 2||Byte 3&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Vx (1 byte)&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Vy (3 bits)&lt;br /&gt;
! width=&amp;quot;200&amp;quot; bgcolor=&amp;quot;#909090&amp;quot;|Theta (5 bits)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{| style=&amp;quot;text-align:left; width:100%; height:100px&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|+ '''Robot to Host Messages'''&lt;br /&gt;
|-style=&amp;quot;border:1px solid black; border-bottom:0px; background:#909090&amp;quot;&lt;br /&gt;
! style=&amp;quot;border:1px solid black;border-bottom:1px&amp;quot;|MsgID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ID !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|ACK? !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|To &lt;br /&gt;
!! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|DLC !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Data Format !! style=&amp;quot;border:1px solid black;border-bottom:0px&amp;quot;|Description&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090;&amp;quot; | Status &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 0xA&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Host&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | None&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Given in response to Wakeup message. Data section not fully specified, contains battery info serial number error state&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Protocol Procedural Rules====&lt;br /&gt;
When messages are being sent between the host and the team robots care must be taken to cause data collisions, message oscillations, and other errors. To prevent such events a set of procedural rules are implemented dictating when each msg is sent and what happens both before and after the messages transmission. Below is a detailed explanation of the procedural rules for each message and finally somMay be folded into msg 0x04e flow charts for events such as initial startup and stopping.&lt;br /&gt;
&lt;br /&gt;
=====Wakeup=====&lt;br /&gt;
As the title says this msg brings the robots out of a known &amp;quot;sleep&amp;quot; state and registers them the host controller. The motivaton for the message and the procedure it details is so that message transfer starts from a known safe state, this state being the &amp;quot;sleep&amp;quot; the state. The &amp;quot;sleep&amp;quot; state is entered once the robot is turned on and is written in firmware. In &amp;quot;sleep&amp;quot; state the robots will not talk to the host nor respond to any messages except wakeup. The procedure for waking up a team is as follows:&lt;br /&gt;
*First the human operator feeds in the unique ID of each robot on the field. These ID numbers range from 1-10 and in fact are the IDs included in each message. &lt;br /&gt;
*When the command is given the host sends out the wakeup msg to the robot whose ID is first in the list of IDs fed in the the operator.&lt;br /&gt;
*If the robot with that ID is on the field it will immediately respond back to the host with a status message giving information on its health, and its unique serial number.&lt;br /&gt;
*When the host recieved this status message it will move on the next ID in its list and transmit a wakeup message with that ID.&lt;br /&gt;
*If the host does not recieve a status message back or the health of the robot is such that its not ready it will alert the operator and will not continue the wakeup sequence.&lt;br /&gt;
*Once all the robots have been verified to be on the field and ready the wakeup sequence shall be considered complete and host is now ready to start a game. &amp;lt;br&amp;gt;&lt;br /&gt;
You may wonder why the wakeup msg is sent to each robot one at a time. Even though our protocol is full-duplex it doesn't define an arbitration scheme. As work-around messages from the robots to the host are only sent when asked for by the host. In such a manner we can ensure that only one robot can talk to the host at a time, avoiding data collisions. Future implementations we see the addition of arbitration.&lt;br /&gt;
=====GO/Start=====&lt;br /&gt;
Once the robots on the field are found and in good order we can start a game. The GO/Start message signals the robots to begin thier main process and prepare to recieve data. The robots do not acknowledge this message since it is a broadcast message. Broadcast messages are messages sent to all robots at once, and makeup the majority of msgs sent on the wirless channel. The motivation for these message types is simplicity. Instead of sending most messages to each robot individually and flooding the wireless channel thereby increasing chances for a dropped packets we package the information in one big message. As a consequence there can be no acknowledgments to these messages due to the lack of an arbitration scheme. &lt;br /&gt;
=====Data=====&lt;br /&gt;
This message will be the bulk of the messages sent from on the wireless channel. It is a broadcast message for the above reasons and hence no acknowledgment is required. Each robots data values are picked off from the data section. This message can only be recieved by a robot when it is out of sleep mode.&lt;br /&gt;
=====Game Stop=====&lt;br /&gt;
Another broadcast message. Singals the end or stoppage of game play. When the robots are stopped they are not in sleep mode and can still communicate with the host. But since they are stopped thier internal process is no longer active and they act as &amp;quot;dumb&amp;quot; terminals.&lt;br /&gt;
=====Shoot Ball=====&lt;br /&gt;
As the title says this messages signals the robot whose ID it is sent to to shoot the ball, once it has rotated a given number of degrees. Since this is an individual robot message an acknowledgment is allowed and is required.&lt;br /&gt;
=====Robot Stop=====&lt;br /&gt;
The same as Game Stop only sent to individual robots. Since this is an individual robot message an acknowledgment is allowed and is required.&lt;br /&gt;
=====Status=====&lt;br /&gt;
The only message sent from the robot to the host, the status message serves as both an actual status message and as an ACK. In any case status messages are only sent was ack to messages that allow acknowledgments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Articles==&lt;br /&gt;
*[http://www.linxtechnologies.com/documents/AN-00160.pdf Linx article on protocol design]&lt;br /&gt;
*[http://focus-webapps.ti.com/general/docs/sitesearch/searchsite.tsp?searchTerm=serial%20RS232%20drivers&amp;amp;selectedTopic=1077383935&amp;amp;numRecords=25 TI Example wireless system design protocol and all]&lt;br /&gt;
*[http://www.mathpages.com/home/kmath458.htm Paper on the Cylical Redundancy Check error checking algorithm (CRC)]&lt;br /&gt;
*[http://spinroot.com/spin/Doc/Book91.html Enitre book on protocol design, a bit dated though like 1990 dated]&lt;br /&gt;
*[http://bwrc.eecs.berkeley.edu/People/Faculty/jan/publications/p124.pdf Berkeley article on wireless protocol design. Gives a real world example of how to design a wireless protocol.]&lt;br /&gt;
*[http://www.ohiolink.edu/etd/send-pdf.cgi?ohiou1121356426 Ohio University article. Details an intresting communications method]&lt;br /&gt;
*[http://www.eetasia.com/ARTICLES/2005JUN/A/2005JUN06_RFD_AN01.PDF Paper from Maxim on Manchester Encoding]&lt;br /&gt;
*[http://webs.cs.berkeley.edu/retreat-6-03/slides/ChipconECC.ppt Berkeley PPT on errors and wireless]&lt;br /&gt;
*[http://bbs.circuitcellar.com/phpBB2/viewtopic.php?t=2233&amp;amp; Circuit Cellar discussion on Manchester Encoder/Decoder]&lt;br /&gt;
*[http://robocup.mae.cornell.edu/documentation/robocup/2002/2002EE.pdf Cornell electrical design document]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
[[RCcoms|Wireless Hompage]]&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=RCmicro&amp;diff=3283</id>
		<title>RCmicro</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=RCmicro&amp;diff=3283"/>
		<updated>2006-09-20T01:52:13Z</updated>

		<summary type="html">&lt;p&gt;ScottT: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The microprocessor is the heart of the 2007 robojackets robocup competition robot and acts as the interface between the wireless communication system and the robot proper. A simple firmware program monitoring the internal sensors of the robot and controling the motor and ball roller/shoot will run on the micro. Currently as part of our phase one objectives we are looking closly at processors from Atmel, SI Labs, Motorola, and PICs. Below are some specs.&lt;br /&gt;
==The Wall==&lt;br /&gt;
9/14/06 - We chose a dev kit see the sparkfun link below. It'll cost $64.95 a pop and we are getting 3.&lt;br /&gt;
&lt;br /&gt;
==To Do==&lt;br /&gt;
*Finalize number of I/O and type (SPI, PWM, ADC, etc)&lt;br /&gt;
*Design Schematic tying in all devices&lt;br /&gt;
*Breadboard to test write simple code&lt;br /&gt;
*Get board made&lt;br /&gt;
*Write Code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Specifications==&lt;br /&gt;
{| style=&amp;quot;text-align:center;&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090;&amp;quot; | Device &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 32-bit microprocessor&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Power&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 3.3V Low pwt&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Archetecture &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | ARM&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Clock&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | &amp;gt;50 MHz&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Memory&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Flash 128Kb &lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | IO pins &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 32-64 pins Software Configurable&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Interfaces &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | SPI, UART&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | DA/AD &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | (3)10-bit DAC (2)10/16-bit ADC&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Timers &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 8-bit (3)&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | PWM &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 4 channels&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Programming &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | JTAG or Bootloader&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; background:#909090&amp;quot; | &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; background:#d0d0d0&amp;quot; | &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Schematics==&lt;br /&gt;
Schematics&lt;br /&gt;
==Articles==&lt;br /&gt;
*[http://direct.xilinx.com/bvdocs/whitepapers/wp123.pdf Article on Interfacing ARM processors and FPGAs]&lt;br /&gt;
*[http://tech.groups.yahoo.com/group/lpc2000/ Yahoo group about just the LPC ARM from Phillips]&lt;br /&gt;
&lt;br /&gt;
==Possible Micros==&lt;br /&gt;
Phillips LPC &lt;br /&gt;
*[http://www.sparkfun.com/commerce/product_info.php?products_id=266 Sparkfun dev kit] &lt;br /&gt;
*[http://www.standardics.nxp.com/literature/leaflets/microcontrollers/pdf/lpc213x.pdf Phillips LPC213x series ARMs. Less memory than the LPC221x series but lower-power consumption and smaller footprint. Its still every bit as capable]&lt;br /&gt;
*[http://www.nxp.com/acrobat_download/literature/9397/75014627.pdf Phillips LPC221x series ARMs. More memory vs LPC2213x. COntains everything we need.]&lt;br /&gt;
*[http://www.lpctools.com/index.asp?PageAction=VIEWPROD&amp;amp;ProdID=54 Dev kit for LPC213x series $149.00. 2 issues: Do we have a JTAG programmer and if so will it fit the pin-out of this device?]&lt;br /&gt;
AVR32&lt;br /&gt;
*[http://www.atmel.com/products/AVR32/ ATMEL's answer to the ARM. Has everything '''including''' the kitchen sink.]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
*[http://www.skyeye.org/index.shtml ARM processor simulator for Linux] - might be able to use this to test things, but I'm not sure it would be better than just taking home a dev board. :P [[User:ScottT|ScottT]]&lt;br /&gt;
*[http://www.open-research.org.uk/ARMuC/ ARM Wiki] - Good page with a lot of ARM resources/links. [[User:ScottT|ScottT]]&lt;br /&gt;
*[http://www.heyrick.co.uk/assembler/qfinder.html Page of ARM processor instructions] - ASSEMBLY instructions, if we need them. [[User:ScottT|ScottT]]&lt;br /&gt;
*[http://www.arm.com/support/training/type4680.html Apparently free ARM course] - Not sure how useful this could be. [[User:ScottT|ScottT]]&lt;br /&gt;
*[[RCfirmware|Firmware]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[RobocupElectrical|Electrical Homepage]]&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=RCmicro&amp;diff=3282</id>
		<title>RCmicro</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=RCmicro&amp;diff=3282"/>
		<updated>2006-09-20T01:51:33Z</updated>

		<summary type="html">&lt;p&gt;ScottT: /* Links */  - need to use the preview button more...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The microprocessor is the heart of the 2007 robojackets robocup competition robot and acts as the interface between the wireless communication system and the robot proper. A simple firmware program monitoring the internal sensors of the robot and controling the motor and ball roller/shoot will run on the micro. Currently as part of our phase one objectives we are looking closly at processors from Atmel, SI Labs, Motorola, and PICs. Below are some specs.&lt;br /&gt;
==The Wall==&lt;br /&gt;
9/14/06 - We chose a dev kit see the sparkfun link below. It'll cost $64.95 a pop and we are getting 3.&lt;br /&gt;
&lt;br /&gt;
==To Do==&lt;br /&gt;
*Finalize number of I/O and type (SPI, PWM, ADC, etc)&lt;br /&gt;
*Design Schematic tying in all devices&lt;br /&gt;
*Breadboard to test write simple code&lt;br /&gt;
*Get board made&lt;br /&gt;
*Write Code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Specifications==&lt;br /&gt;
{| style=&amp;quot;text-align:center;&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090;&amp;quot; | Device &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 32-bit microprocessor&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Power&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 3.3V Low pwt&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Archetecture &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | ARM&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Clock&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | &amp;gt;50 MHz&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Memory&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Flash 128Kb &lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | IO pins &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 32-64 pins Software Configurable&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Interfaces &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | SPI, UART&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | DA/AD &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | (3)10-bit DAC (2)10/16-bit ADC&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Timers &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 8-bit (3)&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | PWM &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 4 channels&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Programming &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | JTAG or Bootloader&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; background:#909090&amp;quot; | &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; background:#d0d0d0&amp;quot; | &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Schematics==&lt;br /&gt;
Schematics&lt;br /&gt;
==Articles==&lt;br /&gt;
*[http://direct.xilinx.com/bvdocs/whitepapers/wp123.pdf Article on Interfacing ARM processors and FPGAs]&lt;br /&gt;
*[http://tech.groups.yahoo.com/group/lpc2000/ Yahoo group about just the LPC ARM from Phillips]&lt;br /&gt;
&lt;br /&gt;
==Possible Micros==&lt;br /&gt;
Phillips LPC &lt;br /&gt;
*[http://www.sparkfun.com/commerce/product_info.php?products_id=266 Sparkfun dev kit] &lt;br /&gt;
*[http://www.standardics.nxp.com/literature/leaflets/microcontrollers/pdf/lpc213x.pdf Phillips LPC213x series ARMs. Less memory than the LPC221x series but lower-power consumption and smaller footprint. Its still every bit as capable]&lt;br /&gt;
*[http://www.nxp.com/acrobat_download/literature/9397/75014627.pdf Phillips LPC221x series ARMs. More memory vs LPC2213x. COntains everything we need.]&lt;br /&gt;
*[http://www.lpctools.com/index.asp?PageAction=VIEWPROD&amp;amp;ProdID=54 Dev kit for LPC213x series $149.00. 2 issues: Do we have a JTAG programmer and if so will it fit the pin-out of this device?]&lt;br /&gt;
AVR32&lt;br /&gt;
*[http://www.atmel.com/products/AVR32/ ATMEL's answer to the ARM. Has everything '''including''' the kitchen sink.]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
*[http://www.skyeye.org/index.shtml ARM processor simulator for Linux] - might be able to use this to test things, but I'm not sure it would be better than just taking home a dev board. :P [[User:ScottT|ScottT]]&lt;br /&gt;
*[http://www.open-research.org.uk/ARMuC/ ARM Wiki] - Good page with a lot of ARM resources/links. [[User:ScottT|ScottT]]&lt;br /&gt;
*[http://www.heyrick.co.uk/assembler/qfinder.html Page of ARM processor instructions]&lt;br /&gt;
*[http://www.arm.com/support/training/type4680.html Apparently free ARM course] - Not sure how useful this could be. [[User:ScottT|ScottT]]&lt;br /&gt;
*[[RCfirmware|Firmware]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[RobocupElectrical|Electrical Homepage]]&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=RCmicro&amp;diff=3281</id>
		<title>RCmicro</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=RCmicro&amp;diff=3281"/>
		<updated>2006-09-20T01:50:09Z</updated>

		<summary type="html">&lt;p&gt;ScottT: /* Links */  - ARM processor simulator&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The microprocessor is the heart of the 2007 robojackets robocup competition robot and acts as the interface between the wireless communication system and the robot proper. A simple firmware program monitoring the internal sensors of the robot and controling the motor and ball roller/shoot will run on the micro. Currently as part of our phase one objectives we are looking closly at processors from Atmel, SI Labs, Motorola, and PICs. Below are some specs.&lt;br /&gt;
==The Wall==&lt;br /&gt;
9/14/06 - We chose a dev kit see the sparkfun link below. It'll cost $64.95 a pop and we are getting 3.&lt;br /&gt;
&lt;br /&gt;
==To Do==&lt;br /&gt;
*Finalize number of I/O and type (SPI, PWM, ADC, etc)&lt;br /&gt;
*Design Schematic tying in all devices&lt;br /&gt;
*Breadboard to test write simple code&lt;br /&gt;
*Get board made&lt;br /&gt;
*Write Code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Specifications==&lt;br /&gt;
{| style=&amp;quot;text-align:center;&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090;&amp;quot; | Device &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 32-bit microprocessor&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Power&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 3.3V Low pwt&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Archetecture &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | ARM&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Clock&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | &amp;gt;50 MHz&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Memory&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Flash 128Kb &lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | IO pins &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 32-64 pins Software Configurable&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Interfaces &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | SPI, UART&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | DA/AD &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | (3)10-bit DAC (2)10/16-bit ADC&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Timers &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 8-bit (3)&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | PWM &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 4 channels&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Programming &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | JTAG or Bootloader&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; background:#909090&amp;quot; | &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; background:#d0d0d0&amp;quot; | &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Schematics==&lt;br /&gt;
Schematics&lt;br /&gt;
==Articles==&lt;br /&gt;
*[http://direct.xilinx.com/bvdocs/whitepapers/wp123.pdf Article on Interfacing ARM processors and FPGAs]&lt;br /&gt;
*[http://tech.groups.yahoo.com/group/lpc2000/ Yahoo group about just the LPC ARM from Phillips]&lt;br /&gt;
&lt;br /&gt;
==Possible Micros==&lt;br /&gt;
Phillips LPC &lt;br /&gt;
*[http://www.sparkfun.com/commerce/product_info.php?products_id=266 Sparkfun dev kit] &lt;br /&gt;
*[http://www.standardics.nxp.com/literature/leaflets/microcontrollers/pdf/lpc213x.pdf Phillips LPC213x series ARMs. Less memory than the LPC221x series but lower-power consumption and smaller footprint. Its still every bit as capable]&lt;br /&gt;
*[http://www.nxp.com/acrobat_download/literature/9397/75014627.pdf Phillips LPC221x series ARMs. More memory vs LPC2213x. COntains everything we need.]&lt;br /&gt;
*[http://www.lpctools.com/index.asp?PageAction=VIEWPROD&amp;amp;ProdID=54 Dev kit for LPC213x series $149.00. 2 issues: Do we have a JTAG programmer and if so will it fit the pin-out of this device?]&lt;br /&gt;
AVR32&lt;br /&gt;
*[http://www.atmel.com/products/AVR32/ ATMEL's answer to the ARM. Has everything '''including''' the kitchen sink.]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* [http://www.skyeye.org/index.shtml] ARM processor simulator for Linux - might be able to use this to test things, but I'm not sure it would be better than just taking home a dev board. :P [[User:ScottT|ScottT]]&lt;br /&gt;
*[http://www.open-research.org.uk/ARMuC/ ARM Wiki] - Good page with a lot of ARM resources/links. [[User:ScottT|ScottT]]&lt;br /&gt;
*[http://www.heyrick.co.uk/assembler/qfinder.html Page of ARM processor instructions]&lt;br /&gt;
*[http://www.arm.com/support/training/type4680.html Apparently free ARM course] - Not sure how useful this could be. [[User:ScottT|ScottT]]&lt;br /&gt;
*[[RCfirmware|Firmware]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[RobocupElectrical|Electrical Homepage]]&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=RoboCup&amp;diff=3278</id>
		<title>RoboCup</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=RoboCup&amp;diff=3278"/>
		<updated>2006-09-19T04:40:00Z</updated>

		<summary type="html">&lt;p&gt;ScottT: /* Announcements */  - New links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Robocup.jpg|thumb|350px|right|Apologies Somethingawful.com]]&lt;br /&gt;
&lt;br /&gt;
Welcome to the '''[http://www.gatech.edu/ Georgia Tech]''' '''[http://www.robojackets.org/ Robojackets]''' '''[http://www.robocup.org/ RoboCup]''' wiki! &lt;br /&gt;
We meet weekly on Monday and Thursday at 6PM in the [http://gtalumni.org/campusmap/ Tin Building] (building #48 on the map - Mechanical Engineering Research Building) though the meeting time may change this summer.&lt;br /&gt;
&lt;br /&gt;
==Announcements==&lt;br /&gt;
* 09/19/06 Added some ARM programming/reference links to the [[RCmicro|Microcontroller]] page. [[User:ScottT|ScottT]] 00:40, 19 September 2006 (EDT)&lt;br /&gt;
* 09/04/06 Finished protocol design still needs some tweak, input is welcome. Moving on to motion system. Oh yeah we need a name for our team or should RoboJackets suffice?--[[USER:Marksp|Phillip]]&lt;br /&gt;
* 08/08/06 Finally put down on paper and wiki the protocol design. Will add some more pics and give more detail as time goes on. Next up wireless hardware. --[[USER:Marksp|Phillip]]&lt;br /&gt;
* 05/31/06 Would someone (I think Phil or Ryan) please email or post the general roadmap so the other teams can add it to their page?&lt;br /&gt;
* 05/06/06 Found a mailing list for small size hosted by the CoC [https://mailman.cc.gatech.edu/mailman/listinfo/robocup-small here]&lt;br /&gt;
&lt;br /&gt;
* 04/18/06 The RoboCup US Open will be held this weekend at Georgia Tech see this website for details: http://www.robocup-us.org/&lt;br /&gt;
&lt;br /&gt;
==Important Items==&lt;br /&gt;
*'''[http://www.cs.cmu.edu/~brettb/robocup/rules/f180rules2006.html Official Rules]&lt;br /&gt;
* '''[[General Project Roadmap]]'''&lt;br /&gt;
* [[USOpen notes]]&lt;br /&gt;
* [http://www.cs.uml.edu/~holly/91.549/readings/tla.pdf On Three Layer Architecture (the article Andy sent out)]&lt;br /&gt;
&lt;br /&gt;
== Systems ==&lt;br /&gt;
* [[RobocupElectrical|Electrical System Information]]&lt;br /&gt;
** [[RCMotion|Motion Control]]&lt;br /&gt;
** [[RCcoms|Communication (Wireless/Wired)]]&lt;br /&gt;
***[[RCwiproc|Wireless Protocol]]&lt;br /&gt;
***[[RCwicoprocessor|Wireless Co-processor]]&lt;br /&gt;
** [[RCsensors|Sensors]]&lt;br /&gt;
** [[RCmicro|Microprocessor]]&lt;br /&gt;
** [[RCpower|Power]]&lt;br /&gt;
** [[RCmotor|Motor System]]&lt;br /&gt;
** [[RCroller_shooter|Roller/Shooter]]&lt;br /&gt;
* [[RobocupVision|Vision System Information]]&lt;br /&gt;
** [[RCCamera|Robocup Image Acquisition]]&lt;br /&gt;
** [[RCVisSoftware|Robocup Image Processing]]&lt;br /&gt;
* [[RobocupSoftware|Software System Information]]&lt;br /&gt;
* [[RobocupMechanical|Mechanical System Information]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* [http://www.cs.cmu.edu/~brettb/robocup/#movies Small size resource page] - link dump, very good!!!&lt;br /&gt;
* [http://robocup.mae.cornell.edu/ Cornell Big Red] very good technical documentation!! Check out the ME writeups!&lt;br /&gt;
* [http://www.cs.cmu.edu/~robosoccer/small CMU webpage - great resource]&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=RCmicro&amp;diff=3277</id>
		<title>RCmicro</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=RCmicro&amp;diff=3277"/>
		<updated>2006-09-19T04:20:31Z</updated>

		<summary type="html">&lt;p&gt;ScottT: /* Links */  - ARM Wiki link. Reorganized links.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The microprocessor is the heart of the 2007 robojackets robocup competition robot and acts as the interface between the wireless communication system and the robot proper. A simple firmware program monitoring the internal sensors of the robot and controling the motor and ball roller/shoot will run on the micro. Currently as part of our phase one objectives we are looking closly at processors from Atmel, SI Labs, Motorola, and PICs. Below are some specs.&lt;br /&gt;
==The Wall==&lt;br /&gt;
9/14/06 - We chose a dev kit see the sparkfun link below. It'll cost $64.95 a pop and we are getting 3.&lt;br /&gt;
&lt;br /&gt;
==To Do==&lt;br /&gt;
*Finalize number of I/O and type (SPI, PWM, ADC, etc)&lt;br /&gt;
*Design Schematic tying in all devices&lt;br /&gt;
*Breadboard to test write simple code&lt;br /&gt;
*Get board made&lt;br /&gt;
*Write Code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Specifications==&lt;br /&gt;
{| style=&amp;quot;text-align:center;&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090;&amp;quot; | Device &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 32-bit microprocessor&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Power&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 3.3V Low pwt&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Archetecture &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | ARM&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Clock&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | &amp;gt;50 MHz&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Memory&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Flash 128Kb &lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | IO pins &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 32-64 pins Software Configurable&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Interfaces &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | SPI, UART&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | DA/AD &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | (3)10-bit DAC (2)10/16-bit ADC&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Timers &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 8-bit (3)&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | PWM &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 4 channels&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Programming &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | JTAG or Bootloader&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; background:#909090&amp;quot; | &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; background:#d0d0d0&amp;quot; | &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Schematics==&lt;br /&gt;
Schematics&lt;br /&gt;
==Articles==&lt;br /&gt;
*[http://direct.xilinx.com/bvdocs/whitepapers/wp123.pdf Article on Interfacing ARM processors and FPGAs]&lt;br /&gt;
*[http://tech.groups.yahoo.com/group/lpc2000/ Yahoo group about just the LPC ARM from Phillips]&lt;br /&gt;
&lt;br /&gt;
==Possible Micros==&lt;br /&gt;
Phillips LPC &lt;br /&gt;
*[http://www.sparkfun.com/commerce/product_info.php?products_id=266 Sparkfun dev kit] &lt;br /&gt;
*[http://www.standardics.nxp.com/literature/leaflets/microcontrollers/pdf/lpc213x.pdf Phillips LPC213x series ARMs. Less memory than the LPC221x series but lower-power consumption and smaller footprint. Its still every bit as capable]&lt;br /&gt;
*[http://www.nxp.com/acrobat_download/literature/9397/75014627.pdf Phillips LPC221x series ARMs. More memory vs LPC2213x. COntains everything we need.]&lt;br /&gt;
*[http://www.lpctools.com/index.asp?PageAction=VIEWPROD&amp;amp;ProdID=54 Dev kit for LPC213x series $149.00. 2 issues: Do we have a JTAG programmer and if so will it fit the pin-out of this device?]&lt;br /&gt;
AVR32&lt;br /&gt;
*[http://www.atmel.com/products/AVR32/ ATMEL's answer to the ARM. Has everything '''including''' the kitchen sink.]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
*[http://www.open-research.org.uk/ARMuC/ ARM Wiki] - Good page with a lot of ARM resources/links. [[User:ScottT|ScottT]]&lt;br /&gt;
*[http://www.heyrick.co.uk/assembler/qfinder.html Page of ARM processor instructions]&lt;br /&gt;
*[http://www.arm.com/support/training/type4680.html Apparently free ARM course] - Not sure how useful this could be. [[User:ScottT|ScottT]]&lt;br /&gt;
*[[RCfirmware|Firmware]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[RobocupElectrical|Electrical Homepage]]&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=RCmicro&amp;diff=3276</id>
		<title>RCmicro</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=RCmicro&amp;diff=3276"/>
		<updated>2006-09-19T04:09:08Z</updated>

		<summary type="html">&lt;p&gt;ScottT: /* Links */  Added link to online ARM course&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The microprocessor is the heart of the 2007 robojackets robocup competition robot and acts as the interface between the wireless communication system and the robot proper. A simple firmware program monitoring the internal sensors of the robot and controling the motor and ball roller/shoot will run on the micro. Currently as part of our phase one objectives we are looking closly at processors from Atmel, SI Labs, Motorola, and PICs. Below are some specs.&lt;br /&gt;
==The Wall==&lt;br /&gt;
9/14/06 - We chose a dev kit see the sparkfun link below. It'll cost $64.95 a pop and we are getting 3.&lt;br /&gt;
&lt;br /&gt;
==To Do==&lt;br /&gt;
*Finalize number of I/O and type (SPI, PWM, ADC, etc)&lt;br /&gt;
*Design Schematic tying in all devices&lt;br /&gt;
*Breadboard to test write simple code&lt;br /&gt;
*Get board made&lt;br /&gt;
*Write Code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Specifications==&lt;br /&gt;
{| style=&amp;quot;text-align:center;&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090;&amp;quot; | Device &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 32-bit microprocessor&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Power&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 3.3V Low pwt&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Archetecture &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | ARM&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Clock&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | &amp;gt;50 MHz&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Memory&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Flash 128Kb &lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | IO pins &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 32-64 pins Software Configurable&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Interfaces &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | SPI, UART&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | DA/AD &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | (3)10-bit DAC (2)10/16-bit ADC&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Timers &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 8-bit (3)&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | PWM &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 4 channels&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Programming &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | JTAG or Bootloader&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; background:#909090&amp;quot; | &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; background:#d0d0d0&amp;quot; | &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Schematics==&lt;br /&gt;
Schematics&lt;br /&gt;
==Articles==&lt;br /&gt;
*[http://direct.xilinx.com/bvdocs/whitepapers/wp123.pdf Article on Interfacing ARM processors and FPGAs]&lt;br /&gt;
*[http://tech.groups.yahoo.com/group/lpc2000/ Yahoo group about just the LPC ARM from Phillips]&lt;br /&gt;
&lt;br /&gt;
==Possible Micros==&lt;br /&gt;
Phillips LPC &lt;br /&gt;
*[http://www.sparkfun.com/commerce/product_info.php?products_id=266 Sparkfun dev kit] &lt;br /&gt;
*[http://www.standardics.nxp.com/literature/leaflets/microcontrollers/pdf/lpc213x.pdf Phillips LPC213x series ARMs. Less memory than the LPC221x series but lower-power consumption and smaller footprint. Its still every bit as capable]&lt;br /&gt;
*[http://www.nxp.com/acrobat_download/literature/9397/75014627.pdf Phillips LPC221x series ARMs. More memory vs LPC2213x. COntains everything we need.]&lt;br /&gt;
*[http://www.lpctools.com/index.asp?PageAction=VIEWPROD&amp;amp;ProdID=54 Dev kit for LPC213x series $149.00. 2 issues: Do we have a JTAG programmer and if so will it fit the pin-out of this device?]&lt;br /&gt;
AVR32&lt;br /&gt;
*[http://www.atmel.com/products/AVR32/ ATMEL's answer to the ARM. Has everything '''including''' the kitchen sink.]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
*[[RCfirmware|Firmware]]&lt;br /&gt;
*[http://www.heyrick.co.uk/assembler/qfinder.html Page of ARM processor instructions]&lt;br /&gt;
*[http://www.arm.com/support/training/type4680.html Apparently free ARM course] - Not sure how useful this could be. [[User:ScottT|Scott]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[RobocupElectrical|Electrical Homepage]]&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=RCmicro&amp;diff=3275</id>
		<title>RCmicro</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=RCmicro&amp;diff=3275"/>
		<updated>2006-09-19T04:03:16Z</updated>

		<summary type="html">&lt;p&gt;ScottT: /* Links */  - Fixing link... learning WikiCode...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The microprocessor is the heart of the 2007 robojackets robocup competition robot and acts as the interface between the wireless communication system and the robot proper. A simple firmware program monitoring the internal sensors of the robot and controling the motor and ball roller/shoot will run on the micro. Currently as part of our phase one objectives we are looking closly at processors from Atmel, SI Labs, Motorola, and PICs. Below are some specs.&lt;br /&gt;
==The Wall==&lt;br /&gt;
9/14/06 - We chose a dev kit see the sparkfun link below. It'll cost $64.95 a pop and we are getting 3.&lt;br /&gt;
&lt;br /&gt;
==To Do==&lt;br /&gt;
*Finalize number of I/O and type (SPI, PWM, ADC, etc)&lt;br /&gt;
*Design Schematic tying in all devices&lt;br /&gt;
*Breadboard to test write simple code&lt;br /&gt;
*Get board made&lt;br /&gt;
*Write Code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Specifications==&lt;br /&gt;
{| style=&amp;quot;text-align:center;&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090;&amp;quot; | Device &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 32-bit microprocessor&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Power&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 3.3V Low pwt&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Archetecture &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | ARM&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Clock&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | &amp;gt;50 MHz&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Memory&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Flash 128Kb &lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | IO pins &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 32-64 pins Software Configurable&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Interfaces &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | SPI, UART&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | DA/AD &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | (3)10-bit DAC (2)10/16-bit ADC&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Timers &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 8-bit (3)&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | PWM &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 4 channels&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Programming &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | JTAG or Bootloader&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; background:#909090&amp;quot; | &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; background:#d0d0d0&amp;quot; | &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Schematics==&lt;br /&gt;
Schematics&lt;br /&gt;
==Articles==&lt;br /&gt;
*[http://direct.xilinx.com/bvdocs/whitepapers/wp123.pdf Article on Interfacing ARM processors and FPGAs]&lt;br /&gt;
*[http://tech.groups.yahoo.com/group/lpc2000/ Yahoo group about just the LPC ARM from Phillips]&lt;br /&gt;
&lt;br /&gt;
==Possible Micros==&lt;br /&gt;
Phillips LPC &lt;br /&gt;
*[http://www.sparkfun.com/commerce/product_info.php?products_id=266 Sparkfun dev kit] &lt;br /&gt;
*[http://www.standardics.nxp.com/literature/leaflets/microcontrollers/pdf/lpc213x.pdf Phillips LPC213x series ARMs. Less memory than the LPC221x series but lower-power consumption and smaller footprint. Its still every bit as capable]&lt;br /&gt;
*[http://www.nxp.com/acrobat_download/literature/9397/75014627.pdf Phillips LPC221x series ARMs. More memory vs LPC2213x. COntains everything we need.]&lt;br /&gt;
*[http://www.lpctools.com/index.asp?PageAction=VIEWPROD&amp;amp;ProdID=54 Dev kit for LPC213x series $149.00. 2 issues: Do we have a JTAG programmer and if so will it fit the pin-out of this device?]&lt;br /&gt;
AVR32&lt;br /&gt;
*[http://www.atmel.com/products/AVR32/ ATMEL's answer to the ARM. Has everything '''including''' the kitchen sink.]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
*[[RCfirmware|Firmware]]&lt;br /&gt;
*[http://www.heyrick.co.uk/assembler/qfinder.html Page of ARM processor instructions]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[RobocupElectrical|Electrical Homepage]]&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=RCmicro&amp;diff=3274</id>
		<title>RCmicro</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=RCmicro&amp;diff=3274"/>
		<updated>2006-09-19T04:02:07Z</updated>

		<summary type="html">&lt;p&gt;ScottT: /* Links */  - Added ARM processor instruction page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The microprocessor is the heart of the 2007 robojackets robocup competition robot and acts as the interface between the wireless communication system and the robot proper. A simple firmware program monitoring the internal sensors of the robot and controling the motor and ball roller/shoot will run on the micro. Currently as part of our phase one objectives we are looking closly at processors from Atmel, SI Labs, Motorola, and PICs. Below are some specs.&lt;br /&gt;
==The Wall==&lt;br /&gt;
9/14/06 - We chose a dev kit see the sparkfun link below. It'll cost $64.95 a pop and we are getting 3.&lt;br /&gt;
&lt;br /&gt;
==To Do==&lt;br /&gt;
*Finalize number of I/O and type (SPI, PWM, ADC, etc)&lt;br /&gt;
*Design Schematic tying in all devices&lt;br /&gt;
*Breadboard to test write simple code&lt;br /&gt;
*Get board made&lt;br /&gt;
*Write Code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Specifications==&lt;br /&gt;
{| style=&amp;quot;text-align:center;&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090;&amp;quot; | Device &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | 32-bit microprocessor&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Power&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 3.3V Low pwt&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Archetecture &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | ARM&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Clock&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | &amp;gt;50 MHz&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Memory&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Flash 128Kb &lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | IO pins &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 32-64 pins Software Configurable&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Interfaces &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | SPI, UART&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | DA/AD &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | (3)10-bit DAC (2)10/16-bit ADC&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Timers &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 8-bit (3)&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | PWM &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 4 channels&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Programming &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | JTAG or Bootloader&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; background:#909090&amp;quot; | &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; background:#d0d0d0&amp;quot; | &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Schematics==&lt;br /&gt;
Schematics&lt;br /&gt;
==Articles==&lt;br /&gt;
*[http://direct.xilinx.com/bvdocs/whitepapers/wp123.pdf Article on Interfacing ARM processors and FPGAs]&lt;br /&gt;
*[http://tech.groups.yahoo.com/group/lpc2000/ Yahoo group about just the LPC ARM from Phillips]&lt;br /&gt;
&lt;br /&gt;
==Possible Micros==&lt;br /&gt;
Phillips LPC &lt;br /&gt;
*[http://www.sparkfun.com/commerce/product_info.php?products_id=266 Sparkfun dev kit] &lt;br /&gt;
*[http://www.standardics.nxp.com/literature/leaflets/microcontrollers/pdf/lpc213x.pdf Phillips LPC213x series ARMs. Less memory than the LPC221x series but lower-power consumption and smaller footprint. Its still every bit as capable]&lt;br /&gt;
*[http://www.nxp.com/acrobat_download/literature/9397/75014627.pdf Phillips LPC221x series ARMs. More memory vs LPC2213x. COntains everything we need.]&lt;br /&gt;
*[http://www.lpctools.com/index.asp?PageAction=VIEWPROD&amp;amp;ProdID=54 Dev kit for LPC213x series $149.00. 2 issues: Do we have a JTAG programmer and if so will it fit the pin-out of this device?]&lt;br /&gt;
AVR32&lt;br /&gt;
*[http://www.atmel.com/products/AVR32/ ATMEL's answer to the ARM. Has everything '''including''' the kitchen sink.]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
*[[RCfirmware|Firmware]]&lt;br /&gt;
*[[http://www.heyrick.co.uk/assembler/qfinder.html|Page of ARM processor instructions]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[RobocupElectrical|Electrical Homepage]]&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=RCroller_shooter&amp;diff=2942</id>
		<title>RCroller shooter</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=RCroller_shooter&amp;diff=2942"/>
		<updated>2006-07-02T15:21:49Z</updated>

		<summary type="html">&lt;p&gt;ScottT: /* The Wall */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In order to dribble and shoot the ball each robot needs a roller and shooter device. There are several methods to accomplish this as of yet none have been chosen.&lt;br /&gt;
==The Wall==&lt;br /&gt;
07/02/06 - Just shooting off some ideas here. I read that the CMU team uses three(!) charged capacitors at 200V to drive a custom solonoid and that their shooting can hit the ball at around 35mph... that's ~ 51.3ft/s, 15.65m/s, or 1565cm/s. Do we even have a camera in mind that can capture anything near that fast? More importantly, do they, really? It says they have the smallest 3CCD &amp;quot;prosumer&amp;quot; comcorder from sony... I really don't think that's a crazy-fast FPS camera, so perhaps that's something to consider (that is, worrying more about where the ball is '''likely to go''' rather than where exactly it is while the other team has it). As for the shooter itself, I don't know much about solonoids, but I'll be looking those up soon. I did, however, have a quick idea about what we might could do... I don't know how feasible it would be, but maybe a small device that acts somewhat like a rail gun could be used. We'd take a small metal rod, hook it up so that it can't shoot out the front of the robot, then put it in a tunnel of small coils connected to some capacitors. When the capacitors drain, the coils would propel the rod like 1-1.5 inches out of the robot to hit the ball. It's probably not practical by any means... so I'm looking into other possible solutions as well. ;) -- [[User:ScottT|ScottT]] 11:21, 2 July 2006 (EDT)&lt;br /&gt;
&lt;br /&gt;
==To Do==&lt;br /&gt;
*Determine how roller and shooter will work&lt;br /&gt;
&lt;br /&gt;
==Specs-Shooter==&lt;br /&gt;
{| style=&amp;quot;text-align:center;&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090;&amp;quot; | Device&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Driver for shooter&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Drive Power&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | ?&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Logic Voltage&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 3.3V&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Configuration&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Low-Side&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; background:#909090&amp;quot; | Package &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; background:#d0d0d0&amp;quot; | SOIC or PO-SOIC&lt;br /&gt;
|}&lt;br /&gt;
==Schematics==&lt;br /&gt;
Schematics&lt;br /&gt;
==Shooter Drivers==&lt;br /&gt;
*[http://focus.ti.com/lit/ds/symlink/drv103.pdf TI Solenoid driver, Overcurrent protection, 3A]&lt;br /&gt;
*[http://focus.ti.com/lit/ds/symlink/drv102.pdf TI Solenoid driver, Overcurrent protection 2.7A]&lt;br /&gt;
*[http://www.st.com/stonline/books/pdf/docs/1332.pdf ST Micro Dual Switch mode Solenoid Driver, 2.5A@40V]&lt;br /&gt;
&lt;br /&gt;
==Articles==&lt;br /&gt;
==Links==&lt;br /&gt;
[[RobocupElectrical|Electrical Homepage]]&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=RCroller_shooter&amp;diff=2941</id>
		<title>RCroller shooter</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=RCroller_shooter&amp;diff=2941"/>
		<updated>2006-07-02T15:19:21Z</updated>

		<summary type="html">&lt;p&gt;ScottT: /* The Wall */  - ideas/comments&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In order to dribble and shoot the ball each robot needs a roller and shooter device. There are several methods to accomplish this as of yet none have been chosen.&lt;br /&gt;
==The Wall==&lt;br /&gt;
07/02/06 - Just shooting off some ideas here. I read that the CMU team uses three(!) charged capacitors at 200V to drive a custom solonoid and that their shooting can hit the ball at around 35mph... that's ~ 51.3ft/s, 15.65m/s, or 1565cm/s. Do we even have a camera in mind that can capture anything near that fast? More importantly, do they, really? It says they have the smallest 3CCD &amp;quot;prosumer&amp;quot; comcorder from sony... I really don't think that's a crazy-fast FPS camera, so perhaps that's something to consider (that is, worrying more about where the ball is '''likely to go''' rather than where exactly it is while the other team has it). As for the shooter itself, I don't know much about solonoids, but I'll be looking those up soon. I did, however, have a quick idea about what we might could do... I don't know how feasible it would be, but maybe a small device that acts somewhat like a rail gun could be used. We'd take a small metal rod, hook it up so that it can't shoot out the front of the robot, then put it in a tunnel of small coils connected to some capacitors. When the capacitors drain, the coils would propel the rod like 1-1.5 inches out of the robot to hit the ball. It's probably not practical by any means... so I'm looking into other possible solutions as well. ;) -Scott&lt;br /&gt;
&lt;br /&gt;
==To Do==&lt;br /&gt;
*Determine how roller and shooter will work&lt;br /&gt;
&lt;br /&gt;
==Specs-Shooter==&lt;br /&gt;
{| style=&amp;quot;text-align:center;&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090;&amp;quot; | Device&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0;&amp;quot; | Driver for shooter&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Drive Power&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | ?&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Logic Voltage&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | 3.3V&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#909090&amp;quot; | Configuration&lt;br /&gt;
| style=&amp;quot;border:.5px solid black; border-bottom:0px; background:#d0d0d0&amp;quot; | Low-Side&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border:.5px solid black; background:#909090&amp;quot; | Package &lt;br /&gt;
| style=&amp;quot;border:.5px solid black; background:#d0d0d0&amp;quot; | SOIC or PO-SOIC&lt;br /&gt;
|}&lt;br /&gt;
==Schematics==&lt;br /&gt;
Schematics&lt;br /&gt;
==Shooter Drivers==&lt;br /&gt;
*[http://focus.ti.com/lit/ds/symlink/drv103.pdf TI Solenoid driver, Overcurrent protection, 3A]&lt;br /&gt;
*[http://focus.ti.com/lit/ds/symlink/drv102.pdf TI Solenoid driver, Overcurrent protection 2.7A]&lt;br /&gt;
*[http://www.st.com/stonline/books/pdf/docs/1332.pdf ST Micro Dual Switch mode Solenoid Driver, 2.5A@40V]&lt;br /&gt;
&lt;br /&gt;
==Articles==&lt;br /&gt;
==Links==&lt;br /&gt;
[[RobocupElectrical|Electrical Homepage]]&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=RoboCupElectrical&amp;diff=2422</id>
		<title>RoboCupElectrical</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=RoboCupElectrical&amp;diff=2422"/>
		<updated>2006-04-17T03:01:59Z</updated>

		<summary type="html">&lt;p&gt;ScottT: Just... Don't ask...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==The Electrical System==&lt;br /&gt;
The electrical system includes all the hardware based on the robot, the host computer, the wireless system, and robot firmware. The objective for the 2007 competition is to create a strong base on which to build future teams. In order to guide us towards that goal we have broken the project up into 5 distinct phases.&lt;br /&gt;
* Phase One&lt;br /&gt;
** Function description of hardware (Completed)&lt;br /&gt;
** Evaluate and specify parts &lt;br /&gt;
** Circuit design&lt;br /&gt;
** Build schematic for electrical system&lt;br /&gt;
* Phase Two&lt;br /&gt;
** Begin firmware design&lt;br /&gt;
** Purchase prototype parts and board&lt;br /&gt;
** Build two prototype boards&lt;br /&gt;
** Evaluate performance of prototype&lt;br /&gt;
* Phase Three&lt;br /&gt;
** Secure founding for full production run.&lt;br /&gt;
* Phase Four&lt;br /&gt;
** Up schematic and board to rev 2 based on phase two results&lt;br /&gt;
** Purchase parts for full run of robots&lt;br /&gt;
** Build 10 boards&lt;br /&gt;
** Test and debug&lt;br /&gt;
*Phase Five &lt;br /&gt;
**more revisons if neccesary&lt;br /&gt;
** Debug &lt;br /&gt;
Currently we are in phase one. We have just completed a functional description of the electrical system and are now evaluating parts for use in the robot. &lt;br /&gt;
* [[RCcoms|Communication (Wireless/Wired)]]&lt;br /&gt;
* [[RCsensors|Sensors]]&lt;br /&gt;
** [[RCtemp|Temperature]]&lt;br /&gt;
* [[RCmicro|Microprocessor]]&lt;br /&gt;
* [[RCpower|Power]]&lt;br /&gt;
** [[RCbattery|Battery]]&lt;br /&gt;
* [[RCmotor|Motor System]]&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=RoboCupElectrical&amp;diff=2421</id>
		<title>RoboCupElectrical</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=RoboCupElectrical&amp;diff=2421"/>
		<updated>2006-04-17T02:58:22Z</updated>

		<summary type="html">&lt;p&gt;ScottT: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==The Electrical System==&lt;br /&gt;
The electrical system includes all the hardware based on the robot, the host computer, the wireless system, and robot firmware. The objective for the 2007 competition is to create a strong base on which to build future teams. In order to guide us towards that goal we have broken the project up into 5 distinct phases.&lt;br /&gt;
* Phase One&lt;br /&gt;
** Function description of hardware (Completed)&lt;br /&gt;
** Evaluate and specify parts &lt;br /&gt;
** Circuit design&lt;br /&gt;
** Build schematic for electrical system&lt;br /&gt;
* Phase Two&lt;br /&gt;
** Begin firmware design&lt;br /&gt;
** Purchase prototype parts and board&lt;br /&gt;
** Build two prototype boards&lt;br /&gt;
** Evaluate performance of prototype&lt;br /&gt;
* Phase Three&lt;br /&gt;
** Secure founding for full production run.&lt;br /&gt;
* Phase Four&lt;br /&gt;
** Up schematic and board to rev 2 based on phase two results&lt;br /&gt;
** Purchase parts for full run of robots&lt;br /&gt;
** Build 10 boards&lt;br /&gt;
** Test and debug&lt;br /&gt;
*Phase Five &lt;br /&gt;
**more revisons if neccesary&lt;br /&gt;
** Debug &lt;br /&gt;
Currently we are in phase one. We have just completed a functional description of the electrical system and are now evaluating parts for use in the robot. &lt;br /&gt;
* [[Communication (Wireless/Wired) RCcoms]]&lt;br /&gt;
* [[Sensors RCsensors]]&lt;br /&gt;
** [[Temperature RCtemp]]&lt;br /&gt;
* [[Microprocessor RCmicro]]&lt;br /&gt;
* [[Power RCpower]]&lt;br /&gt;
** [[Battery RCbattery]]&lt;br /&gt;
* [[Motor System RCmotor]]&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=RoboCupElectrical&amp;diff=2420</id>
		<title>RoboCupElectrical</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=RoboCupElectrical&amp;diff=2420"/>
		<updated>2006-04-17T02:57:58Z</updated>

		<summary type="html">&lt;p&gt;ScottT: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==The Electrical System==&lt;br /&gt;
The electrical system includes all the hardware based on the robot, the host computer, the wireless system, and robot firmware. The objective for the 2007 competition is to create a strong base on which to build future teams. In order to guide us towards that goal we have broken the project up into 5 distinct phases.&lt;br /&gt;
* Phase One&lt;br /&gt;
** Function description of hardware (Completed)&lt;br /&gt;
** Evaluate and specify parts &lt;br /&gt;
** Circuit design&lt;br /&gt;
** Build schematic for electrical system&lt;br /&gt;
* Phase Two&lt;br /&gt;
** Begin firmware design&lt;br /&gt;
** Purchase prototype parts and board&lt;br /&gt;
** Build two prototype boards&lt;br /&gt;
** Evaluate performance of prototype&lt;br /&gt;
* Phase Three&lt;br /&gt;
** Secure founding for full production run.&lt;br /&gt;
* Phase Four&lt;br /&gt;
** Up schematic and board to rev 2 based on phase two results&lt;br /&gt;
** Purchase parts for full run of robots&lt;br /&gt;
** Build 10 boards&lt;br /&gt;
** Test and debug&lt;br /&gt;
*Phase Five &lt;br /&gt;
**more revisons if neccesary&lt;br /&gt;
** Debug &lt;br /&gt;
Currently we are in phase one. We have just completed a functional description of the electrical system and are now evaluating parts for use in the robot. &lt;br /&gt;
* [Communication (Wireless/Wired) RCcoms]&lt;br /&gt;
* [Sensors RCsensors]&lt;br /&gt;
** [Temperature RCtemp]&lt;br /&gt;
* [Microprocessor RCmicro]&lt;br /&gt;
* [Power RCpower]&lt;br /&gt;
** [Battery RCbattery]&lt;br /&gt;
* [Motor System RCmotor]&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=RoboCupElectrical&amp;diff=2419</id>
		<title>RoboCupElectrical</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=RoboCupElectrical&amp;diff=2419"/>
		<updated>2006-04-17T02:55:40Z</updated>

		<summary type="html">&lt;p&gt;ScottT: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==The Electrical System==&lt;br /&gt;
The electrical system includes all the hardware based on the robot, the host computer, the wireless system, and robot firmware. The objective for the 2007 competition is to create a strong base on which to build future teams. In order to guide us towards that goal we have broken the project up into 5 distinct phases.&lt;br /&gt;
* Phase One&lt;br /&gt;
** Function description of hardware (Completed)&lt;br /&gt;
** Evaluate and specify parts &lt;br /&gt;
** Circuit design&lt;br /&gt;
** Build schematic for electrical system&lt;br /&gt;
* Phase Two&lt;br /&gt;
** Begin firmware design&lt;br /&gt;
** Purchase prototype parts and board&lt;br /&gt;
** Build two prototype boards&lt;br /&gt;
** Evaluate performance of prototype&lt;br /&gt;
* Phase Three&lt;br /&gt;
** Secure founding for full production run.&lt;br /&gt;
* Phase Four&lt;br /&gt;
** Up schematic and board to rev 2 based on phase two results&lt;br /&gt;
** Purchase parts for full run of robots&lt;br /&gt;
** Build 10 boards&lt;br /&gt;
** Test and debug&lt;br /&gt;
*Phase Five &lt;br /&gt;
**more revisons if neccesary&lt;br /&gt;
** Debug &lt;br /&gt;
Currently we are in phase one. We have just completed a functional description of the electrical system and are now evaluating parts for use in the robot. &lt;br /&gt;
* [[RCcoms Communication (Wireless/Wired)]]&lt;br /&gt;
* [[RCsensors Sensors]]&lt;br /&gt;
** [[RCtemp Temperature]]&lt;br /&gt;
* [[RCmicro Microprocessor]]&lt;br /&gt;
* [[RCpower Power]]&lt;br /&gt;
** [[RCbattery Battery]]&lt;br /&gt;
* [[RCmotor Motor System]]&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.robojackets.org/index.php?title=User:ScottT&amp;diff=2338</id>
		<title>User:ScottT</title>
		<link rel="alternate" type="text/html" href="https://wiki.robojackets.org/index.php?title=User:ScottT&amp;diff=2338"/>
		<updated>2006-04-10T15:44:55Z</updated>

		<summary type="html">&lt;p&gt;ScottT: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Not much to say here...&lt;/div&gt;</summary>
		<author><name>ScottT</name></author>
		
	</entry>
</feed>