Dokumentation zum Einsatz des LEGO-Roboters - Autoren: Stefan Bartels, Jan-Hendrik Hagemann, Patricia Ossig, Dominik Reimer, Thore Soltau ...
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
Dokumentation zum Einsatz des LEGO-Roboters Autoren: Stefan Bartels, Jan-Hendrik Hagemann, Patricia Ossig, Dominik Reimer, Thore Soltau © 2007/08 Johanneum Lüneburg
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
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
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