Title: IRtoRF Link for the Lego RCX
1IR-to-RF Linkfor the Lego RCX
- Eric P. Walklet
- Senior Project - Computer Engineering - 2005
- Advisor Prof. John Spinelli
2Presentation Agenda
- Introduction to the RCX
- Statement of the Problem
- Project Considerations
- Block Diagram
- Programming the RCX
- The IR Circuitry
- Crossbow Motes and TinyOS
- Communicating Between Unlike Devices
- RFRCX Controlling the RCX with MATLAB
- Challenges and Conclusions
IR-to-RF Link for the Lego RCX Slide 2
3Introducing the Lego RCX
- Part of the Lego Mindstorms package for many
years - Three motors and three sensors
- Programmed using a proprietary language created
by Lego - Interfaces with a host computer through a 935-nm
IR link with a USB tower
IR-to-RF Link for the Lego RCX Slide 3
4Purpose of the Project
- To design an interface for the Lego RCX that does
not require a line of sight to operate such as
an RF link - To design a new programming language in MATLAB
that can allow novice programmers to control the
RCX - Inspired by CSC-030
IR-to-RF Link for the Lego RCX Slide 4
5Project Requirements
- Language must control all three motors and read
all three sensors, at least - Language must be simple enough to understand for
a student with little programming experience - Information must travel between MATLAB and the
RCX via some type of RF link - RCX is limited by a one-byte message buffer and
an archaic protocol
IR-to-RF Link for the Lego RCX Slide 5
6Crossbow Motes
- The building blocks of wireless sensor networks
- Operate at RF frequency of 900 MHz
- Capable of communication through RF or UART
- Ethernet Gateway allows communication with other
devices through TCP/IP - Programmed with nesC
IR-to-RF Link for the Lego RCX Slide 6
7Block Diagram
MIB600CA Ethernet Gateway
MATLAB Users PC
TCP/IP
Mote
900 MHz RF
Mote
IR RX/TX Circuitry
935 nm IR
Lego RCX
IR-to-RF Link for the Lego RCX Slide 7
8Making the Most of One Byte
From MATLAB to the RCX Motor Control
Even Parity
Odd Parity
Motor 1
Motor 2
Motor 3
8 voltage settings, two directions now limited
to 3 settings in each direction idle
From RCX to MATLAB Sensor Status
Even Parity
Odd Parity
Sensor 1
Sensor 2
Sensor 3
100 scaled levels of sensitivity now limited to
4 scaled levels of sensitivity
IR-to-RF Link for the Lego RCX Slide 8
9Programming the RCX with LeJOS
- LeJOS is a Java VM that replaces the standard RCX
firmware - Small enough to fit in the 32 kB (!) of memory
- Allows RCX programmers to use a language that
they are already familiar with, though there are
limitations - Support for the entire RCX feature set and beyond
IR-to-RF Link for the Lego RCX Slide 9
10What the RCX Accomplishes
- Accepts a one-byte message from the IR receiver
- Uses that message to control the three motors
accordingly - Checks the status of the three sensors
- Assembles the status of the three sensors into a
one-byte message - Sends the message back through the IR transmitter
IR-to-RF Link for the Lego RCX Slide 10
11I Cant Believe Its Not Java!
- if(motorNumber1)
-
- if((chArray0 1) (chArray1 1))
-
- return 3 // motor is floating
-
- else if((chArray0 1) (chArray1 0))
-
- return 2 // motor is on, forward
-
- else if((chArray0 0) (chArray1 1))
-
- return 1 // motor is on, reverse
-
- else return 0 // motor is off
-
- else if(motorNumber2)
-
- if((chArray2 1) (chArray3 1))
- while(true) // loop indefinitely
-
- // reads in a message from the mote, and converts
- // it to binary
- inBin integerToBinary(dis.readInt())
- // if the parity checks properly, set the motors
- // accordingly
- if (evenParityCheck(inBin) oddParityCheck(inBin
)) -
- setMotors(inBin)
-
- // assembles a message from the status of the
- // sensors, and adds parity
- outBin convertBinary(setParity(getSensors()))
- // sends the sensor message
- dos.writeInt(outBin)
IR-to-RF Link for the Lego RCX Slide 11
12Do You Speak Infrared?
- Need an IR receiver and transmitter to
communicate directly with the RCX - A Sharp GP1UW70QS remote control receiver
collects sensor information from the RCX - A PIC12C508A microcontroller modulates the motor
messages at 38 kHz so they can be detected by the
RCX, and outputs them through an IR photodiode
IR-to-RF Link for the Lego RCX Slide 12
13Circuit Diagram
What the IR Detector Sees
What the IR Diode Sends
IR-to-RF Link for the Lego RCX Slide 13
14Mote 2 The Great Interpreter
- The RCX uses a unique protocol eight bytes sent
for a one-byte message - Crossbow motes use a variation of HDLC for both
radio transmission and UART communication - The mote that connects to the IR circuit must
change the message to a structure the RCX can
understand - Sends translated message to RCX via UART, and
sends decoded message to gateway via RF
IR-to-RF Link for the Lego RCX Slide 14
15TinyOS and nesC
- TinyOS is a native environment for small devices
like the motes - nesC is a modular language based on C
- Programs are formed by wiring interfaces and
components to each other - VERY DIFFICULT AT FIRST
- Each program requires a configuration and a
module to operate
IR-to-RF Link for the Lego RCX Slide 15
16A Look at the Configuration
- configuration UARTRCXPacket
-
- provides
- interface StdControl as Control
- interface BareSendMsg as Send
- interface ReceiveMsg as Receive
-
-
- implementation
-
- components RCXPacket as Packet, UART
- Control Packet.Control
- Send Packet.Send
- Receive Packet.Receive
-
- Packet.ByteControl -gt UART
- Packet.ByteComm -gt UART
- / Command to transfer an RCX-compatible packet
/ - command result_t sendRCXPacket(TOS_MsgPtr msg)
- uint8_t rcx_packet
- result_t rval
-
- // form RCX-compatible frame
- rcx_packet0 (uint8_t)(PACKET_HEADER)
- rcx_packet1 (uint8_t)(0xFF PACKET_HEADER)
- rcx_packet2 (uint8_t)(OPCODE_MESSAGE)
- rcx_packet3 (uint8_t)(0xFF -
OPCODE_MESSAGE) - rcx_packet4 (uint8_t)(msg)
- rcx_packet5 (uint8_t)(0xFF -
rcx_packet4) - rcx_packet6 (uint8_t)(OPCODE_RETTOSUB)
- rcx_packet7 (uint8_t)(0xFF -
OPCODE_RETTOSUB) -
- rval call SendVarLenPacket.send(rcx_packet,
PACKET_SIZE) - return rval
-
To send one byte to the RCX 0xFF 0xFF
0xF7 0xF7 message message 0x08 0x08
IR-to-RF Link for the Lego RCX Slide 16
17Mote 1 Not Quite as Glorious
- Messages received from the RF network (i.e. Mote
2) are passed on to the Ethernet gateway, and
further to the PC - Messages received from the Ethernet gateway are
sent to the wireless network to be - Programming is the same as Mote 2, though lacks
the RCX encoding
IR-to-RF Link for the Lego RCX Slide 17
18MATLAB and the Motes
- Crossbow includes Java tools for sending and
receiving messages to and from the wireless
network - Message Interface Generator (MIG) creates a
message class unique to the programs installed on
the motes - Connection is made to the Ethernet gateway
through a TCP/IP socket
IR-to-RF Link for the Lego RCX Slide 18
19RFRCX
- Status of sensors and motors are stored to two
global variables - A variety of functions are assembled into a
program to describe the RCXs behavior - Each function updates the global variables
depending on user input or received messages - Always something to send! Always something to
receive!
IR-to-RF Link for the Lego RCX Slide 19
20RFRCX in Action
- function setMotorBackward(number)
- if number 1
- motorSettings(1) 0
- motorSettings(2) 1
- elseif number 2
- motorSettings(3) 0
- motorSettings(4) 1
- elseif number 3
- motorSettings(5) 0
- motorSettings(6) 1
- end
- setMotorParity
- asInt buildMessage
- oMsg net.tinyos.rfrcx.RCXMotorMsg(asInt)
- send(2,oMsg)
- drive forward
- when a wall is hit
- back up, and move forward
- again
- motorSettings resetMotors
- sensorSettings resetSensors
- setMotorForward(1)
- while getSensorValue(1) 0
- setMotorOff(2)
- end
- setAllMotors(-1,-1,0)
- continue(100)
- setMotorForward(2)
- continue(100)
- setMotorForward(1)
IR-to-RF Link for the Lego RCX Slide 20
21Problems and Challenges
- UART on the motes is prone to errors and failures
- Poor battery life on the motes without
power-saving features - nesC is not well documented
- RCX hardware is proprietary
- RFRCX is not as user friendly as it could be
- Price
IR-to-RF Link for the Lego RCX Slide 21
22The Future
- Use multiple messages to have more control over
the motors and other features - Control multiple motes through the same gateway
to address price issue - Replace MATLAB with a true Java interface
- Packaging
- A direct-connect solution
IR-to-RF Link for the Lego RCX Slide 22
23Acknowledgments
- http//www.xbow.com
- http//www.tinyos.net
- Kekoa Proudfoot http//graphics.stanford.edu/keko
a/rcx/ - http//www.csdm.qc.ca/SJdelaLande/lesclasses/4web/
wwwrobotique/robotique_lego.htm - Prof. Spinelli
- Crossbow (for their informative training seminar)
- The rest of the CN/CS/EE department
And a silent wave to all those in the room who
were inspired to become engineers by the Legos
they played with as a kid including me.
IR-to-RF Link for the Lego RCX Slide 23
24Questions?