5  Einführung

Für LEGO MINDSTORMS-Roboter gibt es verschiedene Programmiersprachen und Programmierumgebungen. Zum Beispiel grafische Sprachen wie NXT-G (für LEGO MINDSTORMS NXT), RIS (für LEGO MINDSTORMS RCX) und EV3-G (für LEGO MINDSTORMS EV3), die einen sehr leichten Einstieg in die Programmierung der LEGO MINDSTORMS -Systeme geben.

pict
Seit November 2014 existiert auch die cloudbasierte, grafische Programmierumgebung »Open Roberta Lab«. Diese ermöglicht die Programmierung von LEGO MINDSTORMS EV3-Robotern ohne technische Hürden aus dem Browser heraus und ist unter www.open-roberta.org zu finden.
In diesem Roberta-Band: »EV3-Programmieren mit Java« wird die objektorientierte Programmiersprache Java für das LEGO MINDSTORMS EV3-System vorgestellt, denn Java bietet einen größeren Funktionsumfang als seine grafischen Verwandten, was die Programmierung von komplexeren und leistungsfähigeren EV3-Robotern ermöglicht.

Es wird einführend das Programmierparadigma der objektorientierten Programmierung (kurz OOP) an Hand einfacher Java-Beispiele behandelt. Um diese Beispiele am eigenen Rechner nachvollziehen zu können, muss zunächst eine funktionierende Entwicklungsumgebung vorhanden sein. Dazu sollte Anhang A durchgearbeitet werden. Dort wird die Installation der Entwicklungsumgebung Eclipse auf dem eigenen Rechner sowie die Installation von leJOS auf dem EV3- Stein Schritt für Schritt beschrieben.

pict
Die in diesem Band vorgestellten JAVA-Beispielprogramme (und mehr) können im Roberta-Portal heruntergeladen werden: www.roberta-home.de/javaband-ev3.
Die Abkürzung leJOS steht für »LEGO Java Operating System« und ist ein Framework das u.a. die Firmware, die benötigt wird, um den EV3 mit Java programmieren zu können, enthält.

Java und leJOS sind kostenlos erhältlich und verfügen beide über eine große Gemeinschaft von EntwicklerInnen und AnwenderInnen, die sich für eine stetige Weiterentwicklung verantwortlich zeigen. Entwicklungsumgebungen wie Eclipse bieten für die Programmierung des EV3 alle üblichen Funktionalitäten wie Syntaxvervollständigung und -highlighting sowie Versionsverwaltung.

Die Einführung in die OOP, wie auch die aufgeführten Programmbeispiele, richten sich an interessierte LeserInnen, die bereits Erfahrungen mit der Programmierung von LEGO MINDSTORMS mit anderen Programmiersprachen gesammelt haben. Da dieser Band nicht das komplette Spektrum der objektorientierten Programmierung sowie deren Programmierparadigma abdecken kann, wird an dieser Stelle auf eine weiterführende, vertiefende Literaturliste am Ende dieses Buches verwiesen.

5.0.1  Was ist der EV3?

EV3 bezeichnet die dritte Generation des LEGO MINDSTORMS-Systems und ist ein von LEGO eingetragenes Warenzeichen. Dabei handelt es sich um einen programmierbaren 32-bit ARM9-Mikrocontroller vom Hersteller Texas Instruments mit einem auf Linux basierenden Betriebssystem. Dieser wird auch EV3-Brick oder EV3-Stein genannt. Die Taktrate beträgt 300 MHz und die Größe des Hauptspeichers beträgt 64 MB. Als Kommunikations- bzw. Programmierschnittstelle verfügt der EV3 über einen USB-2.0-Anschluss und ein Funkmodul das Bluetooth als Standard verwendet. Der Baustein verfügt über vier Motoranschlüsse (Port A bis D) und vier Sensoranschlüsse (Port 1 bis 4).

pict

Abbildung 5.1.: EV3-Stein

5.0.2  Was ist leJOS?

Bei leJOS handelt es sich um eine schlanke Java Virtual Machine (JVM), die seit 2013 für den EV3-Stein verfügbar ist. leJOS begann ursprünglich als Hobby-Open -Source Projekt von José Solórzano im Jahr 1999 unter dem Namen TinyVM. Der Name ist eine Kombination aus dem Akronym »JOS« (für »Java Operating System«) und dem spanischen Wort »lejos« (auf deutsch: »weit entfernt« oder »weit«). Durch leJOS ist es möglich den EV3 mit Hilfe der Hochsprache Java zu programmieren. Ebenso trägt auch die Klassenbibliothek, mit der die Komponenten des EV3 (Motoren, Sensoren etc.) angesprochen werden, den Namen leJOS. Damit stellt die leJOS-Software ein Java-Betriebssystem als Alternative zur vorinstallierten LEGO-Firmware für den EV3 dar. leJOS wird von einer bootbaren microSD- Karte gestartet, ohne dabei die auf dem EV3 vorhandene LEGO-Software zu verändern bzw. zu löschen (Siehe Anhang A).

5.0.3  Vorteile von leJOS

Durch die Erweiterung mit leJOS können die Vorteile der Objektorientierung für den EV3 genutzt werden. Es ist mit ein wenig Aufwand in professionelle Entwicklungsumgebungen integrierbar und arbeitet schneller und wesentlich ressourcenschonender als die grafische Lösung EV3-G. Außerdem ist unter leJOS die Fließkommaarithmetik implementiert. Zusätzlich bietet leJOS eine vollständige Bluetooth-Unterstützung und ist leicht erweiterbar, beispielsweise um Klassen für Sensoren von Drittherstellern zu nutzen. Des Weiteren unterstützt leJOS High-Level-Robotik-Tasks (Navigation, Localization etc.) und besitzt eine große Community (inklusive Wiki und gut dokumentierter API).

leJOS stellt zudem ein vollständiges Java-Runtime-System zur Verfügung. Dies beinhaltet die folgenden Features:

5.0.4  Anmerkung zu leJOS

Da es sich bei leJOS in der von uns verwendeten Version 0.9.0 noch um eine Beta-Version handelt und diese ständig weiterentwickelt wird, empfiehlt es sich unter http://lejos.sourceforge.net die Tutorials von Zeit zu Zeit durchzusehen. Die im Folgenden beschriebenen Komponenten wurden erfolgreich getestet.

5.0.5  IDE

Bei einer IDE (Integrated Development Environment) handelt es sich um ein Programm, das die EntwicklerInnen möglichst umfassend beim Erstellen von Quelltexten unterstützt. Dazu besteht die IDE üblicherweise aus einem Editor, einem Compiler, Werkzeugen zur Programmerstellung und einem Debugger. Der Editor bietet in der Regel Syntaxhighlighting und -vervollständigung. Somit wird der gesamte Entwicklungsprozess effizienter. Der Compiler wandelt das (Quell-) Programm in ein für das benutzende System äquivalentes (Ziel-) Programm um. In den meisten Fällen handelt es sich hierbei um die Übersetzung eines in Assemblersprache, Bytecode oder Maschinensprache geschriebenen Programms. Der Debugger ist ein Hilfsmittel, das bei der Auffindung, Diagnose und Behebung von Fehlern im Programmcode von der IDE bereit gestellt wird.

5.0.6  Eclipse IDE

Eclipse ist eine IDE, die nachfolgend kurz beschrieben und für die Programmierung des EV3-Steins mit Java verwendet wird.

Die Entwicklung von Eclipse begann 2001 initiiert von IBM. Ursprünglich wurde Eclipse nur als IDE für Java genutzt. Durch mittlerweile viele Erweiterungen, sowohl kommerziell als auch nicht-kommerziell, werden aber auch viele andere Programmiersprachen wie C/C++, Python und einige weitere unterstützt. Im Jahr 2004 wurde auf Beschluss von IBM die eigenständige »Eclipse Foundation« gegründet, die seither für die Entwicklung von Eclipse zuständig ist. Seit der Version 3.0 wird Eclipse nicht mehr als erweiterbare IDE angeboten, sondern stellt den Kern der Entwicklungsumgebung bereit, der seine vielzähligen Funktionen durch die z.T. automatisch geladenen Plug-ins erhält. Auch für leJOS ist es ein solches Plug-in erhältlich.

Auf der Eclipse-Webseite werden die aktuellen Versionen in verschiedenen Paketen angeboten, in denen bereits auf die jeweilige Aufgabe zugeschnittene Plug- ins enthalten sind. Standardmäßig wird Eclipse in Englisch dargestellt, es ist jedoch auch möglich, durch Sprach-Plug-ins eine deutsche Benutzeroberfläche zu erhalten.

5.0.7  Vergleich Programmiersprachen

Um den EV3-Stein zu programmieren gibt es verschiedene Programmierumgebungen und Sprachen. Die von LEGO mitgelieferte Software wird schlicht als »EV3- Software« bezeichnet. Sie ist an die NXT-Software »NXT-G« angelehnt und richtet sich an EinsteigerInnen. Sie bietet eine grafische Oberfläche und fertige Blöcke für Programmabläufe. So kann z.B. die Motoransteuerung mit einem Mausklick implementiert werden. Mit der Programmiersprache NEPO – die im »Open Roberta Lab« verwendet wird – steht ebenfalls eine grafische Programmiersprache zur Verfügung, mit der ein unkomplizierter Einstieg in die Programmierung von EV3-Robotern möglich ist. Eine weitere Programmiersprache ist NXC (Not eXactly C). Die Syntax orientiert sich an der Programmiersprache C und kann z.B. mit der Programmierumgebung BricxCC eingesetzt werden. Die Sprache RobotC, entwickelt von der Carnegie Mellon University in Pittsburgh, Pennsylvania, hingegen orientiert sich nicht nur wie NXC an C, sondern übernimmt die Syntax vollständig. RobotC ist eine kostenpflichtige Programmierumgebung, in der RobotC programmiert werden kann. Der Vorteil dieser Sprache ist der große Funktionsumfang und die ausgereifte Programmierumgebung, die eine einfache Debug Möglichkeit und ein Feature bietet, mit dem die Sensoren kontinuierlich abgefragt werden können.

In Tabelle 5.1 werden die Vor- und Nachteile sowie die Merkmale der oben genannten Programmiersprachen dargestellt.

Java mit leJOS

EV3-Software

RobotC

NEPO

Installation

+

++

+

+++

Handhabung

+

++

+

++

Kosten

kostenlos

kostenlos

49$1

kostenlos

Einstieg

0

++

+

+++

Funktionsumfang

++

+

++

++

0 = neutral; + = gut; ++ = sehr gut; +++ = hervorragend
Tabelle 5.1.: Vor- und Nachteile der Programmiermethoden

5.0.8  Plattformunabhängigkeit

Die Verwendung von Java als Programmiersprache ermöglicht weitestgehende Plattformunabhängigkeit. Das bedeutet Java kann sowohl unter Windows, Linux als auch Mac OS oder auf anderen technischen Systemen genutzt werden, vorrausgesetzt eine Java Virtual Machine (JVM) existiert dafür.

Der Quellcode kann mit jedem beliebigen Editor oder einer IDE (Integrated Development Enviroment geschrieben werden. Die erstellte Datei wird mit dem Java- Compiler (javac) in Bytecode übersetzt (siehe Abbildung 5.2). Diese Dateien haben die Erweiterungen .class und werden von der virtuellen Maschine (VM) interpretiert. Diese VM gibt es für alle gängigen Rechner- oder Hardwareplattformen sowie für mobile Endgeräte wie zum Beispiel Mobiltelefone. Mit leJOS existiert eine solche virtuelle Maschine auch für den EV3.

Die VM wird (zumeist vom Hersteller) auf dem Gerät implementiert und speziell daran angepasst. Die Java-EntwicklerInnen hingegen programmieren auf dieser standardisierten Plattform, die auf allen Geräten identisch ist, unabhängig von den technischen Details des Geräts selbst. Die folgende Grafik zeigt den generellen Aufbau eines Java-Programms mit der virtuellen Maschine.

pict

Abbildung 5.2.: Funktionsweise der Java Virtual Machine

1 für 365-Tage-Lizenz