Gymnasium Himmelsthür

Dies ist eine alte Version des Dokuments!


Lejos für RCX/NXT

Linux

Installation (openSUSE)

  • Die Installationspakete befinden sich im Schulrepository (http://arktur/software/local)
  • Installation von lejos-3.0.0-x.rpm (diese Bibliothek enthält die weiteren Teile 2 und 3) und lejos_nxj-0.9.0beta-x.rpm.
  • Einfügen von Umgebungsvariablen:
    RCXTTY=/dev/legousbtower0
    LEJOS_HOME=/usr/share/lejos
    NXJ_HOME=/usr/share/lejos_nxj

    Diese Variablen werden durch die Installation im Verzeichnis /etc/profile.d eingefügt.
  • Für das nun verwendete System „udev„ müssen Regeln erstellt werden, die die entsprechenden Geräte für alle les- und schreibbar machen. Diese Regeln werden durch die Installation im Verzeichnis /etc/udev/rules.d hinzugefügt.
  • Für die bequeme Nutzung vom JBuilder aus muss noch das Paket jbmt-4.0-x.rpm (von mir selbst programmiert) hinzugefügt werden.
  • Es müssen im JBuilder die entsprechenden Pfade eingestellt werden.

Einrichtungsdialog

Die Einstellungen variieren etwas, je nachdem, ob der RCX- oder der NXT-Baustein verwendet werden soll (siehe unten).

Programmierung mit Java

Voraussetzungen

6 Batterien werden für den RCX-Baustein benötigt, der NXT enthält einen Akku.

Der RCX-Baustein muss mit der Infrarotschnittstelle gegenüber dem IR-Tower stehen, der an eine der USB-Schnittstellen des Computers angeschlossen ist, und eingeschaltet sein.

Der NXT-Baustein dagegen wird direkt per Kabel an die USB-Schnittstelle des Rechners angeschlossen.

Programme

Alle hier beschriebenen Programme werden als Pakete auf den Schulrechnern automatisch vorinstalliert, das sind die Pakete borland,jbmt,lejos,lejos_nxj und neuerdings für die Netbeans-Unterstützung netbeans-lejos.

  • JBuilder 2005 (Linux)
    Die Entwicklungsumgebung kann zur Programmierung eines RCX/NXT-Programms eingesetzt werden. Dazu wird ein Projekt mit nur einer Klasse verwendet.
  • JBMT 4.0 (Linux)
    Diese nach dem „Opentools-API“ von Borland von mir programmierte Erweiterung stellt Menüeinträge und Symbole für die zur Kommunikation mit dem RCX/NXT benötigten Befehle von LeJOS bereit.
  • LeJOS 3.0.0 RCX bzw. LeJOS NXJ 0.9.0beta NXT (Linux)
    LeJOS enthält eine virtuelle Java-Maschine für den RCX/NXT, die die Ausführung von speziellen Java-Programmen auf dem RCX/NXT ermöglicht. Weiterhin gibt es die Programme „firmdl/nxjflash„, „lejosjc/nxjc“, „lejoslink/nxjlink„ und „lejosdl/nxjupload“ zum Installieren der virtuellen Maschine auf dem RCX/NXT, zur Kompilierung gegen die richtigen Bibliotheken, zum Zusammenfügen aller benötigten Dateien in eine RCX/NXT-kompatible Binärdatei und zum Installieren dieser Binärdatei auf dem RCX/NXT.

    Die LeJOS-Installation wird in einem anderen Text beschrieben.

Konfiguration von jbmt

Das Archiv muss sich im Unterverzeichnis „ext„ des JBuilders befinden, wird von dort beim Programmstart automatisch geladen und stellt die genannten Funktionen und Symbole in der Symbolleiste bereit.
Die Kommunikation erfolgt textorientiert über das Meldungsfenster. Praktischer wären grafische Dialoge, die ich vielleicht in einer späteren Version hinzufügen werde.

Für die Funktion von „jbmt“ (Java Builder Mindstorms Tools) ist es nötig, das ein JAVA-SDK installiert ist, da der Java-Compiler (javac) von LeJOS benötigt wird.

Im Konfigurationsdialog müssen der Pfad zu LeJOS/LeJOS NXJ, der Pfad zum Java-SDK und die Gerätedatei des IR-Towers(RCX) eingetragen werden (/dev/legousbtower0).

Übertragung der LeJOS-Firmware

Vor der Verwendung muss die Firmware übertragen werden. Dazu dient das Symbol (Tools→Firmware:Firmware hochladen).

RCX: Das Übertragen dauert etwa 5-10 Minuten beim RCX. Es erfolgt eine Prozentanzeige im Meldungsfenster. Zusätzlich wird die übertragene Menge auf dem LCD des RCX angezeigt. Zum Schluss der Übertragung piept der Baustein kurz und zeigt nun den Batterieladezustand als Dezimalzahl an.

Hinweise: Falls Übertragungsprobleme auftreten, kann der Abstand zwischen Tower und RCX verändert werden. Außerdem ist Sonnenlicht störend. Im Notfall kann man Tower und RCX mit einem Pappkarton gegen äußeres Licht schützen.

NXT: Die Übertragung1) dauert nur wenige Sekunden, es erscheint ein textbasiertes Menüsystem.2)

Lejos-Projekt im JBuilder

Wird der JBuilder zum ersten Mal von einem Benutzer gestartet, so erscheint unter anderem das Willkommen-Projekt im Hauptfenster.

Das Projekt wird über das Menü Datei→Projekte schließen geschlossen.

Nun muss zunächst ein neues Projekt angelegt und die Lejos-Bibliothek eingebunden werden. Schließlich wird eine neue Klasse in diesem Projekt erzeugt. Der Quelltext dieser Klasse stellt das ausführbare Programm dar.

Im Menü über Datei→Neues Projekt erscheint der Projektexperte, in dessen erstem Fenster man lediglich den Projektnamen festlegt (hier sinnvollerweise LEGO.

Dann klickt man auf Weiter und gelangt auf die zweite Seite des Projektexperten.

Auf der Karteikarte Benötigte Bibliotheken klickt man auf Hin­zu­fügen und fügt aus der Liste (siehe Abbildung unten) die Bibliothek „Lejos„ für den RCX-Baustein bzw. „Lejos NXT“ für den NXT-Baustein hinzu. Falls bereits die Bibliothek „Javagently„ eingetragen ist, kann man sie entfernen. Damit sind alle Einstellungen auf dieser Seite vorgenommen und man klickt auf Fertigstellen, um den Projektexperten zu beenden.

Als nächstes wird die Klasse erstellt. Im Menü unter Datei→Neue Klasse wird der Klassenexperte aufgerufen. Dort sind einige Eintragungen zu ändern. Zunächst wird als Klassenname „LEGO“ eingestellt. Der voreingestellte Name unter „Package„ muss gelöscht werden und bei den Optionen müssen die drei Optionen links gewählt und rechts abgewählt werden.

Durch Klicken auf OK erscheint der vorgefertigte Quelltext der Klasse.

Im Quelltext muss eine „Import-Anweisung“ für die Bibliothek und eine „Exception„ ergänzt sowie die vordefinierte Programmzeile gelöscht werden.

  • Import-Anweisung
    RCX: import josx.platform.rcx.*;
    NXT: import lejos.nxt.*;
  • Exception
    public void main(…) throws Exception {
  • Programmzeile entfernen
    LEGO lego = new LEGO();

Bei der Eingabe der Import-Anweisung und anderer Programmzeilen blendet ein Eingabeassistent die Auswahlmöglichkeiten ein, sobald man einen Punkt eingibt.

Zum Abschluss soll ein kleines Java-Programm geschrieben werden, mit dessen Programmtext die Funktionsfähigkeit der Umgebung getestet wird.

Die speziellen Funktionen im Zusammenhang mit dem RCX/NXT-Baustein befinden sich in einer eigenen Symbolleiste, die in der nächsten Abbildung zu sehen ist.

Testen der Übertragung

Das Programm rechts zeigt den Text „Hello World“ im LCD-Bereich des RCX

import josx.platform.rcx.*;

public class hworld
{
  public static void main (String[] aArg)
  throws Exception
  {
     LCD.clear();
     TextLCD.print ("hello");
     Thread.sleep(2000);
     TextLCD.print ("world");
     Thread.sleep(2000);
  }
}

bzw. NXT

import lejos.nxt.*;

public class hworld
{
  public static void main (String[] aArg)
  throws Exception
  {
    LCD.drawString("Hallo",3,4);
    Thread.sleep(2000);
  }
}

an. Es kann zum Test der Übertragung verwendet werden. Es sind immer die folgenden Schritte notwendig.

  • Speichern des Java-Quelltextes
    (Datei→Alles speichern:)
  • Kompilieren
    (Tools→Kompilieren:) erzeugt aus der zuvor gespeicherten Java-Datei die „class„-Datei.
  • Übertragen
    „Linken“ und „Installieren„ des ausführbaren Programms mit (Tools→Übertragen:)

Hinweis: Die Schritte 3 und 4 können auch durch das dritte Symbol zusammengefasst werden.

  • Ausführen
    RCX: Durch Betätigen der grünen „RUN“-Taste auf dem RCX wird das Programm gestartet.
    NXT: Nach Einschalten befindet man sich im Hauptmenü des Textmenüs mit den Befehlen Files, Bluetooth, System. Man betätigt die orange Enter-Taste und und die Pfeiltasten links und rechts, um
    „Files→hworld.nxj→Execute program„ durchzuführen.

Test der richtigen Firmware

Wenn der NXT die richtige Firmware hat, meldet er sich beim Einschalten mit dem in der Abbildung angezeigten Lejos-Symbol . Nach kurzer Zeit ertönt eine kurze Melodie und ein Textmenü erscheint.

Uploading the Firmware

It is much easier and faster to upload firmware to the NXT than it was with the RCX brick.

1. First we need to place the NXT brick in firmware upload mode. The reset button is cleverly hidden in a LEGO pin hole so you don't accidentally press it. Turn on the NXT. Using a bent paperclip, insert it into the hole in the upper-right corner of the underside of the NXT brick (see Figure below). Hold the button for at least four seconds to erase the current firmware and put it into firmware upload mode.

2. Your NXT brick should be making a soft pulsing sound. Now we need to upload the firmware. Plug in your USB cable and type:

nxjflash

3. After a very brief moment you will see the leJOS NXJ logo and a menu system will appear. Your NXT brick is now ready to accept Java code.

Warning:

There is a theoretical limit to the number of times you can replace the firmware on your NXT before it wears out. Every time you replace the firmware, a piece of data called a lock bit is used up. This bit is rated to work 100 times (minimum) before it expires. However, don't let this dissuade you from replacing the firmware with something you want more. Most engineers agree that the lock bit will last far in excess of 100 times. Chances are you will never even notice this limitation and you probably won't replace your firmware enough to approach even 100.

1)
Der NXT muss durch drücken einer auf der Unterseite versteckten Taste für 4 Sekunden mit einer Büroklammer in den „Update“-Modus versetzt werden, bevor ein Update möglich ist (siehe Anhang Seite 5).
2)
Neuerdings gibt es Probleme mit nxjflash, diese sind zu beheben durch die Datei
/etc/modprobe.d/50-lejos_nxj.conf
mit dem Inhalt
blacklist cdc_acm
Anmelden