Lego-Roboter mit Java programmieren

Beschränkungen bei LeJOS NXJ

Da mit leJOS NXJ keine vollständige Java VM auf dem NXT-Brick installiert wird, gibt es ein paar kleine Einschränkungen, die man bei der Programmierung berücksichtigen muss. Wer schon einmal mit J2ME für das Handy Software programmiert hat, kennt Probleme dieser Art eventuell schon. Bei der Version 0.6.0beta der leJOS NXT Firmware muss man im Wesentlichen mit folgenden Einschränkungen umgehen:

  • Arithmetische oder logische Operationen bei Variablen vom Typ long
  • Keine Unterstützung von switch Statements
  • Maximale Größe für Methoden ist 64kB
  • Operationen auf Restwerte bei float- oder double-Datentypen
  • Maximal 255 Konstanten oder lokale Variablen
Alpha Rex Sample Application

Zu diesem Artikel gehört eine kleine Beispielanwendung, die Sie unter www.javamagazin.de herunterladen können. Die Anwendung zeigt, wie die Motoren angesteuert und die Sensoren abgefragt werden. Zusätzlich sind noch zwei Klassen enthalten, die alle meine leJOS-Projekte enthalten. Dabei handelt es sich um den DisplayManager und den ButtonManager. Beide Klassen werden am Anfang der main-Methode folgendermaßen eingefügt.

DisplayManager dm = DisplayManager.getInstance();
dm.setLine ("AlphaRex V0.1", 0, true);
ButtonManager bm = new ButtonManager ();

Der DisplayManager ist eine Klasse, die eine zentrale Instanz zur Verfügung stellt, mit der alle Textausgaben auf dem LCD-Display des Bausteins zentral, objektübergreifend und flimmerfrei angezeigt werden können. Der ButtonManager ist die Klasse, mit der die 4 Tasten des Roboters abgefragt werden. Dabei ist der dunkelgraue Button zum Beenden des Programms vorgesehen. Die 3 übrigen Tasten des Tastenfelds können für weitere Aufgaben verwendet werden.
Für die Fortbewegung und die Sensoren werden zwei separate Threads verwendet, wobei der SensorThread die Methode der Fortbewegung steuert und auf dem Display die Daten der verschiedenen Sensoren und des Tachometers ausgibt. In der main-Klasse werden jetzt nur noch die Threads gestartet.

import lejos.nxt.*;

public class AlphaRex
{
  public static void main(String [] args) 
  {
    DisplayManager dm = DisplayManager.getInstance();
    dm.setLine ("AlphaRex V0.1", 0, true);
    ButtonManager bm = new ButtonManager ();
    WalkThread wt = WalkThread.getInstance();
    wt.start();
    SensorThread st = SensorThread.getInstance();
    st.start();
  }
}

Zum Kompilieren der Klassen ist im Lieferumfang von leJOS NXJ ein Shell-Skript (nxjc.bat) enthalten, mit dem man die class-Files erzeugen kann. Der Aufruf des Java Compilers sieht folgendermaßen aus:

javac -source 1.3 -target 1.1 -bootclasspath "%NXJ_HOME%libclasses.jar;%CLASSPATH%" %*

Da die Klassen nicht einfach so auf dem LEGO MINDSTORMS NXT Brick kopiert werden können, steht noch ein weiteres Batch-Skript zur Verfügung, mit dem die nötigen Teile der Anwendung zu einer nxj-Datei zusammengefügt und per USB auf den Roboter kopiert werden.

nxj.bat AlphaRex

Nach dem erfolgreichen Upload der Datei kann man im Menü der leJOS NXJ Firmware das Programm auswählen und ausführen (Files → AlphaRex.nxj → Execute program). Die Steuerung der Bewegungen des Alpha Rex erfolgt über den orangen Button und den Touch-Sensor – Viel Spaß!

Hinweis

Die Bauanleitung für den LEGO-Roboter „Alpha Rex“ können Sie sich hier herunterladen. Zudem steht ein Video zu dem leJOS-Artikel zur Verfügung.

Fazit

Hinter leJOS verbirgt sich eine Java-basierte Firmware für LEGO MINDSTORMS. Die leJOS Firmware steht sowohl für den älteren RCX- als auch für den neuen NXT-Baustein zur Verfügung. Trotz der Einschränkungen in der aktuellen Version 0.6beta handelt es sich um eine echte Alternative zu der enthaltenen Programmiersprache von LEGO, mit der man dank moderner Entwicklungsumgebungen wie Eclipse schnell und einfach Java-Programme zum Messen und Steuern diverser Komponenten erstellen kann.

Michael Jentsch, Diplominformatiker (FH), arbeitet bei EDS Itellium als Senior-Anwendungsentwickler, und beschäftigt sich in seiner Freizeit gerne mit seinem Skateboard, seinem Badmintonschläger und mit Compilern und Interpretern aller Art.
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.