Dokumentation zum Einsatz des LEGO-Roboters - Autoren: Stefan Bartels, Jan-Hendrik Hagemann, Patricia Ossig, Dominik Reimer, Thore Soltau ...

Die Seite wird erstellt Jens Benz
 
WEITER LESEN
Dokumentation zum Einsatz des LEGO-Roboters - Autoren: Stefan Bartels, Jan-Hendrik Hagemann, Patricia Ossig, Dominik Reimer, Thore Soltau ...
Dokumentation

                       zum Einsatz

          des LEGO-Roboters

Autoren:
Stefan Bartels, Jan-Hendrik Hagemann, Patricia Ossig, Dominik Reimer, Thore Soltau
© 2007/08 Johanneum Lüneburg
Dokumentation zum Einsatz des LEGO-Roboters - Autoren: Stefan Bartels, Jan-Hendrik Hagemann, Patricia Ossig, Dominik Reimer, Thore Soltau ...
Inhaltsverzeichnis
1. Zusammenbau eines LEGO-Roboters.....................................................................................1
   1.1 Stromversorgung                                                                                                                    1
   1.2 Aufbau eines Roboters                                                                                                              1
2. Installation von „Robotics Invention Systems 2.0“ (RIS)....................................................2
3. Verwendung von „Robotics Invention Systems 2.0“ (RIS).................................................3
   3.1 Start und Benutzer-Einrichtung                                                                                                     3
   3.2 Einstellungen / Übertragung der Firmware                                                                                           3
   3.3 Programme der mitgelieferten Bibliothek                                                                                            5
4. Programmieren mit der Entwicklungsumgebung von RIS.................................................6
   4.1 Entwicklungsumgebung des RIS                                                                                                       6
   4.2 Die wichtigsten Programmierbefehle                                                                                                 7
   4.3 Programmierung mit einem Text-Editor                                                                                              15
   4.4 Anzeige von Sensorwerten                                                                                                          17
   4.5 Beispiele für Programmier-Aufgaben                                                                                                18
5. Installation des USB-Tower-Treibers ohne RIS..................................................................18
6. Installation der Phantom-Komponente für Delphi............................................................19
   6.1 Installation der Phantom-Komponente                                                                                               19
   6.2 Verwendung von PbrickTester.exe                                                                                                   20
7. Programme in Delphi mithilfe der Phantom-Komponente..............................................21
   7.1 Grundstruktur eines Programms für den RCX                                                                                         21
   7.2 Dokumentation der Programmbefehle für den RCX                                                                                     22
   7.3 Liste der wichtigsten Programmbefehle für den RCX                                                                                 23
   7.4 Programme auf dem RCX speichern                                                                                                   25
8. Download-Links........................................................................................................................29

Dokumentation LEGO-Roboter, © 2007/08 Johanneum Lüneburg                                                                                 ii
Dokumentation zum Einsatz des LEGO-Roboters - Autoren: Stefan Bartels, Jan-Hendrik Hagemann, Patricia Ossig, Dominik Reimer, Thore Soltau ...
1. Zusammenbau eines LEGO-Roboters
1.1 Stromversorgung
Vor dem Aufbau eines konkreten Roboters muss der RCX (gelber Computer-Baustein) mit
sechs Batterien oder Akkus der Größe AA befüllt werden (siehe Anleitung „Constructo-
pedia“, Seite 4).
Wenn Batterien oder Akkus entnommen wurden, muss die Firmware neu übertragen wer-
den, siehe Kapitel 3.2. Wenn man nur einen Teil der Batterien und Akkus und diese nur
für eine kurze Zeit entfernt hat, kann es sein, dass man um das Übertragen der Firmware
„herumkommt“.

1.2 Aufbau eines Roboters
Ein LEGO-Roboter kann frei gestaltet werden. Ein paar Grundmodelle sind in der Anlei-
tung „Constructopedia“ enthalten: Der „Roverbot“ wird ab Seite 10 beschrieben, der
„Acrobot“ ab Seite 36 und der „Inventorbot“ ab Seite 56. Einige Tipps zu Konstruktionen
sind auf den Seiten 98 bis 101 zusammengefasst.
Weitere Bauanleitungen sind im WWW unter dem Suchbegriff „LEGO Mindstorms Bau-
anleitung“ zu finden. Als Einstiegsseite bietet sich z. B. folgende URL an:
http://www.informatik.uni-kiel.de/inf/von-Hanxleden/mindstorms/Bauplan/
Für alle Roboter gilt, dass die Motoren an den Ausgängen A, B oder C angeschlossen wer-
den müssen, die Sensoren an den Eingängen 1, 2 oder 3.

   Tipps aus der Praxis:
    Vor dem Zusammenbau sollte möglichst die Firmware an den RCX übertragen
     worden sein (siehe Kapitel 3.2).
    Der Roverbot erwies sich als die am besten einzusetzende Roboter-Konstruktion.
     Die Version mit den Beinen bietet sich jedoch nicht an, da sich der Roboter dann
     nicht gleichmäßig in eine Richtung vorwärts bewegen kann.
     Experimentieren kann man auch damit, anstelle von Vorderrädern Gleitfüße zu
     verwenden.
     Die anderen Roboter sind für einen Wettkampf vollkommen ungeeignet, da sie
     (bis auf den Acrobot) nicht fahren können und ihnen die entsprechenden Senso-
     ren fehlen.
     Die Größe der Räder und die Übersetzung sollten dem jeweiligen Verwendungs-
     zweck angepasst werden: Da die Motoren festgelegte Leistungsstufen haben,
     kann ein Roboter mit großen Rädern selbst bei der geringsten Leistungsstufe zu
     schnell sein.
    Im Deckel ausgebreitete Kleinteile können schneller gefunden werden.
    Zum Abmessen der Länge der Stangen kann entweder ein längerer LEGO-Stein
     oder die Klappe am Ende der Anleitung „Constructopedia“ verwendet werden.

Dokumentation LEGO-Roboter, © 2007/08 Johanneum Lüneburg                                1
Dokumentation zum Einsatz des LEGO-Roboters - Autoren: Stefan Bartels, Jan-Hendrik Hagemann, Patricia Ossig, Dominik Reimer, Thore Soltau ...
 Beim Transport des fertigen Roboters sollte man beachten, dass sich der RCX re-
      lativ schnell vom Rest der Konstruktion lösen kann.
     Wenn sich nach dem ersten Test des Roboters herausstellen sollte, dass die
      Fahrtrichtung genau umgekehrt zu den Angaben im Programm ist, müssen die
      Kabelbefestigungen entweder am RCX oder an den Motoren um 180° gedreht
      werden.
     Die Tastsensoren sprechen relativ spät an. Ob ein Tastsensor angesprochen hat
      oder nicht, kann man auf dem Display überprüfen (siehe Kapitel 4.4).

2. Installation von „Robotics Invention Systems 2.0“ (RIS)
Die Installation von „Robotics Invention Systems 2.0“ muss lokal auf einem PC erfolgen.
Für die Installation ist die CD mit der deutschen Programmversion zu verwenden. Bei der
Installation unter Windows 2000 oder neuer sind Administrator-Rechte erforderlich. Bei
PCs mit Festplattenschutz ist dieser vor der Installation zu deaktivieren.
Die CD startet automatisch, es erscheint nebenstehendes Fenster,
bei dem „Installieren“ betätigt wird.
In den nachfolgenden Bildschirmen müssen alle Eingaben bestä-
tigt werden, insbesondere die nachstehende Abfrage bezüglich
des Beibehaltens der aktuelleren DirectX-Version:

Anschließend muss der Computer neu gestartet werden, die CD kann jetzt entnommen
werden.

Nach dem Neustart des Computers startet das Programm auto-
matisch neu. Nach Anklicken von „Ausführen“ startet ein Intro,
das mithilfe der Leertaste abgebrochen werden kann.
Für die folgenden Aktionen ist es sinnvoll, aber nicht notwendig,
dass Lautsprecher an den PC angeschlossen sind, weil die Anwei-
sungen akustisch erfolgen.
In den nächsten Schritten wird der USB-Tower installiert. Dies ist
in jedem Fall notwendig, weil sonst von diesem PC aus keine Kommunikation mit dem
RCX stattfinden kann. Wenn das Bild erscheint, bei dem ein USB-Kabel in einen USB-Port
eingesteckt wird, kann der USB-Tower angeschlossen werden. Nachdem die Installation
abgeschlossen ist, kann das Einrichtungsprogramm abgebrochen werden. (In den folgen-
den Teilen der Installationsanweisungen geht es im Wesentlichen um das Übertragen der
Firmware auf den RCX. Dies ist jedoch in der Regel bereits erfolgt bzw. kann problemlos
zu jeder Zeit wiederholt werden, siehe Kapitel 3.2).
Unter Windows 2000 oder neuer ist zu beachten, dass sich der Computer den USB-Port
merkt, an dem der USB-Tower angeschlossen wurde. Sobald der USB-Tower in einen an-

Dokumentation LEGO-Roboter, © 2007/08 Johanneum Lüneburg                                2
deren Port eingesteckt wird, erscheint die Meldung „Neue Hardware gefunden; LEGO
USB Tower“. Sofern man nicht über Administrator-Rechte verfügt, muss der USB-Tower
an den dem System bereits bekannten Port angeschlossen werden.
Unter Windows 2000 oder neuer ist abschließend ein Registrierungskey zu löschen, der
vom Installationsprogramm versehentlich nicht gelöscht wurde. Es handelt sich um den
Key „RISPostReboot“ im Abschnitt „HKEY_LOCAL_MASCHINE\SOFTWARE\Micro-
soft\Windows\CurrentVersion\Run“

Der Festplattenschutz sollte erst wieder eingeschaltet werden, wenn ein Benutzer angelegt
wurde und bei diesem das Programmieren ohne Tutorium freigeschaltet wurde (siehe Ka-
pitel 3.1).

3. Verwendung von „Robotics Invention Systems 2.0“ (RIS)
3.1 Start und Benutzer-Einrichtung
Nach Starten des Programms und Auswahl von „Ausführen“ startet ein Intro (fallende
LEGO-Steine), das mithilfe der Leertaste abgebrochen werden kann.
Anschließend muss ein bereits existierender Benutzer ausge-
wählt oder ein neuer Benutzer eingerichtet werden.
Für das Anlegen eines neuen Benutzers löscht man das Eingabe-
feld entweder mithilfe des Buttons „Benutzer anlegen“ oder mit
der Backspace-Taste. Sobald auf „Start“ gedrückt wird, ist der
neue Benutzer angelegt und kann in Zukunft über das Menü auf-
gerufen werden.
Nach dem Anlegen eines neuen Benutzers startet ein Intro
(Raumfahrt), das mithilfe der Leertaste abgebrochen werden
kann.
Neue Benutzer müssen das Tutorium durchlaufen, be-
vor programmiert werden kann. Diese Sperre lässt sich
dadurch umgehen, dass im Hauptmenü „Programm“
angeklickt wird und in der nebenstehenden Warnbox
die Option freigegeben wird.

3.2 Einstellungen / Übertragung der Firmware
Um zu den Einstellungen ihres RCX 2.0 zu kommen, klicken Sie bitte auf den
Button „Einstell.“ im Hauptmenü. Platzieren Sie den RCX kurz vor den Tower.

Tower-Reichweite einstellen
Hier kann man die Reichweite des Towers einstellen. Die Ein-
stellung „groß“ ermöglicht eine Kommunikation zwischen
Tower und RCX bis zu einer Entfernung von ca. 6 m, bei „mit-
tel“ ca. 2 m und bei „kurz“ ca. 50 cm (Angaben bei Sichtkontakt zwischen Tower und

Dokumentation LEGO-Roboter, © 2007/08 Johanneum Lüneburg                                3
RCX).
Die Einstellung der Tower-Reichweite ist vor allem dann erforderlich, wenn der RCX im
„Direktmodus“ (siehe Kapitel 6.2 bzw. bei der Programmierung unter Delphi, siehe Kapi-
tel 7) verwendet wird, weil der Tower sonst zu weit sendet und ggf. einen anderen als den
gewünschten RCX anspricht und steuert.

Kommunikation mit dem RCX
Der RCX kann Rückmeldungen zum Tower senden, wie z. B.
die momentan gespeicherten Einstellungen, den Ladezustand
der Batterien bzw. Akkus oder die Version der aktuellen Firm-
ware. In diesem Feld können Sie die Reichweite ihres RCX ein-
stellen: „klein“ entspricht einer Entfernung von max. 40 cm.

Übertragung der Firmware
Vor der Inbetriebnahme des RCX und nach dem Auswechseln
von Batterien oder Akkus muss die Firmware übertragen wer-
den. Die Übertragung dauert ca. 4 min. Alternativ kann die Firmware mithilfe des Pro-
gramms „PbrickTester.exe“ übertragen werden (siehe Kapitel 6.2).
Bei der Übertragung der Firmware werden alle auf den RCX übertragenen Programme ge-
löscht. Die Standard-Programme können ggf. mithilfe der erweiterten Einstellungen (wie
nachstehend beschrieben) wiederhergestellt werden.

Erweiterte Einstellungen
In den erweiterten Einstellungen gibt es einige wichtige Optio-
nen.
Es ist möglich, den Roboter nach einer bestimmten Zeit ohne
Tätigkeit ausschalten zu lassen. Diese Einstellung nennt sich
Timeout und ist standardmäßig auf 15 min gestellt.
Außerdem kann man die Uhr des RCX einstellen.
Es ist auch möglich, Programmplätze („Programmsteckplätze“ genannt) für die Übertra-
gung von RIS-Programmen (siehe Kapitel 4.1) zu sperren („X“) oder freizugeben. Stan-
dardmäßig ist nur der Platz 5 freigegeben, auf den anderen sind einfache Testprogramme
gespeichert. Diese Programme können mit der Schaltfläche „Programme wiederher-
stellen“ wieder auf den RCX übertragen werden, falls sie gelöscht worden sind. Der Pro-
grammplatz 1 wird auch für die Ausführung von Test-Signalen verwendet (siehe Kapitel
4.2). Wenn dieser Programmplatz freigegeben ist, wird das dort liegende Programm bei
Betätigung von „Test“ überschrieben.
Mit der Schaltfläche „Programme löschen“ kann man auf einen Schlag alle auf dem RCX
gespeicherten Programme löschen.
Der Bereich „RCX-Codesensoren“ ist für uns uninteressant, da uns die hier benötigten
Sensoren nicht zur Verfügung stehen.

Dokumentation LEGO-Roboter, © 2007/08 Johanneum Lüneburg                                4
3.3 Programme der mitgelieferten Bibliothek
Die Bibliothek (Button im Hauptmenü), enthält schon von vornherein viele,
mehr oder weniger sinnvolle (oder nervige) Programme, die gleich mit dem
RIS installiert werden. Die dort zu findenden Programme sind meistens eher einfach auf-
gebaut, erfüllen allerdings ihren Zweck. Die Namen der Programme sind fast immer
selbsterklärend, allerdings sollte man sich das Programm doch erst angucken, bevor man
es auf den Roboter überträgt.

Die verschiedenen Programme (für den Roverbot):
Boomerang: Dieses Programm benötigt nur einen Tastsensor.
Der Roboter fährt so lange vorwärts und zählt dabei die Zeit, bis er gegen einen Gegen-
stand fährt. Nach dem Zusammenstoß dreht er um und fährt genau die gleiche Zeit wie-
der zurück, sodass er am Ende an seinem Ausgangspunkt zum Stehen kommt.
Dancer: Man benutzt am besten einen Tastsensor, der an einem längeren Kabel befestigt
ist. Durch einmaliges Drücken kann man den Roboter zum Tanzen bringen.
Explorer: Der Roboter wird im Zick-Zack vorwärts fahren, bis er entweder mit dem linken
oder rechten Tastsensor einen Gegenstand berührt. Bei Kontakt gibt es ein akustisches Sig-
nal, und der Roboter wird die Richtung ändern, um weiter zu erkunden.
Guardbot: Der Guardbot wird hin und her patrouillieren, bis er einen Gegenstand be-
rührt, dann stoppt er. Optional könnte man noch ein Signal einfügen, damit man erkennt,
wenn etwas in die Strecke gelegt wird, die der Roboter bewacht.
Line Follower: Wie der Name schon sagt, wird dieser Roboter einer schwarzen Linie auf
hellem Untergrund folgen. Nicht vom Wackeln des Roboters überrascht sein.
Mozart: Vorsicht, extrem nervig! Wenn der Roboter gegen ein Hindernis fährt, wird je
nachdem, ob der linke oder der rechte Tastsensor berührt wird, ein akustisches Signal aus-
gesendet. Dieses Signal wird umso höher bzw. tiefer, je öfter der entsprechende Sensor ge-
drückt wird.
Touchbot: Dieser Roboter fährt nur, solange man seinen Tastsensor gedrückt hält. Sobald
man aufhört, ihn zu drücken, hält der Roboter an und fährt nicht weiter.
Soundmaker: Dieser Roboter überprüft die Helligkeit des Bodens (bzw. der Umgebung,
wenn der Lichtsensor nicht nach unten gerichtet ist) und erzeugt dementsprechend Ge-
räusche.
Wallhugger: Der Name beschreibt es schon ganz gut, dieser Roboter ist prädestiniert da-
für, an einer Wand entlang zu fahren. Dazu benötigt er einen Tastsensor an Vorder- und
Rückseite.

Dies waren die Programme, die in der Bibliothek für den „Roverbot“ gefunden werden
können. Allerdings gibt es noch mehr Robotervarianten (siehe Kapitel 1.2), die allerdings
nicht so empfehlenswert sind, da man mit ihnen im Vergleich zum Roverbot relativ wenig
Möglichkeiten hat.

Dokumentation LEGO-Roboter, © 2007/08 Johanneum Lüneburg                                 5
4. Programmieren mit der Entwicklungsumgebung von RIS
4.1 Entwicklungsumgebung des RIS
Die Entwicklungsumgebung des RIS erreicht man, indem im Hauptmenü
auf „Programm“ geklickt wird. Anschließend klickt man auf „Roboter
auswählen“ und wählt den verwendeten Roboter aus (in der Regel „Roverbot“). Die Opti-
on „Freistil“ bietet sich nicht an, weil dort große Blöcke (siehe Kapitel 4.2) eingesetzt wer-
den können, die für den verwendeten Roboter keinen Sinn machen, wie z. B. „Tür öffnen“.
Man kann jedoch jederzeit innerhalb der Entwicklungsumgebung auf den Freistil-Modus
durch Auswahl von „Einstellungen | Wechseln zu Freistil“ wechseln.
Das Zusammenstellen eines Programms geschieht so, dass links ein Block (siehe Kapitel
4.2) durch Anklicken ausgewählt wird und rechts an der gewünschten Stelle durch
Mausklick fallen gelassen wird, ggf. also genau über einer Trennstelle zwischen zwei be-
reits vorhandenen Blöcken.
Alle Blöcke können auch frei auf dem Arbeitsfeld positioniert werden
(siehe Abbildung) und können so vor dem Einfügen an die richtige
Stelle beliebig angeordnet werden.
Wenn ein Block im Programm angeklickt wird, haftet dieser Block mit
allen bis zum nächsten Programmstruktur-Ende anhängenden Blöcken
am Mauszeiger. Diese Blöcke sind sofort aus dem Programm entfernt und müssen an an-
derer Stelle wieder abgelegt werden. Wenn ein einzelner Block gelöscht werden soll, wird
dieser also angeklickt, die gesamte Programmstruktur ist frei auf dem Arbeitsfeld abzule-
gen und alle folgenden Blöcke sind durch Anklicken des zweiten Blocks wieder an der ur-
sprünglichen Stelle einzufügen. Der auf der Arbeitsfläche verbliebene Block kann
jetzt angeklickt werden und auf dem Papierkorb abgelegt werden.
Die Navigation durch umfangreiche Programme, die größer als der Bildschirm
sind, geschieht mithilfe der Pfeiltasten im Navigationsfeld. Ein Klick auf den
Punkt in der Mitte stellt die Ausgangssituation (Programm-Startblock ist oben
links in der Ecke) wieder her.
Mithilfe der Felder „+“ und „–“ kann ein Zoom durchgeführt werden, bei dem aber die
Beschriftung der Blöcke nicht mehr gut zu lesen ist.
Eine alternative Navigationsmöglichkeit ist das Aktivieren des Randscrollens („Einstellun-
gen | Randscrollen aktivieren“), bei dem sich das Programm in die entgegengesetzte Rich-
tung bewegt, wenn der Mauszeiger einen Rand des Bildschirms (nicht des Arbeitsfeldes!)
berührt. Auch hier stellt ein Klick auf den Punkt in der Mitte des Navigationsfeldes die
Ausgangssituation wieder her.
Die Bearbeitung der Eigenschaften eines Blocks (siehe Kapitel 4.2) geschieht entweder
durch Anklicken des Blocks mit der rechten Maustaste oder durch Anklicken des Reiters
am rechten Rand des Blocks mit der linken Maustaste.
Das fertige Programm kann an den RCX übertragen und dort ausge-
führt werden. Der Programmplatz (siehe Kapitel 3.2), auf den das Programm übertragen
werden soll, kann mithilfe von „Einstellungen | Downloaden nach Steckplatz X“ ausge-

Dokumentation LEGO-Roboter, © 2007/08 Johanneum Lüneburg                                     6
wählt werden. Mit „Start“ wird das Programm auf dem RCX gestartet, mit „Stopp“ been-
det. Wenn sich der RCX nicht in Reichweite des Towers befindet oder befinden soll, muss
auf dem RCX mithilfe der Taste „Prgm“ der richtige Programmplatz ausgewählt werden
und das Programm mithilfe der Taste „Run“ gestartet werden. Ein Stoppen des Pro-
grammablaufs ist dann wieder mithilfe der Taste „Run“ möglich.
Die Übertragung auf nur einen RCX kann dadurch gewährleistet werden, dass Tower und
RCX bei der Übertragung unter eine IR-undurchlässige Plastik-Box gestellt werden.
Das Öffnen bzw. Speichern eines Programms geschieht wie üblich mithilfe des Menü-
punkts „Datei“.
Eine Besonderheit stellt der Menüpunkt „Bearbeiten | Kopieren“ dar. Wenn dieser ausge-
wählt wurde, erscheint am Mauszeiger das Wort „Kopieren“. Sobald ein Block innerhalb
des Programms angeklickt wird, haften dieser und alle nachfolgenden Blöcke als Kopie
am Mauszeiger. Diese Kopie kann jetzt an einer anderen Stelle abgelegt werden.
Durch Anklicken des Menüpunkts „Hauptmenü“ gelangt man zurück in dasselbe.

4.2 Die wichtigsten Programmierbefehle
Viele der in diesem Kapitel vorgestellten Programmierbefehle kann man auch in der Hilfe-
Funktion zum RIS unter der Rubrik „Befehlsreferenz“ erklärt bekommen. Die Hilfe-Funk-
tion erreicht man entweder im Hauptmenü über „Bibliothek | Programmopedia“ oder in
der Entwicklungsumgebung (siehe Kapitel 4.1) über „Hilfe | Inhalt“.

Große Blöcke
Die großen Blöcke enthalten im Wesentlichen Bewegungsblöcke. Für die meisten
Bewegungsblöcke gilt, dass man ihnen eine Dauer zwischen 0,01 und 327,67 Se-
kunden zuordnen kann.
Die wichtigsten Bewegungsblöcke sind „Vorwärts“, „Rückwärts“, „Links“ und
„Rechts“. Die Blöcke „Linkskehre“ und „Rechtskehre“, bei denen die beiden Mo-
toren gegenläufig geschaltet werden, haben sich häufig als nützlicher erwiesen als
die Befehle „Links“ und „Rechts“, bei denen ein Motor steht.
Die Blöcke „Schütteln“, „Tanzen“, „Zufällige Bewegung“ und „Zickzack“ sind re-
lativ unbrauchbar und eher als Gag gedacht. Allenfalls den „Zickzack“-Block
könnte man eventuell in Kombination mit dem Lichtsensor zum Wiederauffinden
eines schwarzen bzw. weißen Streifens benutzen.
Die Blöcke haben nach dem Einfügen in ein Programm einen kleinen grauen Kasten in der
linken oberen Ecke. Mit einem Klick auf diesen Kasten öffnet sich eine Auflistung, aus
welchen kleinen Blöcken (siehe unten) dieser große Block zusammengesetzt ist. An jedem
dieser kleinen Blöcke können ggf. Änderungen oder Einfügungen vorgenommen werden.
Das RIS verlangt dann allerdings, dass der Block in einen eigenen Block umgewandelt
wird und neu benannt wird.
Es gibt weitere große Blöcke unter der Rubrik „Global“, auf die jeweils bei den zugehöri-
gen kleinen Blöcken hingewiesen wird.

Dokumentation LEGO-Roboter, © 2007/08 Johanneum Lüneburg                                7
Kleine Blöcke
Die kleinen Blöcke gliedern sich in verschiedene Unterabteilungen. Die Unterab-
teilungen sind „Leistungsblöcke“, „Soundblöcke“, „Kommunikationsblöcke“,
„Variablenblöcke“, „Rücksetzblöcke“ und „erweiterte Blöcke“. Im Allgemeinen
kann man sagen, dass die kleinen Blöcke nicht unbedingt bei den ersten Program-
mierversuchen benutzt werden sollten, da diese schwieriger zu kontrollieren sind
als die großen Blöcke.
Leistungsblöcke
Die Leistungsblöcke gliedern sich in die einzelnen Punkte „Ein“, „Ein für“, „Aus“, „Leis-
tung einstellen“, „Richtung einstellen“ sowie „Richtung umkehren“ und gelten für die an
den Ausgängen A, B oder C angeschlossenen Motoren. Jede beliebige Kombination von
Motorschaltungen kann damit realisiert werden. Die gewählte Funktion gilt nur für die
mit einem „X“ versehenen Ausgänge (siehe nachstehende Abbildungen).

Der Befehl „Ein“ dient dazu, die Motoren zu aktivieren.

               „Ein für“schaltet die Motoren für einen gewissen Zeitraum
               ein. In der Standardkonfiguration wird mit dem Block „Ein
               für“ der jeweilige Ausgang für eine Sekunde eingeschaltet.
               Die Zeitdauer kann jedoch zwischen 0,01 und 327,67 Sekun-
               den variiert werden.

                Der Befehl „Aus“ schaltet die Motoren ab. Dabei ist es mög-
                lich, zu bestimmen, ob der abgeschaltete Motor auf Leerlauf
                geschaltet oder gebremst werden soll.
                Dieselbe Funktion ermöglicht der große Block „Motoren-
stopp“ unter der Rubrik „Global“, auf den hier deshalb nicht weiter einge-
gangen werden soll. Im Gegensatz zum kleinen Block „Aus“ wird beim
großen Block „Motorenstopp“ innerhalb eines Programms jedoch nicht an-
gezeigt, ob die Motoren in den Leerlauf geschaltet oder gebremst werden.

               Mit dem Befehl „Leistung einstellen“ kann man die Leistung der Motoren
               festlegen. Die Leistung kann zwischen 1 und 8 gewählt werden, wobei 1
               für ganz langsam und 8 für ganz schnell steht. Die Leistung kann auch
               durch Klicks auf das Plus- bzw. Minus-Zeichen eingestellt werden oder in-
               dem man direkt auf das entsprechende grüne Kästchen klickt.
               Die Leistung kann für jeden Ausgang individuell eingestellt werden, was
               jedoch nicht immer ratsam ist.
               Die tatsächliche Geschwindigkeit des Roboters hängt dann von der Über-
               setzung und der Größe der Räder ab (siehe Kapitel 1.2).

Dokumentation LEGO-Roboter, © 2007/08 Johanneum Lüneburg                                8
Mit dem Befehl „Richtung einstellen“ ist es möglich, die Drehrichtung der
Motoren festzulegen. Um die Drehrichtung zu ändern, genügt ein Klick
auf den grauen Pfeil. Die Drehrichtung kann für jeden Motor individuell
eingestellt werden. Bei diesem Programmierblock ist es irrelevant, welche
Einstellung der Motor vorher hatte: Die Drehrichtung wird absolut festge-
legt.
Der große Block „Steuerung“ aus der Rubrik „Global“ ist eine Kombinati-
on aus „Richtung einstellen“, „Ein für“ und „Aus“. Die Anzeige dieses
Blocks innerhalb eines Programms ist jedoch nicht sehr aussagekräftig, so dass besser die
kleinen Blöcke verwendet werden.

               Im Gegensatz dazu dient der Block „Richtung umkehren“ dazu, die Dreh-
               richtung des Motors relativ zu ändern. Drehte der Motor beispielsweise im
               Uhrzeigersinn, so dreht er sich nach Anwendung dieses Blocks gegen den
               Uhrzeigersinn. Bei diesem Block ist es also nicht möglich, die Drehrichtung
               absolut einzustellen.

Soundblöcke
Die Soundblöcke gliedern sich in die Blöcke „Kurzton“, „Ton“, „Ton aus“ und
„Ton ein“.
Jedes Tonsignal kann während der Einstellung durch Betätigung von „Test“ vom
RCX als Hörprobe ausgegeben werden.

            Es ist zu beachten, dass der RCX das Programm weiter ausführt, ohne auf das
            Ende des Tonsignals zu warten. Problematisch ist dies insbesondere, wenn di-
            rekt nach dem Tonsignal der Block „Programmende“ (siehe unten) folgt. Ggf.
            muss nach dem jeweiligen Tonsignal ein Warten-Block (siehe unten) eingefügt
            werden, damit z. B. mehrere Tonsignale nacheinander abgespielt werden.
            Auf der anderen Seite können auf diesem Wege bis zu 8 Tonsignale mehr oder
            weniger gleichzeitig abgespielt werden.

Der Block „Kurzton“ dient dazu, einfache Töne abzuspielen. Bei Kurzton
kann gewählt werden, welchen der vorgegebenen 6 Töne der Roboter wie-
dergeben soll.

               Mit dem Block „Ton“ ist es möglich, Töne zu erzeugen, de-
               ren Dauer und Frequenz man individuell einstellen kann.

               Der Block „Ton aus“ sorgt dafür, dass der RCX so lange keinen Töne mehr
               erzeugt, bis dieser Befehl durch den Block „Ton ein“ aufgehoben wird.

Dokumentation LEGO-Roboter, © 2007/08 Johanneum Lüneburg                                 9
Unter den großen Blöcken gibt es unter der Rubrik „Global“ noch die Sound-
blöcke „Instrument“ und „Melodie“. Bei „Instrument“ kann ein bestimmter Ton
auf einer Klaviatur ausgewählt werden (der Ton „H“ ist jedoch in der englischen
Notation „B“ angegeben) sowie dessen Länge, bei „Melodie“ kann ein fertiges Ar-
rangement aus verschiedenen Ton-Kombinationen ausgewählt werden, dessen genauen
Inhalt man durch Anklicken des kleinen grauen Kastens in der linken oberen Ecke erfah-
ren kann.
Beide großen Blöcke haben bereits Warte-Blöcke eingebaut, so dass das oben beschriebene
Problem nicht auftritt.

Kommunikationsblöcke
Die Kommunikationsblöcke gliedern sich in die Blöcke „IR-Meldung senden“, „IR-
Meldung löschen“, „Wert anzeigen“ und „Uhr anzeigen“.

                Der Block „IR-Meldung senden“ weist den RCX an, eine Infrarot-
                meldung an einen anderen RCX zu senden. Hierbei muss ausge-
                wählt werden, welche der Zahlen 1 bis 255 als IR-Meldung gesen-
                det werden soll. Der empfangende RCX kann dann z. B. auf diese Meldung
                besonders reagieren (siehe „Sensorenblöcke“).

             Der Block „IR-Meldung löschen“ sorgt dafür, dass der RCX alle bisher
empfangenen IR-Meldungen löscht. Dieser Block ist notwendig, weil der RCX nur eine
Meldung speichern kann, diese also löschen muss, bevor er eine neue Meldung empfan-
gen kann.

Der Block „Wert anzeigen“ dient dazu, den Wert einer vorgegebenen, fes-
ten Zahl, einer Variablen, einer IR-Meldung, eines Sensors oder des Ti-
mers im Display des RCX anzuzeigen.
„Uhr anzeigen“ dient dazu, die mitlaufende Uhr im Anzeigefenster des
RCX anzuzeigen. Die Uhr zeigt an, wie lange das Programm ausgeführt
wurde, sofern nicht extern eine andere Zeit eingestellt wurde (siehe Kapi-
tel 3.2).

Variablenblöcke
Die Variablenblöcke gliedern sich in „Einstellen“, „Addieren“, „Subtrahieren“,
„Multiplizieren“, „Dividieren“, „Positiv“ und „Negiere“.
Die Variablen sind Bausteine, die mit Zahlenwerten arbeiten. Der RCX kann da-
durch Informationen laden und speichern. Der Wert einer Variablen kann aus
dem Zahlenbereich –3276,8 bis +3276,7 gewählt werden.
Das Erstellen einer Variablen geschieht entweder mithilfe des Menüpunkts „Bear-
beiten | Variable hinzufügen“ – in diesem Fall hat die Variable den Wert null –
oder durch Auswahl von „Neue Variable“ im nachstehend beschriebenen Block
„Einstellen“.

Dokumentation LEGO-Roboter, © 2007/08 Johanneum Lüneburg                             10
Der Block „Einstellen“ kann benutzt werden, um Variablen
zu verändern oder zu erstellen. Es kann sowohl ausgewählt
werden, welche Variable eingestellt werden soll, als auch
welcher Wert eingestellt werden soll bzw. worauf diese Va-
riable reagieren soll.

                                 Der Block „Addieren“ wird verwendet,
                                 um einen bestimmten Wert zu einer Va-
                                 riablen hinzuzuaddieren. Dabei kann sowohl eingestellt
                                 werden, wie groß dieser Wert sein soll, als auch zu wel-
                                 cher Variable er hinzuaddiert werden soll.

Die Blöcke „Subtrahieren“, „Multiplizieren“ und „Dividieren“ sind von den Einstellmög-
lichkeiten mit dem Block „Addieren“ identisch, zu den Einstellungen siehe
Bilder beim Block „Addieren“.

Der Block „Positiv“ dient dazu, den Betrag eines Variablenwerts als neuen
Variablenwert zu setzen.
„Negieren“ negiert den Wert einer Variablen. Die Bedienung des Negie-
ren-Blocks ist identisch mit der des Positiv-Blocks.

Rücksetzungsblöcke
Die Rücksetzungsblöcke gliedern sich in „Licht zurücksetzen“ und „Timer zu-
rücksetzen“ sowie weitere Blöcke, die wegen der fehlenden Sensoren nicht ver-
wendet werden können und grau unterlegt sind.

               Der Befehl „Licht zurücksetzen“ dient dazu, die Lichtbedingungen
               im Raum zu testen und die Grundeinstellung festzulegen. Allerdings wird
               dabei immer auf die automatische Grundeinstellung zurückgesetzt, manu-
               elle Einstellungen bleiben unberücksichtigt. In der Programmeinstellung
               kann ausgewählt werden an welchem Ausgang der zurückzusetzende Sen-
               sor befestigt ist.

„Timer zurücksetzen“ setzt den Timer zurück. Es gibt drei Timer, die ein-
zeln zurückgesetzt werden können.

Dokumentation LEGO-Roboter, © 2007/08 Johanneum Lüneburg                               11
Erweiterte Blöcke
Die Erweiterten Blöcke bestehen aus „Priorität festlegen“, „Leistung ein“, „Leis-
tung aus“, „Globale Umkehr“, „Globale Richtung“ und „Programmende“.

               Mit dem Block „Priorität festlegen“ ist es möglich, die Prioritäts-
               stufe für einen Block festzulegen. So kann z. B. die Priorität des
               Lichtsensors höher als die des Berührungssensors gesetzt werden.
               Im Normalfall sind bestimmte Standardwerte für die Sensoren ein-
               gerichtet. Die höchste Priorität beträgt 1, die niedrigste 8. In Schlei-
               fen oder „Ja/Nein“-Blöcken sollten keine Prioritäten festgelegt wer-
               den, da es sonst zu Fehlern kommen kann. Das Festlegen der Prioritätsstu-
               fe ist vor allem bei den Sensorenblöcken (siehe unten) von Bedeutung.

Der Block „Leistung ein“ dient dazu, Motoren wieder ein-
zuschalten, die mit dem Befehl „Leistung aus“ ausgeschal-
tet wurden. Es kann für jeden Motor einzeln festgelegt
werden, ob er wieder eingeschaltet werden soll. Der Block
„Leistung aus“ dient dazu, die Leistung eines oder aller
Motoren zu stoppen und somit auszuschalten.

                Der Befehl „Globale Umkehr“ kehrt die Polarität der Motoren um, der
                RCX fährt dann andersherum. „Globale Umkehr“ hat den selben Effekt
                wie das Umdrehen der Anschlusskabel. Im Gegensatz zu „Richtung Um-
                kehren“ (siehe oben) laufen dann nicht alle Befehle normal, sondern die
                Richtung aller Befehle wird umgekehrt.

Mit dem Befehl „Globale Richtung“ kann die Drehrichtung der einzelnen
Motoren festgelegt werden. Läuft der Motor vorwärts, so muss der Pfeil
im Uhrzeigersinn angezeigt werden und alle Bewegungen führen in die
richtige Richtung, beim Befehl „Vorwärts“ fährt der Roboter also vor-
wärts. Laufen die Motoren rückwärts, so zeigt der Pfeil gegen den Uhrzei-
gersinn und der Befehl „Vorwärts“ führt dazu, dass der RCX rückwärts
fährt. Auch hier kann jeder Motor einzeln angewählt und eingestellt wer-
den.

Der Befehl „Programmende“ beendet alle aktuell laufenden Programmroutinen.

Dokumentation LEGO-Roboter, © 2007/08 Johanneum Lüneburg                              12
Warten-Blöcke
Die Warten-Blöcke bestehen aus „Warte“ und „Warte bis“.

                Bei „Warte“ kann ein vorgegebener Wert oder eine frei wählbare Dauer
                zwischen 0,01 und 327,67 Sekunden eingegeben werden, die der Roboter
                warten soll, bis er mit der Programmausführung fortfährt.
                Darüber hinaus kann die Wartezeit zufallsgesteuert sein oder vom Inhalt
                einer Variablen abhängig gemacht werden.

Bei „Warte bis“ wartet der Roboter so lange, bis ein bestimmtes Sensorereignis eintritt.
Hier muss allerdings festgelegt werden, welcher Sensor das Ereignis auslösen soll und
welches genau:

Wiederholungsblöcke
Die Wiederholungsblöcke setzen sich zusammen aus „Wiederholen“, „Ständig
Wiederholen“, „Wiederholen während“ und „Wiederholen bis“.

                           Der Block „Wiederholen“ dient dazu, eine bestimmte
                           Anzahl von Wiederholungen festzulegen. Die Befehle,
                           die wiederholt werden sollen, müssen dazu in den Block hin-
                           eingesetzt werden.

„Ständig Wiederholen“ ist ein sehr nützlicher Befehl, der gut in Kombination mit Sensoren
verwendet werden kann. Mit diesem Befehl wird eine Aktion ständig wiederholt, bis das
Programm gestoppt wird.

„Wiederholen bis“ überwacht ständig eine Variable oder einen Sensor und beendet die
Wiederholungssequenz, sobald das Ereignis eintritt.
„Wiederholen während“ funktioniert ähnlich wie „Wiederholen bis“. Allerdings prüft die-
ser Block die Variable bzw. den Sensor nur am Ende jeder Wiederholung.

Dokumentation LEGO-Roboter, © 2007/08 Johanneum Lüneburg                               13
Ja-oder-Nein-Block
Der Ja-oder-Nein-Block ist gut geeignet zur Verwendung mit Sensoren, da bei die-
                sem Block festgelegt werden kann, welche unterschiedlichen Ver-
                haltensweisen der Roboter aufgrund eines Sensor-Ereignisses zeigen soll.
                Die Programmierung ist als Alternative möglich z. B. in der Form, dass
                der Roboter stehen bleiben soll, wenn ein Hindernis berührt wird (unter
                „Ja“) und weiterfährt, wenn er keins findet (unter „Nein“).
                Gerade bei umfangreichen Programmen kann die Übersichtlichkeit des
                Programms dadurch erhöht werden, dass der Inhalt eines Ja-oder-Nein-
Blocks durch Klicken auf das Kästchen oben links versteckt wird. Auf demselben Weg
wird der Inhalt wieder angezeigt.

Eigene Blöcke
Eigene Blöcke entsprechen in Delphi den Prozeduren. Es kann ein „Neuer eigener
Block“ definiert werden, der dann mit Inhalten, also kleinen Blöcken, gefüllt wer-
den kann, oder es kann ein großer Block z. B. nach einer Veränderung des Inhalts
           (siehe oben) als eigener Block abgelegt und dann im Programm verwendet wer-
           den. Wenn ein eigener Block aus der Liste der eigenen Blöcke gelöscht werden
           soll, muss er angeklickt und auf dem Papierkorb abgelegt werden.
           Der Vorteil der eigenen Blöcke liegt vor allem darin, dass sich eine Verände-
rung, die an einem der Blöcke im Programm vorgenommen wurde, automatisch auf alle
eigenen Blöcke gleichen Namens auswirkt – so, wie es auch bei einer Prozedur in Delphi
geschieht.

Sensorenblöcke
Im Gegensatz zu der bisher dargestellten imperativen Programmierung, bei der
die Befehle der Reihe nach abgearbeitet werden, erlauben die Sensorenblöcke eine
ereignisgesteuerte Programmierung. Neben den bekannten Berührungs- und
Lichtsensoren kann hier auch ein Timer, ein empfangenes IR-Signal oder eine Va-
riable abgefragt werden.
                                        Die unterschiedliche Art der Programmie-
                                        rung wird in der Entwicklungsumgebung des RIS
                                        dadurch dargestellt, dass die zugehörigen Pro-
                                        grammteile neben dem eigentlichen Hauptpro-
                                        gramm stehen und bei
Eintreten des bezeichneten Ereignisses ausgeführt werden.

Die Einstellungsmöglichkeiten der jeweiligen Sensoren entspre-
chen im Prinzip den oben beschriebenen Möglichkeiten. Lediglich
der IR-Sensor ist neu und kann entsprechend der nebenstehenden
Grafik eingestellt werden. Mithilfe dieses Sensors ist eine Kommu-
nikation zwischen zwei RCX möglich, die dann entsprechend auf-
einander reagieren können.

Dokumentation LEGO-Roboter, © 2007/08 Johanneum Lüneburg                              14
4.3 Programmierung mit einem Text-Editor
Prinzipiell braucht man die Entwicklungsumgebung von RIS zum Programmieren seines
Roboters nicht. Es reicht ein einfacher Text-Editor wie Notepad o. Ä., um einen neuen
Quellcode zu erzeugen, bzw. einen zuvor programmierten zu verändern.
Im RIS erstellte Programme werden als LSC-Datei abgespeichert, was für „Lego Script
Code“ steht. Eine Dokumentation dieser Script-Code-Sprache ist im Dokument „Script
Programs.pdf“ enthalten, das Bestandteil des „LEGO Mindstorms SDK“ ist. Bei den LSC-
Dateien handelt es sich um normale Text-Dateien, die mit jedem Text-Editor bearbeitet
werden können.
Das gesamte Verfahren ist jedoch recht umständlich, so dass es sich nicht für den „Alltags-
gebrauch“ eignet. Aus diesem Grund soll die Darstellung hier auf ein Beispiel beschränkt
werden.

Zunächst soll ein Programm „Licht.lsc“ als Quelltext (links) und als Programm im RIS
(rechts) gegenübergestellt werden:
program test {
     #include 
     #include 
     #include 
     #include 
     var Lenkzahl = 0
     event equal_LenkzahlEventEqual when Lenkzahl = 500

    sensor light1 on 1
    light1 is light as percent
    event lDark_light1EventLow when light1 < 45
    event lBrite_light1EventHigh when light1 > 45

    macro ENDE {
         stop tasks
    }
    macro LICHT1 {
         on [ A C ]
         power [ A C ] 2
         direction [ A C ] [ ]
         wait until lBrite_light1EventHigh
         off [ A C ]
    }
    macro LICHT2 {
         on [ A C ]
         Lenkzahl += 10
         sound 1
         power [ A C ] 3
         direction [ A ] [ C ]
         wait until lDark_light1EventLow
         off [ A C ]
    }

    main {
         ext InterfaceType "kAcroBot"
         rcx_ClearTimers
         bbs_GlobalReset([A B C])
         trigger lDark_light1EventLow
         trigger lBrite_light1EventHigh
         try {
              repeat {
               LICHT1
               LICHT2
              } until equal_LenkzahlEventEqual
         } retry on fail
         try {
              ENDE
         } retry on fail
    }
}

Dokumentation LEGO-Roboter, © 2007/08 Johanneum Lüneburg                                 15
Man sieht rechts, dass das Programm aus drei eigenen Blöcken besteht, wobei „Licht 1“
und „Licht 2“ so lange wiederholt werden, bis eine Variable einen bestimmten Wert er-
reicht. Erst dann wird der Block „Ende“ ausgeführt.
Guckt man sich jetzt den Quellcode (z. B. in Notepad2) an, kann man hier die drei Blöcke
schnell wiederfinden, nur dass sie hier „macro XXXXXX“ heißen.

Schauen wir uns jetzt die Blöcke genauer an. Wir beginnen mit „Licht 1“:
Die Ähnlichkeiten im Aufbau sind leicht zu erkennen. Es fällt leicht, die im RIS-
Programm verwendeten Befehle im Quellcode (siehe oben) wiederzufinden bzw.
den ganzen Block zu übertragen.
Der Block „Licht 2“ ist im Prinzip genauso aufgebaut, was man auch im Quelltext
auf der vorigen Seite sehen kann.

Schaut man sich den kompletten Quellcode an, kann man auch leicht herausfin-
den, dass die verwendete Variable „Lenkzahl“ heißt und wie sie verwendet wur-
de.
Interessant ist ebenfalls noch der untere Teil des Quellcodes, aus dem hervorgeht, in wel-
cher Reihenfolge die Blöcke ausgeführt werden und wie oft dies geschieht.

Mit diesem Wissen und der Datei „Script Programs.pdf“ bewaffnet könnte man theore-
tisch in einem Text-Editor einen „eigenen Block“ schreiben, der dann später in der RIS-
Entwicklungsumgebung angezeigt wird und dort tatsächlich funktioniert.
Dazu speichert man den Quellcode als LSC-Datei ab und öffnet diese Datei in der Ent-
wicklungsumgebung von RIS. Wenn man ein im RIS geladenes Programm mit einem
Text-Editor ändert, muss dieses neu geladen werden; einen „Aktualisieren“-Button gibt es
leider nicht.

Es kann passieren, dass man außerhalb der Entwicklungsumgebung einen Quellcode er-
zeugt, der syntaktisch nicht korrekt ist. Das Problem
wird deutlich, sobald man den erzeugten Quellcode in
die Entwicklungsumgebung laden will. In diesem Fall
erscheint nebenstehendes Fenster. Bei Klick auf „Ok“
landet man in der Entwicklungsumgebung in einem
leeren Programm. Man muss sich also auf die Suche nach dem Fehler begeben und das
Programm erneut in einen Text-Editor laden.

Es kann allerdings auch passieren, dass das Programm einen semantischen Fehler enthält,
der nicht als (syntaktischer) Fehler erkannt wird, so dass das Programm trotzdem geladen
wird.
So kann z. B. die Leistung der Motoren in der Entwicklungsumgebung nur auf einen Wert
von maximal 8 eingestellt werden. Programmiert man jetzt in einem Text-Editor, kann die-
ser Wert auch auf höhere Werte, z. B. auf 12, eingestellt werden. Sogar in der Ent-
wicklungsumgebung wird die Leistung noch mit dem Wert 12 angezeigt.

Dokumentation LEGO-Roboter, © 2007/08 Johanneum Lüneburg                                16
Will man das Programm aber auf den RCX übertra-
gen, erscheint nebenstehende Meldung, mit der unse-
re „Tuningversuche“ endgültig gescheitert sind:

4.4 Anzeige von Sensorwerten
Häufig funktioniert ein Programm nicht so, wie be-
absichtigt. In solchen Fällen ist es hilfreich, die aktu-
ellen Werte der Sensoren, z. B. den Helligkeitswert des Lichtsensors, anzeigen zu lassen,
damit das Programm entsprechend korrigiert werden kann.

Der einfachste Weg zum Anzeigen eines Sensorwerts ist die Verwen-
dung des eingebauten Displays am RCX. Nach (ggf. mehrfachem) Be-
tätigen der Taste „View“ am RCX zeigt ein kleiner Pfeil auf den ge-
wünschten Sensor; in der Mitte wird dann der aktuelle Wert des Sensors angezeigt. Durch
mehrfache Betätigung der Taste „View“ wird die Standard-Anzeige des Displays wieder-
hergestellt.
Beim Lichtsensor schwanken die Werte zwischen ca. 30 (dunkel) und ca. 60 (hell). Bei ei-
nem Berührungssensor werden die Werte 0 (nicht betätigt) und 1 (betätigt) angezeigt.
Wenn die angezeigten Werte völlig von diesen Werten abweichen, liegt es meistens daran,
dass der RCX noch nicht „weiß“, welcher Sensor an dem jeweiligen Eingang angeschlos-
sen ist. Beim Lichtsensor merkt man dies u. a. auch daran, dass die rote LED gar nicht
leuchtet. Zur korrekten Zuordnung geht man im RIS folgendermaßen vor: Es wird ein
neues Programm geöffnet, dem man den gewünschten Sensorenblock hinzufügt (siehe Ka-
pitel 4.2). Wenn man in den Folgebildschirmen den richtigen Eingang wählt, zweimal
„Weiter“ und abschließend „Test“ betätigt, „weiß“ der RCX ab jetzt, welcher Sensor an
diesem Eingang angeschlossen ist. Das begonnene Programm kann jetzt wieder geschlos-
sen werden.

Eine andere Möglichkeit stellt das Hilfsprogramm „Sensorlink“ dar. Wenn man
ein neues Programm öffnet und rechts am Programmblock „Unbekannt“ auf
den „Bearbeiten-Button“ klickt und wenn es eine IR-Verbindung zwischen dem
Tower und dem eingeschalteten RCX gibt, öffnet sich folgender Bildschirm,
dem alle gewünschten Daten entnommen werden können:
                                                Auch hier gilt wieder, dass dem RCX be-
                                                kannt sein muss, welche Sensoren sich
                                                an dem jeweiligen Eingang befinden.
                                                Darüber hinaus ist es mit dem Sensor-
                                                link-Tool sehr einfach möglich, sich die
                                                aktuellen Werte einer beliebigen Varia-
                                                ble etc. anzeigen zu lassen.

Dokumentation LEGO-Roboter, © 2007/08 Johanneum Lüneburg                               17
4.5 Beispiele für Programmier-Aufgaben
Gerade zu Beginn des Programmier-Einsatzes ist es notwendig, dass die Schülerinnen und
Schüler mit dem grundsätzlichen Ablauf einer Programmierung vertraut werden. Dazu
sollten möglichst einfache Programmier-Aufgaben gestellt werden, die noch keine Senso-
ren verwenden.
   Zu Beginn soll der Roboter grundsätzlich Pieptöne ausgeben, deren Anzahl der Num-
     mer der Gruppe entspricht. (Hintergrund: So lässt sich immer leicht erkennen, ob der
     Roboter auch tatsächlich das „eigene“ Programm ausführt oder evtl. per IR-Schnitt-
     stelle das Programm einer anderen Gruppe „aufgeschnappt“ hat.)
   Der Roboter soll etwa zwei Meter vor und wieder zurückfahren. Dabei dienen A4-
     Blätter als Markierung von Start-Feld und 2-m-Marke; sie sollen aber nicht per Licht-
     sensor erkannt werden.
     Variation: Der Hinweg soll langsam, der Rückweg schnell zurückgelegt werden.
   Der Roboter soll einen quadratischen Karton umrunden, ohne diesen zu berühren,
     und am Ende wieder im Startfeld anhalten.
Mit fortschreitender Kenntnis können Sensoren eingesetzt werden:
   Oben auf dem Roboter wird ein Berührungssensor aufgesetzt. Bei Betätigung des Tas-
     ters setzt sich der Roboter für 2 s in Bewegung.
     Variation: Der Roboter wird mit dem Taster auch wieder gestoppt.
   Der Roboter soll sich vom Startfeld aus langsam auf ein Hindernis zu bewegen. Dabei
     soll er jede halbe Sekunde einen Piepton von sich geben (als Zeichen, dass alles in
     Ordnung ist). Beim Auftreffen auf das Hindernis soll er anhalten, drei Pieptöne von
     sich geben, zwei Sekunden „überlegen“ und dann „schweigend“ einen Meter zurück-
     setzen.
     Variation: Der Roboter soll versuchen, an dem Hindernis vorbei zu fahren. Hinter
     dem Hindernis befindet sich eine weiße Markierungslinie, die erkannt werden soll.
   Der Roboter soll in einer Arena aus zwei weißen Markierungslinien geradeaus fahren
     und dabei gelegentlich zufällig nach links oder rechts drehen, wieder geradeaus fah-
     ren usw. Trifft er auf die Arenen-Begrenzung, muss er anhalten.
     Variation 1: Bei Entscheidung „links“ gibt der Roboter drei Pieptöne, bei Entschei-
     dung „rechts“ fünf Pieptöne von sich.
     Variation 2: Der Roboter soll sich wieder der Arena zuwenden.

5. Installation des USB-Tower-Treibers ohne RIS
Unter Windows 2000 oder neuer sind für die Aktionen dieses Kapitels Administrator-
Rechte erforderlich.
Zuerst muss die Datei „tower164.zip“ entpackt werden. Im Verzeichnis steht dann eine
Datei „setup.exe“, die die Installation des USB-Tower-Treibers übernimmt. Nach Informa-
tion der ebenfalls entpackten Installationsanleitung funktioniert dies jedoch nur unter
Windows 98/ME bzw. Windows XP problemlos. Zum Abschluss fordert das Programm
zum Einstecken des USB-Towers auf.

Dokumentation LEGO-Roboter, © 2007/08 Johanneum Lüneburg                                18
Nachdem der Tower eingesteckt wurde, wird die Installationsroutine durchlaufen, bei der
am Anfang bei der Frage, ob eine Verbindung zu Windows Update durchgeführt werden
soll, „Nein, diesmal nicht“ ausgewählt werden sollte. Die restlichen Option werden wie
voreingestellt übernommen.
Abschließend sollte noch in der
Systemsteuerung der „LEGO USB
Tower“ aufgerufen werden. Im
Register „General“ kann wie im
Kapitel 3.2 beschrieben die Reich-
weite des USB-Towers eingestellt
werden. Beim Register „Advan-
ced“ sollten die angezeigten Time-
out-Zeiten verdoppelt werden.

6. Installation der Phantom-Komponente für Delphi
Für die Programmierung des RCX unter Delphi (siehe Kapitel 7) ist es nicht notwendig,
die gesamte Phantom-Komponente zu installieren (siehe Kapitel 6.1). Es reicht in diesem
Fall, die Datei „Phantom.dll“ wie in Kapitel 6.1 beschrieben als ActiveX-Komponente in
Delphi zu importieren. Insbesondere der PbrickTester (siehe Kapitel 6.2) rechtfertigt je-
doch die Installation der gesamten Phantom-Komponente.

6.1 Installation der Phantom-Komponente
Unter Windows 2000 oder neuer sind für die Aktionen dieses Kapitels Administrator-
Rechte erforderlich.
Zu Beginn der Installation muss die Installationsdatei „Phantom.msi“ der Firma Fenestra-
Software ausgeführt werden. Nach der Installation steht im Verzeichnis „C:\Programme\
Phantom\Samples\PhantomTester“ die Datei „PbrickTester.exe“ zur Verfügung, mit der
der RCX direkt getestet bzw. gesteuert werden kann (siehe Kapitel 6.2).
Anschließend muss die installierte Phantom-Komponente
noch als Komponente in Delphi integriert werden. Dazu
wählt man in Delphi „Komponente | ActiveX importieren...“
aus. Für den Fall, dass in der obigen Liste noch nicht die „Fe-
nestra Software Phantom 1.0 Type Library“ aufgelistet sein
sollte, muss zuerst mithilfe des Buttons „Hinzufügen...“ die
Datei „C:\Programme\Phantom\Bin\Phantom.dll“ ausge-
wählt werden; im Auswahlfenster muss dazu der Dateityp
auf „Alle Dateien (*:*)“ eingestellt werden.
Mithilfe des Buttons „Installieren...“ wird die Komponente in
das Delphi-System integriert. Während der Installation sind
alle Optionen mit „Ok“ bzw. „Ja“ zu bestätigen.

Dokumentation LEGO-Roboter, © 2007/08 Johanneum Lüneburg                               19
Die Position der Datei „Phantom.dll“ darf anschließend nicht mehr verändert werden, da
Delphi auf diese Datei bei Verwendung der ActiveX-Komponente ständig zurückgreift.

6.2 Verwendung von PbrickTester.exe
Die Datei „PbrickTester.exe“ im Verzeichnis „C:\Programme\Phantom\Samples\Phan-
tomTester“ ermöglicht den Test der Kommunikation zwischen USB-Tower und RCX. Vor
der Verwendung des Programms muss jedoch zunächst der USB-Tower entweder mithilfe
des RIS (siehe Kapitel 2) oder direkt (siehe Kapitel 5) installiert worden sein. Für die Aus-
führung wird außerdem die Datei „COMDLG32.OCX“ benötigt. Diese wird vom „LEGO
Mindstorms SDK“ automatisch im Verzeichnis „C:\Windows\system32“ installiert. Wenn
man das SDK nicht installieren möchte, reicht es, diese Datei in dem Verzeichnis abzule-
gen, in dem sich die Datei „PbrickTester.exe“ befindet.
Nach dem Start des Programms muss zu-
nächst der Button „Connect“ betätigt werden.
Wenn der RCX nicht angeschaltet ist, sollte
zumindest bei Betätigung des Buttons „Tower
And Cable“ oben links die Meldung „Tower
And Cable = Wahr“ erscheinen, ansonsten
muss zuerst die Installation des USB-Towers
überprüft werden.
Wenn der RCX eingeschaltet ist, kann die
Kommunikation zwischen RCX und USB-
Tower auf verschiedene Weise überprüft wer-
den:
   Die Buttons „Brick Alive“ und „Tower Alive“ bewirken bei korrekter Kommunikation
     die Meldung „Brick Alive = Wahr“ bzw. „Tower Alive = Wahr“ oben links im Fenster.
   Bei Betätigung eines der Sound-Buttons sollte der RCX die entsprechende Melodie ab-
     spielen.
   Die Motoren können einzeln in ihrer Funktion getestet werden.
Es ist zwar möglich, über dieses Programm auch das Ansprechen der Sensoren zu über-
prüfen, der Test direkt im RCX (siehe Kapitel 4.4) ist jedoch einfacher und aussagekräfti-
ger.
Schließlich kann mithilfe dieses Programms die Firmware auf den RCX übertragen wer-
den. Nach Betätigung des Buttons „Download Firmware“ muss die Firmware-Datei
„firm0328.lgo“ ausgewählt werden, die sich beim installierten RIS im Verzeichnis
„C:\Programme\LEGO MINDSTORMS\RIS 2.0\script\Firmware“ und beim installierten
SDK im Verzeichnis „C:\Programme\LEGO Software\LEGO Mindstorms SDK\Bin\
VPBrick1\RCX2“ befindet.

Dokumentation LEGO-Roboter, © 2007/08 Johanneum Lüneburg                                   20
7. Programme in Delphi mithilfe der Phantom-Komponente
7.1 Grundstruktur eines Programms für den RCX
In einem Delphi-Projekt muss ein LEGO-RCX-Objekt auf
das Formular gesetzt werden. Das zugehörige Icon befindet
sich im Register „ActiveX“. Das Icon ist zur Laufzeit nicht sichtbar, so dass dessen Position
auf dem Formular unerheblich ist.
Standardmäßig heißt das Objekt „PhantomCtrl1“; es bietet sich an, den Namen z. B. in
„RCX“ o. ä. umzubenennen, da dieser Name im Programmtext ständig verwendet werden
muss. In den nachfolgenden Beispiel-Programmtexten wird aus diesem Grund nur die Be-
zeichnung „RCX“ verwendet.

Bevor eine Information an den RCX gesendet werden kann, muss dem Programm mitge-
teilt werden, an welchem Anschluss der Tower angeschlossen ist, und die Verbindung
muss initialisiert werden. Es bietet sich also an, diese Programmteile gleich in einer Form-
Create-Prozedur unterzubringen.
Zu Beginn sollte außerdem getestet werden, ob die Verbindung zum RCX tatsächlich
funktioniert.
Die gesamte Prozedur könnte also folgendermaßen aussehen:
  procedure TForm1.FormCreate(Sender: TObject);
  begin
    RCX.ComPortNo := 0; // Tower am USB-Anschluss
    RCX.InitComm();      // Verbindung wird initialisiert
    if not RCX.PBAliveOrNot then // funktioniert die Verbindung zum RCX nicht?
       begin
         MessageDlg('Keine Verbindung zum Lego-Roboter,'+#13+
           'Programm wird geschlossen.',mtError,[mbOK],0);
         Application.Terminate // Programm wird geschlossen
       end
  end;

Damit einfach Wartezustände in der Direkt-Programmierung (siehe Kapitel 7.2 und 7.3)
realisiert werden können, empfiehlt es sich, nachstehende Prozedur „Pause“ in jedes Pro-
gramm aufzunehmen. Als Parameter wird dann die Anzahl in Millisekunden übergeben;
während dieser Zeit wird ausschließlich dieses Prozedur abgearbeitet, so dass kein weite-
rer Befehl ausgeführt wird.
  procedure Pause(ms : integer);
  var Start : TDateTime;
  begin
    Start := Now;
    repeat
    until MilliSecondsBetween(Start,Now) >= ms
  end;

Für die korrekte Funktion dieser Prozedur muss im Programmkopf in der Zeile „uses“ die
Unit „DateUtils“ ergänzt werden.

Dokumentation LEGO-Roboter, © 2007/08 Johanneum Lüneburg                                   21
Sie können auch lesen