190 likes | 213 Views
Dive into the world of LEGO Mindstorms Robot programming using Java with detailed instructions on the RCX, Java Operating System, and practical robotic applications. Learn how to create programs, control motors, sensors, and more.
E N D
LEGO Mindstorms Robot and Java Fall 2004
http://marsrovers.jpl.nasa.gov/mission/spacecraft_surface_rover.htmlhttp://marsrovers.jpl.nasa.gov/mission/spacecraft_surface_rover.html
Java as a Platform • Sun Microsystem has different Java sizes (virtual machines sizes) for devices with different capabilities • Java 2 Enterprise Edition (J2EE) for big machines • Java 2 Standard Edition (J2SE) • Java 2 Micro Edition (J2ME) designed for use with memory-constrained devices • Mobile phones, pagers, PDA’s • JavaCard which is 4KB
LEGO Mindstorms Robot • Robot Kit includes: • RCX (Robotics Command Explorer) • 2 Motors • 2 touch sensors • 1 light sensor • USB infrared transmitter tower • A “gazillion” lego parts to build a robot
LEGO Mindstorms Robot • Robotics Command Explorer (RCX) • Small computer based on the Hitachi H8 microprocessor • Equipped with: • 16 Kb ROM • 32 Kb RAM • 3 motor ports for output • 3 sensor ports for input • 1 LCD display • 1 sound unit • 4 system timers • 6 1.5V batteries • IR port transmitter and receiver
LEGO Mindstorms Robot • RCX runs on 6 AA batteries • When batteries are low, battery icon with an “X” across it will appear in the display • 3 gray ports labeled 1, 2, 3 • Sensor ports • 3 black ports labeled A, B, C • Motor ports
LEGO Mindstorms Robot • 4 buttons • On-Off • Run to executed and stop a loaded program • Prgm to scroll through the loaded programs • May load up to 5 programs at one time • View allows you to view information on a sensor or motor
LEGO Mindstorms Robot • Display Window • A little person standing or running • Indicates that a program is loaded or running respectively • To the right of the little person, a number indicating which of 5 programs will be active when the Run program is pressed • To the left of the little person, the Software Watch • Shows program being downloaded. It counts units of 100 bytes, so a 3 Kb program counts up to ~ 30 • Shows the voltage level of the battery
Programming the RCX • Write a Java program in Eclipse using a LeJOS (LEGO Java Operating System) plug-in • Compile the program transforming it into bytecode • Download the program (bytecode) to the RCX using the IR tower • Firmware interprets the bytecode converting it into machine code • Processor executes the machine code
LEGO Java Operating System • LeJOS is an open source project for UNIX-like and Win 32 systems • Fully functional implementation of Java language • Similar to Java 2 Micro Edition (J2ME) • Originally developed by Jose Solorzano, but is now maintained by Paul Andrews and Jurgen Stuber
LEGO Java Operating System • Limitations of LeJOS: • No garbage collection – garbage collection reclaims memory taken up by objects that are not used in your program • No switch statements; must use nested if….else • No arithmetic on long data type • Maximum array length is 511
LEGO Java Operating System • Provides a Java package to control the RCX: josx.platform.rcx.* • Provides Java classes for working with the RCX features: • Motors • Sensors • Display • Sound • Buttons • IR tower
LEGO Java Operating System TextLCD class: • Uses the display to show text messages. This class uses a great deal of memory. The letters are approximations since the display was originally intended for numbers. public static final void print (String text) - prints the string text on the LCD. Only the first five letters are displayed. public static final void print (char [ ] text) - prints the first five characters of the text array on the display.
LEGO Java Operating System Motorclass: • Used to control the RCX output ports which control the motors. The class contains 3 static Motor instances, A, B, and C, which correspond to the 3 output ports. public final void setPower(int power) - sets the current power level of the motor from 0 to 7. public final void backward( ) - moves the motor backwards. public final void forward( ) - moves the motor forwards. public final void stop( ) - stops the motor. public final void reverseDirection( ) - no matter which way the motor is turning, it makes it turn the other way.
LEGO Java Operating System Buttonclass: • Encapsules 3 RCX buttons View, Prgm, Run. You may call a static instance of each button using VIEW, PRGM, and RUN. public void addButtonListener( ButtoneListener listener) - add a ButtonListener to this Button public final boolean isPressed( ) - returns true is the button is pressed, false otherwise public final void waitForPressAndRelease( ) throws InterrupedException - wait until the button is released
Let’s Try • Create a simple program together that: • Displays a word to the LCD • Start one motor • Run until the RUN button is pressed
You Try • Add to the existing program: • Start the other motor • Play a descending arpeggio before the motors start
Robot Races • Each team must program their robot to complete the race course. Your robot may not go outside the borders of the race course: • Go forward • Stop • Turn 360 degrees to the right and display the message “RIGHT” • Go forward • Turn 360 degree to the left and display the message “LEFT” • Go forward • Play a sound for at least 10 seconds • Go backward • Go forward across the finish line