JAXenter.de

Das Portal für Java, Architektur, Cloud & Agile
X

Heute im W-JAX Countdown: Mike Wiesner über Spring vs. Java EE

Roboterprogrammierung in Java am Beispiel eines Lego-Mindstorms-Weltraumroboters

Java goes to space

Von Konrad Schwarzbach

Einen autonom operierenden Roboter aus Teilen der Lego-Mindstorms-Serie für die Internationale Raumstation ISS zu konstruieren, war die Aufgabe eines Wettbewerbs der dänischen Firma Lego. Im Dezember 2001 nahmen drei russische Kosmonauten auf der ISS einen kleinen Roboter in Betrieb, dessen zwei Steuerrechner in Java programmiert wurden. Hintergründe zu dieser Geschichte und die Möglichkeiten, Java für Robotik-Projekte einzusetzen, sollen am Beispiel der Lego-Mindstorms-Komponenten und der Java-VM leJos aufgezeigt werden.



Abb. 2: Jitter bei der Arbeit auf der ISS (Quelle: Lego)

Im August 2001 schrieb der dänische Spielzeughersteller Lego zusammen mit den Firmen Siemens und Hitachi einen Wettbewerb aus, die Lego-Mind-storms-Space-Competition. Die Aufgabe: Es sollte ein autonom operierender Roboter konstruiert werden, der in der Schwerelosigkeit auf der internationalen Raumstation ISS arbeitet. Der siegreiche Roboter wurde mit einer russischen Trägerrakete zur ISS gebracht und anschließend von den Kosmonauten in Betrieb genommen.
Mitmachen konnte jeder, der mindestens 18 Jahre alt, und in der Schweiz, Österreich oder Deutschland lebt. Als technische Randbedingungen wurden das Maximalgewicht von 1,5 kg und eine Außenmasse von höchstens 30*30*30cm festgelegt. Verwendet werden durften nur Teile aus drei bestimmten Baukästen der Lego Mindstorms-Serie. Diese waren vorher in aufwendigen Labortests auf ihre ISS-Tauglichkeit überprüft worden. Bei der Programmierung war Freestile zugelassen. 124 Teams sendeten ihr Konzept ein, und eine hochkarätige Jury, unter der Schirm-herrschaft des deutschen Astronauten Ulf Merbold, wählten schließlich zehn Finalisten aus. Mitte Oktober 2001 war es dann soweit, in München wurden die zehn fertigen Roboter der Jury präsentiert. Gewinner wurde der Roboter Jitter, den mein Sohn mit mir zusammen entwickelt hat. Mitte Dezember 2001 hatten wir beide die Gelegenheit, unsere Konstruktion live vom russischen ISS-Kontrollzentrum aus zu beobachten.

Die Technik

Doch nun zur Technik. Der Roboter ist mit zwei Rechnern der Lego-Mindstorms-RCX Serie ausgestattet. Mehr war aufgrund des Gewichtslimits nicht möglich. Jeder RCX - Bau-stein besitzt drei Sensoreingänge und drei Steuerausgänge, was nicht sehr viel für eine komplette Lageregelung ist. Abb. 4 zeigt die schematische Architektur des Roboters. Für das Drehen in der Schwere-losigkeit sind drei motorgetriebene Rotoren (Schwungräder) zuständig. Diese sind auf der x,y und z-Achse montiert. Damit der Roboter immer mit der Vorderseite nach vorn fliegt, muss er nach dem Abstoßen in Flugrichtung gedreht werden. An den Kreuz-schlitten wird über drei Rotations-sensoren (für die x,y und z-Achse) die Aufprall- bzw. Abstoß-richtung ge-messen. RCX1 errechnet den Raumvektor und gibt ihn an die Rotoren-steuerung weiter. Die Lageregelung richtet sich weiterhin an der Kabinenbeleuchtung aus. Zwei Licht-sensoren , mit schmal- bzw. weit-winkligem Gesichtfeld, messen die Licht-intensität. Dreht sich der Roboter, ändert sich der Messwert am schmalwinkligen Sensor früher als am Weitwinkligen. In diesem Fall sucht die Lagereglung durch Nickbewegungen wieder das Licht-maxi-mum zu finden. Die beiden RCX-Bausteine tauschen über eine Infrarotverbindung Daten aus. Das Infrarotsignal wird dabei über die äußeren (roten) Flügel an den Augen umgelenkt. Das aus--ge-sen-dete Infra-rotlicht wird auch noch wie ein Infrarotradar zur Erfassung von Bewegungen wie z.B. winkende ISS-Bewohner benutzt. Die IR-Sendedioden sind ziemlich stark und die Licht-sen-soren IR-empfindlich. Zu den drei Licht-sen-soren sind drei Touchsensoren parallel geschaltet, was nicht weiter stört, da sie kaum gleichzeitig angesprochen werden. Ein Touchsensor löst den schon erwähnten Greifer-mecha-nis-mus aus. Die anderen beiden dienen der Kommu-ni-kation. Der obere zum streicheln, der Hintere für einen Klaps. Jitter führt eine Statistik, ob er bei freundlicher Behandlung wie zuwinken, streicheln munter piept und freudig hin und her wackelt oder nur missmutig brummt. Natürlich wir jeder Fang ausgiebig kundgetan.



Abb. 4: Die Architektur im Überblick

Wenn der Roboter in Betrieb genommen wird, muss er zuerst seine Umgebung kennen lernen. In einer Initi-ali-sierungsphase sucht und misst er durch rotieren zuerst Lichtmaxima und -minima. Durch eine weitere Rotationssequenz wird die Dreh-ge-schwin-dig-keit in der Schwere-losigkeit ermittelt. Fällt eine der Messung unbefriedigend aus oder ist das Intranet gestört, werden Defaultwerte eingesetzt. Auch die Verteilung der Sensoren wurde so gewählt, dass bei Ausfall einzelner Komponenten noch eine maximale Funktion erhalten bleibt. Diese Vorsichtsmaßnahmen sind not-wendig, denn bei Start-beschleu-nigungen von 5g und heftigen Schwin-gungen wird das Material extrem belastet.



Abb. 6: RCX-Baustein und RCX-Platine

Der Kern des Lego-Mindstorms Systems ist der programmierbare RCX-Baustein. Über eine Infrarotverbindung kann dieser von einem PC mit Programmen versorgt werden. Im Inneren arbeitet ein Hitachi H8300 Micro-controller mit 8Bit und 16MHz. Dieser Microcontroller arbeitet normalerweise in Mobiltelefonen, Waschmaschinen oder Organizern. An Speichern stehen 16K ROM und 32 K RAM zur Verfügung. Die 16k ROM enthalten die Basistreiber z.B. für die Infrarot-schnittstelle und einige Low-Level-Funktionen. Die 32K RAM teilen sich das eigentliche Betriebssystem, (in unserem Fall) die Java-VM, das Programm und die Daten! Wer mehr über die RCX-Internas wissen möchte, sei die ausführliche Internetseite von Kekoa Proudfoot empfohlen.
Es sind drei Sensoreingänge und drei Steuerungs-ausgänge vorhanden. Das ist ziemlich spartanisch, aber alles ist perfekt aufeinander abgestimmt. Werkzeuge, Messgeräte oder Elektronik-kenntnisse sind nicht notwendig. Die Anschlüsse sind, wie bei Lego üblich, über Kontaktbausteine realisiert. An Sensoren stehen Touch-, Rotations-, Licht- und Temperatur-Sensoren zur Verfügung. An die Ausgänge lassen sich Motoren oder Lampen anschließen. Zur Interaktion sind vier Taster und ein LCD-Display auf der Oberseite angebracht. An der (dunklen) Stirn-seite befindet sich die Infra-rotschnitt-stelle. Primär dient sie zur Programm-übertragung. Es gibt jedoch auch eine Hand-fern-bedienung über die der RCX ferngesteuert werden kann. Hostseitig wird zur Übertragung ein IR-Sender/Empfänger (IR-Tower) ange-schlossen. Die IR-Schnittstelle kann aber auch zur direkten PC-RCX oder RCX-RCX Kommunikation verwendet werden.

leJos Java-VM und Betriebssystem

Aus diesem Projekt entstand leJos (spanisch gesprochen lächos). leJos ist mehr als eine JAVA-VM, es ist auch gleichzeitig ein Minibetriebsystem. Das heißt, das ganze originale Betriebssystem des RCX wird gegen leJos ausgetauscht. Der Fokus der leJos VM liegt auf größerer Vollständigkeit und Performance. Mit 17Kb ist diese VM wesentlich größer, aber in die verbleibenden 10-12Kb passen trotzdem Programme von erstaunlicher Größe (siehe Jitter). Um eines vorwegzunehmen, es handelt sich nicht um eine J2ME-Implementation, sondern um ein RCX-spezifisches Java-Subset.
Die wesentlichen Features sind:

  • 32-bit Floating point Arith-metik

  • Mathematische Funktionen (trig. log. ...)

  • Thread-Support

  • Sensor, Motor, Button, Serial - Support

  • Native Access

  • Multiprogram-Downloading

Nicht unterstützt werden z.B.:

  • Garbage Collection (vorbereitet)

  • runable interface

Abb.3 zeigt das RCX-Environment mit einer leJos-Installation. Da das Hitachi H8300-System selbst einen (native) Bytecodeinterpreter enthält, fällt die java-VM relativ kompakt aus. Der interpretierte Bytecode entspricht in weiten Teilen einem Subset des Standards. Unterschiede bestehen z.B. in der Objekthaltung; hier tauscht der Lader den Bytecode gegen leJos-spezifische Array-Adressen aus. Der Lader akzeptiert soweit normale class-Dateien, sodass die Lieblings-IDE verwendet werden kann.



Abb. 8: RCX-Downloadmanager

Die Entscheidung, die Jitter-Software mit Java und leJos zu entwickeln, war sicher sinnvoll. Java bietet gerade dann, wenn ein Projekt unter enormem Zeitdruck steht, deutlich mehr Sicherheit als z.B. Assembler. Die Performanceeinbußen sind erträglich und die leichte Nach-vollziehbarkeit fremder Programmteile ist ein nicht zu unterschätzender Vorteil. Für den, der Roboter oder Messstationen bauen möchte und keine Drehbank und kein Elektroniklabor zu Hause stehen hat und schnell zu einem Prototyp kommen will, ist die Lego-Mindstorms-Serie ein schneller Weg zum Erfolg. Java mit leJos und seinen Werkzeugen ist mehr als nur eine Alternative zur Orginalsoftware. Auch Java-Anfänger haben hier die Möglichkeit, schnell zu brauchbaren Ergebnissen zu gelangen.
Allgemein wird man gerade im Bereich embedded Systems / J2ME in naher Zukunft noch eine Menge erwarten dürfen. Im Januarheft des Javamagazins wurden im Beitrag Silicon Java bereits Nativ-Java-Prozessoren vorgestellt. Einer dieser Prozessoren wird in diesem Frühjahr in einem Mindstorms- kompatiblen Set vorgestellt. Wir dürfen also gespannt sein.

 

Kommentare

Ihr Kommentar zum Thema

Als Gast kommentieren:

Gastkommentare werden nach redaktioneller Prüfung freigegeben (bitte Policy beachten).