01.05.2013 Views

Lego NXT and LeJOS NXJ - University of Essex

Lego NXT and LeJOS NXJ - University of Essex

Lego NXT and LeJOS NXJ - University of Essex

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong><br />

Dongbing Gu<br />

School <strong>of</strong> Computer Science <strong>and</strong> Electronic Engineering<br />

<strong>University</strong> <strong>of</strong> <strong>Essex</strong><br />

UK<br />

Spring 2013<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 1 / 37


Outline<br />

1 Why <strong>Lego</strong> is different: A History Tour<br />

2 LEGO Mindstorms <strong>NXT</strong>: Brick<br />

3 LEGO Mindstorms <strong>NXT</strong>: Sensors<br />

4 LEGO Mindstorms <strong>NXT</strong>: Motors<br />

5 LEGO Mindstorms <strong>NXT</strong>: Communications<br />

6 Programming Solutions for the LEGO Mindstorms <strong>NXT</strong><br />

7 Writing your first <strong>LeJOS</strong> <strong>NXJ</strong> program<br />

8 <strong>LeJOS</strong> <strong>NXJ</strong> Programming Environment<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 2 / 37


Why <strong>Lego</strong> is different<br />

If you wanted a task to be done by a robot, you first had to build<br />

your robot, <strong>and</strong> then you would be able to program it.<br />

Not easy<br />

mechanical design <strong>and</strong> manufacture,<br />

electronics design <strong>and</strong> manufacture,<br />

system integration,<br />

<strong>and</strong> then you could program the robot, <strong>of</strong>ten in assembly language.<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 3 / 37


Why <strong>Lego</strong> is different<br />

Now, with <strong>Lego</strong>, most <strong>of</strong> the hard bits disappear: you just stick <strong>Lego</strong><br />

bits together to make the robot you want.<br />

NO mechanical design <strong>and</strong> manufacture,<br />

NO electronics design <strong>and</strong> manufacture,<br />

NO system integration,<br />

<strong>and</strong> you can program the robot in almost any language you want: C,<br />

Java, Lisp, Ada, Prolog, Logo, <strong>and</strong> even assembler.<br />

easy.<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 4 / 37


<strong>Lego</strong> Mindstorms RCX<br />

At MIT in the 1980s, the Mechanical Engineering Department started<br />

a course called 2.70: ‘Introduction to Design’.<br />

An in-house <strong>Lego</strong> design team, obviously inspired by the MIT work,<br />

developed the <strong>Lego</strong> RCX brick.<br />

Released in 1998 in various kits.<br />

All kits contain:<br />

an RCX brick with 3 sensor inputs <strong>and</strong><br />

3 motor outputs,<br />

2-way IR communication between<br />

RCX <strong>and</strong> PC,<br />

touch, light, rotation, temperature<br />

sensors, motors,<br />

<strong>Lego</strong> parts.<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 5 / 37


LEGO Mindstorms <strong>NXT</strong>: Brick<br />

<strong>Lego</strong> Mindstorms <strong>NXT</strong> was released by <strong>Lego</strong> in late July 2006<br />

A new version, <strong>Lego</strong> Mindstorms <strong>NXT</strong> 2.0, was announced in January<br />

2009, featuring an advanced color sensor <strong>and</strong> other upgraded<br />

capabilities.<br />

All kits contain:<br />

a 32-bit ARM7 microcontroller<br />

(AT91SAM7S256).<br />

100 x 64 pixel LCD display.<br />

4 buttons for user interface.<br />

Sound channel with 8-bit resolution<br />

<strong>and</strong> up to 8 kHz sampling rate.<br />

wireless Bluetooth <strong>and</strong> a USB port.<br />

4 sensor input ports<br />

3 PWM motor output ports with built<br />

in encoders (1 degree resolution).<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 6 / 37


On Board Memory<br />

The <strong>NXT</strong> brick contains 64kB <strong>of</strong> RAM (R<strong>and</strong>om Access Memory).<br />

This holds information as long as the battery is connected.<br />

It contains 256K flash <strong>and</strong> used for two things:<br />

The firmware that forms a kind <strong>of</strong> operating system. It is uploaded to<br />

the flash memory via the USB driver or Bluetooth link.<br />

The user programs, compiled on the PC <strong>and</strong> uploaded via the USB<br />

driver or Bluetooth link. Note only limited memory is available for<br />

these!<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 7 / 37


Sensor Ports<br />

Sensors on the <strong>NXT</strong> can be either analog or digital sensors.<br />

For analog sensors, one <strong>of</strong> the sensor input wires contains an analog<br />

value representing the value <strong>of</strong> the sensor.<br />

Digital sensors are more intelligent <strong>and</strong> typically contain a<br />

microprocessor. The sensor communicates with the <strong>NXT</strong> using the<br />

I2C serial communications protocol.<br />

Each <strong>of</strong> the four sensor ports on the <strong>NXT</strong> can be configured as either<br />

a digital or analog sensor.<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 8 / 37


RGB Color Light Sensors<br />

The <strong>Lego</strong> sensor only responds to light<br />

coming from the front. It is a<br />

directional sensor.<br />

The RGB color sensor contains three<br />

light emitting diodes (LED).<br />

If there is a reflective object in front <strong>of</strong><br />

the sensor, the sensor will respond to<br />

the LED light reflected from the object<br />

The RGB color sensor has a number <strong>of</strong><br />

modes.<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 9 / 37


RGB Color Light Sensors<br />

In red, green or blue reflective modes the sensor only switches on<br />

that colored LED <strong>and</strong> then measures the reflected light.<br />

In ambient mode, all the LEDs are switched <strong>of</strong>f <strong>and</strong> so the ambient<br />

light level is measured.<br />

In full mode, all 3 LEDs are cycled <strong>and</strong> then a number 1-6 is<br />

calculated for the nearest color.<br />

1 Black<br />

2 Blue<br />

3 Green<br />

4 Yellow<br />

5 Red<br />

6 White<br />

It reports color name <strong>and</strong> light intensity ranging between 1 <strong>and</strong> 100.<br />

(In practice you get much less.)<br />

It outputs colors: red, green, <strong>and</strong> blue.<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 10 / 37


Touch Sensors<br />

It reports pressed or released.<br />

It can be used to detect if robot bumps into an obstacle.<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 11 / 37


Ultrasonic (Sonar) Sensors<br />

It produces a ultrasonic pulse wave <strong>and</strong> listen to the echo.<br />

It reports distances with a range <strong>of</strong> about 5cm to 250cm <strong>and</strong> an<br />

accuracy <strong>of</strong> +/ − 3cm.<br />

It can be used to report distances or detecting obstacles.<br />

In practice, direction ambiguity is a serious problem. More on this will<br />

be explained in sensor <strong>and</strong> noise lecture.<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 12 / 37


Compass Sensors<br />

It measures the earth’s magnetic field <strong>and</strong> calculates a magnetic<br />

heading to report direction.<br />

Calculates to the nearest 1 ◦ <strong>and</strong> returned as a number from 0 to 359.<br />

Updates the heading 100 times per second.<br />

Influenced by local magnetic interference. Objects such as metal<br />

items, motors, batteries <strong>and</strong> wires can cause magnetic interference.<br />

Has a built in calibration function that calculates correction <strong>of</strong>fsets.<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 13 / 37


LEGO Mindstorms <strong>NXT</strong>: Motors<br />

<strong>Lego</strong> motors are DC (direct current) serve motors.<br />

If the terminals are not connected to anything, the motor can spin<br />

freely. It has a good gearbox, so it can spin for a while.<br />

If a voltage is applied to the terminals, then current will flow in the<br />

motor coils. This current will generate a TORQUE that exerts a force<br />

on the motor that tries to make it rotate. The direction <strong>of</strong> this force<br />

depends on the POLARITY <strong>of</strong> the voltage.<br />

However, if the motor terminals are simply connected together, the<br />

motor will no longer spin freely, but will be braked as if a voltage in<br />

the opposite direction had been applied.<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 14 / 37


Motors<br />

<strong>Lego</strong> calls power settings ‘Power levels’. They go from 0 to 100.<br />

For low settings, a slight increase in load can cause a motor to stop.<br />

Because <strong>of</strong> the high inertia <strong>of</strong> the motor, changes in settings take<br />

some time to have an effect.<br />

For light loads, the speed does not seem to vary much between power<br />

settings.<br />

The curves below shows rotation speed vs. motor power level under<br />

different loads.<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 15 / 37


Motors<br />

The <strong>NXT</strong> cable has six wires: white (motor 1), black (motor 2), red<br />

(ground), green (power), yellow (tacho 1), blue (tacho 2).<br />

The motor speed is controlled by pulse-width modulation (pwm),<br />

which works by driving the motor with a variable cycle square wave.<br />

This effectively turns the motor on <strong>and</strong> <strong>of</strong>f, fast. The longer it is on,<br />

the more torque it will generate <strong>and</strong> the faster it will go.<br />

The yellow <strong>and</strong> blue wires are connected to the quadrature encoder.<br />

They return square wave pulses that are 90 degree out <strong>of</strong> phase.<br />

By measuring the frequency <strong>of</strong> the square wave oscillation, you can<br />

compute the rotation.<br />

One cycle corresponds to 2 degree <strong>of</strong> rotation.<br />

By tracking both square wave, you can identify quarter cycles, which<br />

gives you a resolution <strong>of</strong> 0.5 degree.<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 16 / 37


Tachometer<br />

A tachometer is an instrument that measures the rotation speed <strong>of</strong> a<br />

shaft or disk, as in a motor or other machine.<br />

The <strong>NXT</strong> motor has a built in tachometer that keeps track <strong>of</strong> the<br />

current angle (in degrees) <strong>of</strong> the motor axle.<br />

Built-in rotation sensors 360 counts/rotation.<br />

Rotation sensor provides valued information for motion control <strong>and</strong><br />

navigation. More will be detailed in robot navigation lecture.<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 17 / 37


USB, BlueTooth, <strong>and</strong> Loudspeaker<br />

The <strong>NXT</strong> brick contains a full speed USB port (12Mbit/s) <strong>and</strong><br />

BlueTooth wireless communication (Bluetooth Class II V2.0<br />

compliant).<br />

They can be used for uploading programs.<br />

They can also be programmed to communicate with other devices.<br />

BlueTooth allow you to connect three devices at the same time.<br />

Loudspeaker with 8 kHz sound quality.<br />

Sound channel with 8-bit resolution <strong>and</strong> 8 KHz sample rate.<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 18 / 37


Programming Solutions for the LEGO Mindstorms <strong>NXT</strong><br />

Different programming environments are available for LEGO <strong>NXT</strong>.<br />

Most <strong>of</strong> them can be programmed <strong>and</strong> downloaded onboard: <strong>NXT</strong>-G,<br />

ROBOLAB, RobotC, <strong>LeJOS</strong>.<br />

There are some which can be used for remote control: iComm<strong>and</strong>,<br />

<strong>NXT</strong> Python.<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 19 / 37


<strong>NXT</strong>-G<br />

<strong>NXT</strong>-G is a graphical programming environment developed by<br />

National Instruments.<br />

Writing an <strong>NXT</strong>-G program is very much like creating a flowchart.<br />

You write a program by dragging icons (‘code blocks’) that describe<br />

different behaviors, e.g., turn motor A on at 75 percent <strong>of</strong> full power,<br />

<strong>and</strong> connect them with lines to describe the program behavior.<br />

Using a variety <strong>of</strong> code blocks, you can control motors, introduce<br />

delays, play sounds <strong>and</strong> direct the flow <strong>of</strong> your code according to the<br />

state <strong>of</strong> sensors <strong>and</strong> timers, etc.<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 20 / 37


ROBOLAB<br />

ROBOLAB was originally developed by Tufts <strong>University</strong> for LEGO for<br />

the first generation LEGO Mindstorms RCX microprocessor brick. It<br />

was extensively enhanced <strong>and</strong> revised to support both the RCX <strong>and</strong><br />

the second-generation <strong>NXT</strong>.<br />

ROBOLAB is another graphical environment, although it is not as<br />

intuitive as the <strong>NXT</strong>-G language.<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 21 / 37


ROBOTC<br />

ROBOTC is industry-st<strong>and</strong>ard C language, developed by the Robotics<br />

Academy at Carnegie Mellon <strong>University</strong>.<br />

ROBOTC has a similar graphical programming capability, but with it,<br />

you drag <strong>and</strong> drop text.<br />

ROBOTC has a powerful interactive real-time debugger that<br />

significantly reduces the time it takes to debug programs.<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 22 / 37


<strong>NXJ</strong><br />

<strong>NXJ</strong> is a Java implementation for the <strong>NXT</strong>. It is st<strong>and</strong>ard Java but<br />

with a much smaller Class library.<br />

<strong>NXJ</strong> programs are written <strong>and</strong> compiled on the PC. The compiled<br />

programs are then transferred to the <strong>NXT</strong> where they can be<br />

executed.<br />

<strong>LeJOS</strong> is a tiny (about 16 Kb) Open Source Java-based operating<br />

system, including a virtual machine for the execution <strong>of</strong> Java<br />

bytecode, an API on top <strong>of</strong> VM, additional s<strong>of</strong>tware tools.<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 23 / 37


<strong>LeJOS</strong> <strong>NXJ</strong><br />

<strong>LeJOS</strong> <strong>NXJ</strong> is a Java programming environment for the LEGO<br />

MINDSTORMS <strong>NXT</strong>. It allows you to program LEGO robots in Java.<br />

It includes all the classes in the <strong>NXJ</strong> API as well as tools used to<br />

upload code to the <strong>NXT</strong> brick.<br />

As <strong>LeJOS</strong> is a firmware replacement, it must be flashed onto the<br />

<strong>NXT</strong>.<br />

There are two steps:<br />

1 javac compiles the source file (.java) into bytecode, creating a file<br />

(.class).<br />

2 java runs the bytecode in the file (.class) on the java virtual machine.<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 24 / 37


Java Language<br />

All code in Java is organized in objects. S<strong>of</strong>tware objects consist <strong>of</strong><br />

internal state variables <strong>and</strong> methods (functions) that operate on the<br />

internal state variables.<br />

A class is the blueprint from which individual objects are created. This<br />

means that all Java code is embedded within class data structures.<br />

You create Java objects in instantiating (making an instance <strong>of</strong>) a<br />

Java class.<br />

A variable in Java can use a class as its data-type. This means that<br />

once you create an object (i.e. an instance <strong>of</strong> a Java class) you can<br />

store that object in a variable that uses the same class as its<br />

data-type.<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 25 / 37


The HelloWorld Program<br />

A simple Hello World program, a HelloWorld class:<br />

public class HelloWorld<br />

{<br />

}<br />

<strong>LeJOS</strong> requires the st<strong>and</strong>ard main method for the program entry<br />

point:<br />

public class HelloWorld {<br />

public static void main (String[] args) {<br />

}<br />

}<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 26 / 37


LCD Display<br />

<strong>LeJOS</strong> <strong>NXJ</strong> supports the st<strong>and</strong>ard java System.out.println method<br />

<strong>and</strong> scroll the output on the <strong>NXT</strong> LCD screen.<br />

public class HelloWorld {<br />

public static void main (String[] args) {<br />

System.out.println(“Hello World”);<br />

}<br />

}<br />

If you run this program as it is, it will display Hello World <strong>and</strong> then<br />

immediately return to the menu, so you will not be able to see what is<br />

displayed.<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 27 / 37


Button class<br />

Button is in the lejos.nxt package. We can either include<br />

lejos.nxt.Button or lejos.nxt.* to allow any <strong>of</strong> the st<strong>and</strong>ard lejos.nxt<br />

classes to be used in the program.<br />

The Button class has a method waitForPress() that waits for any<br />

button to be pressed. You can find out what methods a class<br />

supports by looking at the API documentation.<br />

http://lejos.sourceforge.net/p_technologies/nxt/nxj/api/index.html<br />

The complete HelloWorld program is:<br />

import lejos.nxt.*;<br />

public class HelloWorld {<br />

public static void main (String[] args) {<br />

System.out.println(“Hello World”);<br />

Button.waitForPress();<br />

}<br />

}<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 28 / 37


System class<br />

In Java, the System class provides a set <strong>of</strong> methods that the user can<br />

invoke when they want to interact with the Java operating system. By<br />

default, one object <strong>of</strong> type System is created for each Java program.<br />

For example, using some <strong>of</strong> its methods, you can obtain the current<br />

time <strong>and</strong> the settings <strong>of</strong> various properties associated with the system.<br />

System also contains three predefined system variables, in, out, <strong>and</strong><br />

err.<br />

System.in refers to the st<strong>and</strong>ard in; by default this is the keyboard;<br />

System.out refers to the st<strong>and</strong>ard output;<br />

System.err refers to the st<strong>and</strong>ard error stream.<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 29 / 37


<strong>LeJOS</strong> <strong>NXJ</strong> Programming Environment<br />

S<strong>of</strong>tware Packages used in This Course<br />

Java language: Java SE (St<strong>and</strong>ard Edition) <strong>and</strong> JRE (Java Runtime<br />

Environment).<br />

Java firmware: <strong>LeJOS</strong> <strong>NXJ</strong>.<br />

Java program uploading link: Mindstorms <strong>NXT</strong> USB driver or<br />

Bluetooth driver.<br />

Java IDE: Eclipse IDE.<br />

The lab computers have already been installed <strong>and</strong> configured for<br />

these tools.<br />

If you want to instal <strong>and</strong> configure your own computer, see a detailed<br />

configuration instruction:<br />

http://www.bartneck.de/2008/03/04/java-lego-nxt-eclipse-tutorial/<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 30 / 37


<strong>LeJOS</strong> <strong>NXJ</strong> Main Menu<br />

When the <strong>NXT</strong> switch on, it will display the <strong>LeJOS</strong> logo before<br />

changing to the main menu.<br />

After a few second, it will display the main menu. Now it is ready to<br />

run Java programs.<br />

If it does not, the <strong>LeJOS</strong> <strong>NXJ</strong> firmware should be uploaded into flash<br />

memory. You can following this link to do so:<br />

http://www.bartneck.de/2008/03/04/java-lego-nxt-eclipse-tutorial/.<br />

You need to look at the main menu in order to use it.<br />

The link to the menu system is:<br />

http://lejos.sourceforge.net/nxt/nxj/tutorial/MenuSystem/MenuSystem.htm.<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 31 / 37


Configure a Eclipse Project<br />

Starting Eclipse IDE for<br />

Classic.<br />

click on<br />

File→New→Project<br />

<strong>and</strong> Select Java Project<br />

<strong>and</strong> click next.<br />

Name it Test. You will<br />

receive an almost empty<br />

class.<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 32 / 37


Configure Eclipse Project<br />

Then turn this project into a<br />

<strong>LeJOS</strong> project.<br />

Right-click onto the project<br />

<strong>and</strong> select Properties. Select<br />

Java Build Path on the left.<br />

Click on the Libraries tab.<br />

Afterwards, click on Add<br />

External JARs <strong>and</strong> locate<br />

the ‘lib’ directory in<br />

ProgramFiles\lejos <strong>NXJ</strong><br />

directory. Select classes.jar<br />

<strong>and</strong> press Open. The <strong>LeJOS</strong><br />

library will now be listed.<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 33 / 37


Java Source File<br />

Click on<br />

File→New→Class<br />

Name it ‘HelloWorld’<br />

<strong>and</strong> check public static<br />

void main(String[]<br />

args).<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 34 / 37


Java Source File<br />

You now need to enter a few lines <strong>of</strong> Java code. In the first line add:<br />

import lejos.nxt.LCD;<br />

Next add the following lines to the main method:<br />

LCD.drawString(Hello World!, 2, 2);<br />

LCD.refresh();<br />

while(true)<br />

Eclipse is a very smart Java editor that tries to compile your program<br />

while you write. It will underline errors with a red line.<br />

Sometimes this automatic compilation does not work <strong>and</strong> you want to<br />

force Eclipse to compile. You can achieve this by simply saving the<br />

file.<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 35 / 37


Java Program Uploading<br />

Now you can save the program <strong>and</strong> then upload it into the <strong>NXT</strong>.<br />

Before you start the uploading procedure you must make sure that<br />

the <strong>NXT</strong> is connected to the computer <strong>and</strong> that the <strong>NXT</strong> is<br />

recognized by the operating system. You also need to select your<br />

main class window in the middle before starting the uploading<br />

procedure, so that Eclipse knows which class you want to download.<br />

Notice that the program will run forever. To stop it you need to reset<br />

the <strong>NXT</strong> by holding the two middle buttons for a longer time. This<br />

will then terminate the USB connection, so you need to wait a little<br />

for it to reconnect before you upload a new program.<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 36 / 37


Java Program Improvement<br />

Of course there are better ways <strong>of</strong> ending your program, such as<br />

listening to a button press or after a certain delay. Replace the<br />

endless while loop with this:<br />

try {<br />

Thread.sleep(5000);<br />

} catch (InterruptedException e) {<br />

}<br />

Now you should be able to use <strong>Lego</strong> <strong>NXT</strong> with simple codes. More<br />

detailed programming <strong>of</strong> <strong>Lego</strong> <strong>NXT</strong> will be given in next lecture.<br />

D. Gu (Univ. <strong>of</strong> <strong>Essex</strong>) <strong>Lego</strong> <strong>NXT</strong> <strong>and</strong> <strong>LeJOS</strong> <strong>NXJ</strong> Spring 2013 37 / 37

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!