Lego-Roboter mit Java programmieren

Eclipse

Als IDE empfiehlt es sich, mit Eclipse zu arbeiten. Es gibt ein leJOS Plug-in von Matthias Paul Scholz. Er ist offizieller LEGO NXTpert und hat ein Eclipse Plug-in realisiert, mit dem man die leJOS Firmware aus Eclipse heraus auf dem Brick installieren kann.

Alpha Rex

Beim Alpha Rex handelt es sich um einen Roboter, der sich auf zwei Beinen fortbewegen kann. Der Zusammenbau ist relativ leicht und in ca. 1-2 Stunden möglich. Eine detailliert Bauanleitung ist in der LEGO-MINSTORMS-NXT-Software LabVIEW enthalten. Eine gedruckte Bauanleitung sucht man allerdings vergebens. Für die korrekte Bewegung der Beine ist eine exakte Kalibrierung der Zahnräder der beiden Motoren der Beine sehr wichtig. Nach dem Zusammenbau kann man direkt mit dem Programmieren beginnen.

Abb. 2: LEGO MINDSTORMS NXT
Fortbewegung

Für die Fortbewegung des Alpha Rex sind zwei Motoren in den Beinen verbaut, die synchron betrieben werden müssen. Die leJOS API stellt die Klasse „lejos.nxt.Motor“ zur Steuerung der Motoren zur Verfügung. Ein einfaches Beispiel, um einen Motor um 360° zu drehen würde folgendermaßen aussehen.

Motor.A.setSpeed(720);// 2 RPM
Motor.A.regulateSpeed(true);
Motor.A.rotateTo(360);
while(Motor.A.isRotating();
int angle = Motor.A.getTachoCount();

Hierbei handelt es sich um den Motor, der an den Port A angeschlossen ist. Insgesamt sind bis zu 3 Motoren (Motor.A bis Motor.C) möglich. Bei einer synchronen Steuerung von 2 Motoren muss permanent die Drehung der 2 Motoren angepasst werden. Auch wenn die Drehgeschwindigkeit der Motoren exakt gesteuert werden kann, ist es immer möglich, dass die Bewegung z.B. auf Grund von Hindernissen oder Problemen mit der Mechanik (z.B. Kind fasst in die Zahnräder) nicht exakt ist. Dazu kann man mit der Methode getTachoCount() die Drehbewegung der beiden Motoren abfragen und miteinander vergleichen. Bei Abweichungen wird die Motorgeschwindigkeit bis maximal zum Stillstand korrigiert. In dem Beispiel ist dies in der Klasse WalkThread umgesetzt.

Der dritte Motor dient beim Alpha Rex nicht der Fortbewegung, sondern der Bewegung der Arme und des Kopfes, an denen sich die Sensoren zum Fühlen (Touch-Sensor), zum Hören (Sound-Sensor) und zum Sehen (Ultraschallsensor) befinden.

Sensoren

Beim LEGO MINDSTORMS NXT wird zwischen 2 unterschiedlichen Typen von Sensoren unterschieden. Es gibt analoge Sensoren, bei denen die Werte über einen so genannten A/D-Wandler ermittelt werden, und es gibt Sensoren, die über eine I²C-Bus-Schnittstelle verfügen. Für alle Sensoren von LEGO gibt es vorgefertigte Klassen, die eine einfache Verwendung der Sensoren ermöglichen. Um die Distanz zu einem Gegenstand zu ermitteln, kann man mithilfe des Ultraschallsensors z.B. folgenden Code verwenden.

I2CPort usport = SensorPort.S4;
UltrasonicSensor us = UltrasonicSensor(usport);
int usdist = us.getDistance();

Neben den Sensoren, die von LEGO zur Verfügung gestellt werden, gibt es noch Sensoren und andere Ergänzungen zum LEGO MINDSTORS NXT von anderen Firmen wie z.B. mindsensors.com oder HiTechnic Products. Auch für diese Sensoren gibt es schon fertige Klassen. Eigene oder unbekannte Sensoren kann man auch selbst auf der Basis einiger allgemeiner Klassen verwenden. Für I²C-Bus-Sensoren verwendet man die Klasse lejos.nxt.I2CSensor. So ist es möglich, beliebige Erweiterungen und neue Sensoren zu verwenden, ohne auf eine neue Version von leJOS warten zu müssen.

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.