Einsatz des Lego-NXT-Roboters
Vorbereitung des Roboters
Damit Java-Programme auf einem NXT-Roboter ausgeführt werden können, muss die leJOS-Firmware auf den Roboter übertragen werden. Solange die leJOS-Firmware auf dem NXT-Baustein installiert ist, können umgekehrt keine Mindstorms-Programme auf den Roboter übertragen und gestartet werden. Zur Übertragenung der leJOS-Firmware verbindet man den Roboter über ein USB-Kabel mit dem PC. Man startet BlueJ und schaltet den Roboter mit der orangefarbenen Eingabetaste ein. Im Projektfenster von BlueJ wählt man die Menübefehlfolge Werkzeuge → Roboter → NXT-Flash-Werkzeug. In dem sich öffnenden Fenster wird die Übertragung durch einen Klick auf die Schaltfläche Flash leJOS firmware gestartet. Nach erfolgreicher Installation steht auf dem Roboter die leJOS-Menüsteuerung zur Verwaltung des NXT-Roboters zur Verfügung.
Will man für die weitere Arbeit mit dem Roboter die Bluetooth-Kommunikation aktivieren, so geht man im leJOS-Menü auf dem Roboter mit den Links-/Rechts-Tasten auf das Bluetooth-Symbol und drückt zur Auswahl die orangefarbene Eingabetaste. Durch weiteres Drücken auf die Eingabetaste (Power on) wird das Bluetooth-Modul aktiviert. Jetzt stehen weitere Menüpunkte auf dieser Ebene zur Verfügung, die man mit Hilfe der Links- und Rechtstaste ansteuern und durch Drücken der Eingabetaste auswählen kann. Durch Drücken der dunkelgrauen Endetaste kann man einen Menüpunkt wieder verlassen und auf die darüberliegende Menüebene zurückkehren. Auf diese Weise lassen sich weitere Details der Bluetooth-Kommunikation, wie z.B. die PIN (Standardwert ist 1234), einstellen. Die rechnerseitige Konfiguration der Bluetooth-Kommunikation hängt vom Betriebssystem ab und wird hier nicht beschrieben.
Ausführen von Roboterprogrammen
Zum Übertragen von Programmen muss der eingeschaltete Roboter über USB oder Bluetooth mit dem PC verbunden sein. Man führt im Projektfenster von BlueJ einen Rechtsklick auf das zugehörige Klassensymbol aus und ruft im Kontextmenü den Befehl Roboter → Übertragen (NXT) auf. Dann wird die Roboterklasse nochmals übersetzt und auf den Roboter überspielt, wobei Statusmeldungen in dem nachfolgend gezeigten Fenster angezeigt werden. Nach Abschluss der Übertragung gibt der Roboter ein akustisches Signal, und das Protokollfenster kann wieder geschlossen werden.
Zum Starten des Programms auf dem Roboter wandert man mit der Rechtstaste zum Menüpunkt Files und bestätigt mit der Eingabetaste. Es wird dann eine Liste der gespeicherten Programme angezeigt, in der man wieder mit den Links-/Rechtstasten die gewünschte Auswahl macht. Mit der Eingabetaste gelangt man zum Menüpunkt Execute program (Programm ausführen). Durch Drücken der Eingabetaste wird das Programm gestartet. Alternativ kann man auch zunächst durch Drücken der Rechtstaste zum Menüpunkt Set as Default wechseln, um das Programm mit der Eingabetaste als Standard-Programm zu setzen. Das Standardprogramm lässt sich beschleunigt starten, weil als leJOS-Startmenüpunkt (z.B. nach dem Einschalten des Roboters) der Befehl Run Default angezeigt wird, so dass zum Programmstart in der Regel nur das Drücken der Eingabetaste notwendig ist. Ein laufendes Roboterprogramm wird durch gleichzeitiges Drücken der Eingabe- und der Endetaste unterbrochen.
Die Speicherkapazitat des NXT-Roboters ist sehr begrenzt, so dass typischerweise nur etwa 5 Jabotics-Programme gleichzeitig gespeichert werden können. Wird die Speicherkapazität erreicht, erhält man beim Hochladen weiterer Programme eine Fehlermeldung. Wenn der Roboter noch mit dem PC verbunden ist, kann man die Dateien auf dem Roboter vom PC aus löschen. Dazu ruft man im Projektfenster von BlueJ den Menübefehl Werkzeuge → Roboter → NXT-Datei-Browser auf. Über den sich öffnenden Dialog verbindet man sich mit dem Roboter, selektiert über die zugehörigen Auswahlfelder alle zu löschenden Dateien und startet die Löschaktion durch einen Klick auf die Schaltfläche Delete Files (siehe Abbildung unten). Für jede gelöschte Datei gibt der Roboter ein akustisches Signal. Danach kann der Dialog wieder geschlossen werden. Alternativ kann das Löschen eines Programms auch direkt auf dem Roboter über die Liste aller gespeicherten Programme erfolgen. Nach der Auswahl des Programms wandert man mit den Links-/Rechtstasten zum Befehl Delete file und bestätigt mit der Eingabetaste.
Problembehebung
Bei schwerwiegenden Fehlern im Programm oder bei (gelegentlich auftretenden) Fehlern bei der Übertragung des Programms auf den Roboter kann es zu Systemabstürzen auf dem Roboter kommen. Dann lässt sich der Programmlauf nicht durch Drücken der Endetaste bzw. gleichzeitiges Drücken der Eingabe- und der Endetaste beenden. Stattdessen muss man mit einem schmalen Stift (z.B. einer Kugelschreibermine) den Reset-Knopf kurz drücken, der sich auf der Rückseite des Roboterbausteins in der linken oberen Öffnung verbirgt. (Achtung: Bei längerem Drücken wird der Roboterbaustein in den Flash-Modus versetzt, den man an einem regelmäßigen, leisen Klickgeräusch erkennt.)
Während sich Übertragungsfehler einfach dadurch beheben lassen, dass man das Programm erneut überträgt, kann die Suche nach Fehlern in komplexeren Programmen mühselig sein, weil sich der Programmlauf auf dem Roboter nicht einfach debuggen lässt. Folgende (vorwiegend an die Betreuer gerichteten) Hinweise können hilfreich sein:
- Bei Jabotics-Programmen sollte geprüft werden, ob der Fehler auch in der Simulation auftritt. Ist dies nicht der Fall, sollte das Programm möglichst auf einen anderen Roboter übertragen werden, um Probleme mit der Hardware auszuschließen. Lässt sich der Fehler auch auf anderen Robotern nicht reproduzieren, sollten für den fraglichen Roboter die Kabelverbindungen zwischen Roboterbaustein und Motoren bzw. Sensoren auf Vertauschungen überprüft werden.
- Bei nicht gefangenen Ausnahmen zeigt der Roboter den Callstack in Form einer Liste von Klassen- und Methodennummern an. Möchte man die Nummern dem Programmtext zuordnen, muss man sich das Protokoll anschauen, dass beim Übertragen des Programms auf den Roboter angezeigt wird. Hier werden alle Klassen und Methoden mit ihren vom Linker zugeordneten Nummern aufgelistet.
- Es besteht prinzipiell die Möglichkeit, während eines Roboterlaufs Informationen an den verbundenen PC zu übermitteln und in der sogenannten NXT-Konsole anzeigen zu lassen (Start der Konsole auf dem PC über Werkzeuge → Roboter → NXT-Konsole). Weitere Details findet man in der Dokumentation zur Schnittstelle org.jabotics.robot.de.IPCKonsole. Man erzeugt ein Objekt mit der Schnittstelle IPCKonsole über die von XRoboter bereitgestellte Objektfabrik (siehe Doku zu XRoboter und IObjektfabrik).
- Man kann versuchen, Roboterprogramme in der Simulation zu debuggen. Allerdings muss man sich darüber im Klaren sein, dass bei einem Simulationslauf eine Reihe von Threads parallel arbeiten. Neben dem Hauptthread für das Roboterprogramm und den Threads für die Motor- und Sensorsteuerung, die auch auf dem realen Roboter laufen, gibt es Threads für die Simulation der physikalischen Welt und Threads für die Ton- und Grafikerzeugung. Weitere Details zum Debuggen von Roboterprogrammen sind auf den Seiten zum Simulationswerkzeug zu finden.
- Schließlich darf man auch nicht die Möglichkeit ausschließen, dass ein Problem auf einen Fehler in den leJOS- oder Jabotics-Bibiliotheken zurückzuführen ist.