Einsatz des Lego-EV3-Roboters
Vorbereitung des Roboters
Damit Java-Programme auf einem EV3-Roboter ausgeführt werden können, muss eine Micro-SD-Karte (mit dem üblicherweise vorinstallierten FAT-Dateisystem) mit der leJOS-Software und einer passenden Java-Laufzeitumgebung (JRE) vorbereitet werden. Die Java-Laufzeitumgebung kann direkt bei Oracle von dieser Seite (Stand 11.2016) heruntergeladen werden. Zum Herunterladen der Archivdatei (z.B. ejre-7u75-fcs-b13-linux-arm-sflt-headless-18_dec_2014.tar.gz) muss man sich bei Oracle registrieren.
Nach dem Einbinden der Micro-SD-Karte auf dem PC (ggf. mit einem USB-Adapter) ruft man im Projektfenster von BlueJ die Menübefehlfolge Werkzeuge → Roboter → EV3-SD-Karten-Werkzeug auf. Bei dem Werkzeug handelt es sich um eine leicht modifizierte Version des leJOS-Tools, die im Gegensatz zum Original auch unter Linux funktioniert. Unter Linux wird die SD-Karte am FAT-Dateisystem erkannt. In dem sich öffnenden Fenster können die SD-Karte, die leJOS-Imagedatei (lejosimage.zip im leJOS_EV3-Installationspfad) und die JRE-Archivdatei ausgewählt werden, ehe man die Übertragung auf die SD-Karte startet (siehe folgende Abbildung). Die Schaltfläche zum Herunterladen der JRE ist nicht mit der aktuellsten Version verknüpft und deren Verwendung daher nur bedingt zu empfehlen. Die vorbereitete SD-Karte wird in den SD-Karten-Slot des EV3-Roboters gesteckt ehe man den Roboter einschaltet. Während des ersten Startvorgangs wird die Installation des leJOS-Systems auf der SD-Karte abgeschlossen. Anschließend steht die leJOS-Menüsteuerung zur Verwaltung des EV3-Roboters zur Verfügung.
Die Kommunikation zwischen dem PC und dem EV3-Roboter erfolgt in der Regel über eine USB-Verbindung oder WLAN. Verbindet man den Roboter über ein USB-Kabel mit dem PC, so wird ein LAN-Netzwerk aufgebaut. Man kann in diesem Fall die Standard-IP-Adresse des Roboters (10.0.1.1) unverändert lassen. Unter Ubuntu gelingt der Aufbau der Kabelnetzwerkverbindung ohne weiteres. Unter Windows 7 steht der für den Verbindungsaufbau per USB benötigte RNDIS-Treiber leider nicht automatisch zur Verfügung. Eine Beschreibung, wie man diesen Treiber manuell aktiviert, findet man z.B. hier. Möchte man ein WLAN zur Kommunikation mit dem EV3-Roboter verwenden, so ist zu beachten, dass der Roboter nicht alle WiFi-Dongles unterstützt. Im Internet findet man Hinweise, welche Geräte sich für den Einsatz mit dem EV3 eignen. Die zugehörigen Einstellungen am Roboter (wie die IP-Adresse) werden über den WiFi-Menüpunkt der leJOS-Menüsteuerung vorgenommen. Auch hierzu findet man bei Bedarf detailliertere Beschreibungen im Internet.
Die in BlueJ integrierten leJOS- und Jabotics-Werkzeuge benötigen zur Kommunikation mit dem EV3-Roboter dessen IP-Adresse. Diese kann in BlueJ über die Menübefehlsfolge Werkzeuge → Roboter → Roboterauswahl (EV3) eingestellt werden. Sind alle Einstellungen vorgenommen, sollte man sofort die für Jabotics-Programme benötigten Bibliotheken auf den Roboter übertragen, indem man den Menübefehl Werkzeuge → Roboter → Übertrage EV3-Bibliotheken aufruft. Hinweis: Dieser Befehl sollte nach einer Aktualisierung der Jabotics-Installation erneut aufgerufen werden. Er kopiert alle Dateien aus dem Unterverzeichnis lib/userlib des leJOS_EV3-Installationspfads auf dem PC in das Verzeichnis /home/lejos/lib auf dem EV3-Roboter. Standardmäßig sind dies die Dateien jabotics-ev3.jar und manifest.ev3 (vgl. Installationsanleitung). In der Textdatei manifest.ev3 wird der Klassenpfad definiert, in dem alle Java-Bibliotheken aufgeführt sind, die beim Starten eines leJOS- bzw. Jabotics-Programms dazugeladen werden müssen. Man kann somit eigene Java-Bibliotheken für Roboterprogramme auf dem EV3 hinzufügen, indem man das Java-Archiv in den Ordner lib/userlib der EV3-Installation kopiert, den Klassenpfad in der Datei manifest.ev3 entsprechend erweitert und dann den Befehl zur Übertragung der Bibliotheken auf den EV3 erneut aufruft.
Besonderheiten des EV3-Roboters
Da die Jabotics-Bibliotheken ursprünglich für den NXT-Roboter entworfen wurden, gibt es z.Z. noch kleine Einschränkungen für den Einsatz der EV3-Roboter. In einer späteren Jabotics-Version soll die Funktionalität entsprechend erweitert werden. Die erste Einschränkung betrifft die Taster des EV3-Bausteins: Hier werden die Oben/Unten-Taster (auf dem NXT nicht vorhanden) nicht unterstützt. Als Sensoren werden bisher NXT-Schall-, EV3-Tast-, EV3-Licht- (Helligkeit) und EV3-Ultraschallsensoren aber keine Gyroskopsensoren untersützt. Im Grundaufbau des EV3-Roboters sind normalerweise nur die mitgelieferten EV3-Sensoren und damit keine Schallsensoren verfügbar. Es bietet sich z.B. an, statt des Schallsensors einen zweiten Tastsensor vorne am Roboter anzubringen (siehe Abbildung oben). Dann sollte man auch die mitgelieferten Programmvorlagen für Roboterprogramme entsprechend ändern, damit die Schülerinnen und Schüler die Deklaration der statischen Objektvariablen für die Sensoren nicht korrigieren müssen. Werden sowohl NXT- als auch EV3-Roboter eingesetzt, kann man die NXT-Roboter in gleicher Weise umbauen, damit die Roboterprogramme austauschbar bleiben.
Das Starten und Herunterfahren eines EV3-Roboters benötigt deutlich mehr Zeit als bei einem NXT-Roboter. Man wird daher den EV3-Roboter nicht kurzzeitig zwischern verschiedenen Programmläufen ausschalten. Noch gravierender für den Einsatz im Unterricht ist die deutliche Zeitverzögerung beim Starten eines Roboterprogramms. Die grundlegenden Initialisierungen innerhalb der leJOS-Programmebene z.B. für die Sensoren scheint sehr viel Zeit in Anspruch zu nehmen. Dadurch weichen die Schülerinnen und Schüler zumindest bei kürzeren, einfacheren Programmieraufgaben eher auf die Robotersimulation am PC aus.
Bei Rotationen des EV3-Roboters bereitet das flache Reifenprofil der Antriebsräder Probleme, weil die Spurweite nicht eindeutig definiert ist. Je nach Beschaffenheit des Untergrunds kann eine Roboterrotation deutlich größer oder kleiner ausfallen als gewollt. Man erzielt bessere Resultate, wenn man die EV3-Räder durch die Räder eines (ausgedienten) NXT-Roboters ersetzt. Es sind dadurch keine Änderungen an den Programmen erforderlich, denn der Raddurchmesser und der Radmittenabstand werden durch den Austausch nicht verändert.
Ausführen von Roboterprogrammen
Zum Übertragen von Programmen führt man im Projektfenster von BlueJ einen Rechtsklick auf das zugehörige Klassensymbol aus und ruft im Kontextmenü den Befehl Roboter → Übertragen (EV3) 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 kann das Protokollfenster wieder geschlossen werden.
Zum Starten des Programms auf dem Roboter wandert man mit der Rechtstaste zum Menüpunkt Programs und bestätigt mit der Eingabetaste. Es wird dann eine Liste der gespeicherten Programme angezeigt, in der man mit den Oben-/Untentasten 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 zweimaliges 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. Soll ein laufendes Programm auf dem EV3 unterbrochen werden, so sind die Eingabe- und Untentaste gleichzeitig zu drücken.
Wie beim NXT-Roboter lassen sich die Programmdateien auf dem EV3-Roboter über den verbundenen PC verwalten. Zum Löschen von Dateien ruft man im Projektfenster von BlueJ den Menübefehl Werkzeuge → Roboter → EV3-Steuerung auf. Über den sich öffnenden Dialog verbindet man sich mit dem Roboter, selektiert auf dem Reiter Programs ü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). 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
Fehler im Laufe der Programmausführung (wie nicht gefangene Ausnahmen) werden durch ein akustisches Signal angezeigt. Auf dem Monitor des Roboters erscheint dann eine Fehlermeldung, die aufgrund des kleinen Displays häufig nicht vollständig lesbar ist. Zusätzlich speichert leJOS eine Datei mit der Fehlermeldung in das Programmverzeichnis des EV3. Der Dateiname beginnt mit dem Programmnamen und endet auf die Namenserweiterung .err. Die Textdatei kann über das EV3-Steuerungswerkzeug (Menübefehl Werkzeuge → Roboter → EV3-Steuerung, s.o.) auf den PC heruntergeladen und dort gelesen werden. Die Anzeige der Fehlermeldung auf dem Monitor kann durch Drücken der Ende/Escape-Taste gelöscht werden. Sollte es einmal zu einem Systemabsturz kommen, der sich nicht über die Tasten des EV3-Bausteins zurücksetzen lässt, so ist notfalls kurzzeitig der Akku aus dem Baustein herauszunehmen.
Die Suche nach Fehlern in komplexeren Programmen kann recht mühselig sein, weil sich der Programmlauf auf dem Roboter nicht so einfach debuggen lässt. leJOS bietet dazu gewisse Möglichkeiten, die hier nicht weiter beschrieben werden sollen. Folgende (vorwiegend an die Betreuer gerichteten) Hinweise können darüber hinaus 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.
- Es besteht prinzipiell die Möglichkeit, während eines Roboterlaufs Informationen an den verbundenen PC zu übermitteln und in der sogenannten Remote-Konsole anzeigen zu lassen. Die Konsole ist in das EV3-Steuerungswerkzeug integriert und befindet sich auf dem Reiter Console. 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.