EINFÜHRUNG |
Unter einem Roboter versteht man meist eine computergesteuerte Maschine, die eine Tätigkeit ausführen kann, welche früher durch Menschen verrichtet wurde. Wenn die Maschine sogar mit Hilfe von Kameras und Sensoren die Umgebung erfassen und entsprechend mit Aktoren (Motoren, Ventile, Sprachausgaben, usw.) reagieren kann, spricht man von einem intelligenten System oder bei menschenähnlichem Verhalten von einem Androiden.
Die Künstliche Intelligenz (KI) befasst sich mit der interessanten Frage, inwiefern ein Computersystem überhaupt als "intelligent" bezeichnet werden kann. Zur Beantwortung dieser Frage muss zuerst definiert werden, was man unter einer intelligenten Maschine versteht. Ein möglicher Lösungsansatz zur Definition von Intelligenz ist der Turing-Test. Hier befasst du dich mit einfacheren Fragen und du lernst mit einem einfachen Roboter umzugehen, der mit Berührungs-, Licht-, Sound-, Infrarot- und Ultraschallsensoren ausgerüstet ist und mit zwei Rädern, die mit Elektromotoren angetrieben sind, vorwärts und rückwärts fahren und sich drehen kann. Die Steuerung von Motoren und Sensoren übernimmt ein eingebauter Computer, darum nennt man einen Roboter auch ein Eingebettetes System (embedded system). Wenn es sich oft um einen einfachen Rechnerchip handelt, spricht man von einem Mikroprozessor (oder Mikrocontroller). Eingebettete Systeme spielen heutzutage eine ausserordentlich wichtige Rolle, denn du findest sie in vielen Geräten des täglichen Lebens, etwas in allen Smartphones. Aber auch Kaffeemaschinen, Waschmaschinen, TV-Geräte, Photoapparate, usw. sind meist eingebettete Systeme. In einem modernen Auto befinden sich bis zu hundert Mikrocontroller als eingebettete Systeme von der Motorsteuerung bis zum Antiblockierungssystem. Du solltest dir deshalb bewusst sein, dass du im Umgang mit Robotern auch viele allgemeingültige Prinzipien für eingebettete Systeme kennenlernst. Mit den weltweit bekannten Robotik-Baukästen von Lego Mindstorms kannst du wichtige Aspekte der Robotik spielerisch erlernen. Das System besteht aus einem mikroprozessorgesteuerten Baustein (Brick) und einer Vielzahl von Bauteilen, mit denen unterschiedliche Robotermodelle konstruiert werden können. Der Brick hat mehrere Entwicklungsstadien durchlaufen: Früher hiess er RCX, dann NXT und neuerdings EV3. Der EV3-Brick mit den Motoren und Sensoren ist ein eingebettetes System, das durch einen modernen ARM-Prozessor gesteuert wird. Öffnet man ihn, so werden seine elektronischen Bauteile sichtbar.
Beim Einschalten des Bricks startet auf dem Mikroprozessor eine Firmware oder beim EV3 das Linux-Betriebssystem, und auf dem Display erscheint ein einfaches Menü. Damit kannst du im autonomen Modus bereits auf dem Brick gespeicherte Programme ausführen. Auf dem EV3 musst du für den fremdgesteuerten Modus ein Hilfsprogramm (BrickGate) starten, das Befehle interpretiert, die über eine Bluetooth-Verbindung von aussen empfangen werden, beispielsweise den Befehl, einen Motor in einer bestimmten Drehrichtung einzuschalten oder den Messwert eines Sensors zurück zu melden. Beim NXT ist dieses Programm Teil der Firmware.
|
Roboter, Android, Künstliche Intelligenz, Eingebettetes System, Mikroprozessor, Mikrocontroller, Blockierende/Nichtblockierende Methode |
VORARBEITEN |
Mit TigerJython kannst du den Roboter simulieren (Simulationsmodus) und autonom oder fremdgesteuert verwenden (Realmodus). Du verwendest dabei verschiedene Klassenbibliotheken, die aber das gleiche Programmierinterface (Application Programming Interface, API) haben, so dass die Programme für alle Modi praktisch identisch sind. Es müssen lediglich der import und eventuell gewisse im Programm verwendete Timings angepasst werden. Simulationsmodus: Steht dir kein NXT oder EV3 zur Verfügung, kannst du das Thema trotzdem im Simulationsmodus durcharbeiten. Die für die Simulation benötigten Bilder sind in der Distribution von TigerJython enthalten. Realmodus:
Vorgehen mit dem Lego-NXT: Für das Paaren gehst du so vor, wie du es mit anderen externen Bluetooth-Geräten wie Smartphones, Bluetooth-Handsets, Druckern, usw. gewohnt bist. Beachte, dass du als Bluetooth-Pincode standardmässig die Zahl 1234 verwenden musst. Den NXT kannst du mit Python nur im fremdgesteuerten Modus verwenden. Du schreibst dazu in TigerJython ein ganz normales Python-Programm unter Verwendung des Moduls ch.aplu.nxt und drückst zum Starten den grünen Run-Button. Zuerst wirst du nach dem Bluetooth-Namen gefragt und danach wird die Verbindung zum Brick aufgebaut. Während der Programmausführung bleibt ein Fenster mit Verbindungsinformationen offen. Schliesst du dieses Fenster, so wird die Verbindung zum NXT unterbrochen. Befinden sich im Raum mehrere Lego-NXT, so müssen ihre Bluetooth-Namen verschieden sein, damit es keine Konflikte gibt. Ein Tool zum Ändern des Namens findest du hier. Du kannst auch anstelle des Bluetooth-Namens die Bluetooth-Adresse verwenden, die du mit verschiedenen Tools herausfinden kannst (beispielsweise wird sie bei jedem Verbindungaufbau im Connection-Dialog ausgeschrieben). Für die Bluetooth-Kommunikation ist die Bluecove-Bibliothek notwendig. Du lädst die Dateien von hier herunter und packst sie im Unterverzeichnis Lib des Verzeichnisses, in dem sich tigerjython2.jar befindet, aus. Vorgehen mit dem Lego-EV3: Nach dem Booten des EV3 mit leJOS und der erfolgreichen Anbindung über Bluetooth-PAN musst du auf dem Brick den BrickGate Server starten, den du im Menu "Programme" findest. Um den EV3 im autonomen Modus zu verwenden, solltest du in TigerJython in den Einstellungen im Register Bibliotheken die Markierungsfelder EV3-Download aktivieren und Nach Download ausführen ankreuzen. Du erkennst dann in der Werkzeugleiste ein zusätzliches EV3-Symbol. Für den fremdgesteuerten Modus klickst du wie üblich auf den grünen Run-Button. Wie mit dem NXT wirst du zuerst nach dem Bluetooth-Namen gefragt und es öffnet sich dann ein Fenster mit Verbindungsinformationen. Willst du das gleiche Programm autonom ausführen, so klickst du einfach auf den EV3-Button. Das Python-Skript wird dann auf den EV3 heruntergeladen und dort ausgeführt. Sein Name erscheint auch auf dem Display des EV3 und es kann jederzeit ohne Verbindung zum PC mit dem ENTER-Button wieder ausgeführt werden. In den Programmen wird davon ausgegangen, dass du für den EV3 die neuen Motoren und Sensoren aus dem EV3-Sortiment verwendest. Als Lichtsensor dient der EV3 Colorsensor. Die alten NXT-Motoren und Sensoren werden aber auch für den EV3 immer noch unterstützt. Du musst einfach überall vor den Klassennamen "Nxt" setzen, also NxtMotor, NxtGear, NxtTouchSensor, usw. |
VORWÄRTS- UND RÜCKWÄRTS-FAHREN, DREHEN |
In deinem ersten Roboterprogramm soll sich der Roboter während bestimmten, im Programm fest codierten Zeiten bewegen. Die Roboterbibliothek ist objektorientiert aufgebaut und bildet die Wirklichkeit modellmässig ab. So wie du bei der Konstruktion des Roboters den Lego-Brick in die Hand nimmst, erstellst du softwaremässig mit robot = LegoRobot() eine Instanz der Klasse LegoRobot(). Als nächstes nimmst du zwei Motoren und setzt diese zu einem Fahrwerk zusammen, was du softwaremässig mit gear = Gear() ausdrücken wirst. Dann schliesst du die Fahrwerkmotoren an die Motor-Ports A und B an, was du softwaremässig mit addPart() formulierst.
Sobald du einen Bewegungsbefehl an den Roboter sendest, wird der bestehende Zustand beendet und der neue Zustand übernommen. Am Schluss des Programms solltest du immer die Methode exit() aufrufen. Dabei werden alle Motoren gestoppt und im Realmodus auch die Bluetooth-Verbindung unterbrochen, was nötig ist, damit ein nächster Programmstart erfolgreich ist. (Wird das Programm nicht korrekt endet, so kann es nötig sein, dass du den Brick aus- und wieder einschalten musst.)
|
MEMO |
Ein Gear ist ein Fahrwerk mit zwei Motoren. Statt die Motoren einzeln zu steuern, kannst du damit Befehle verwenden, die beide Motoren gleichzeitig beeinflussen. Die Klassenbibliotheken für den Simulations- und den Realmodus sind so konzipiert, dass die Programme praktisch identisch sind. Du kannst dein Programm zuerst im Simulationsmodus entwickeln und danach mit wenig Anpassungen mit dem realen Roboter ausführen. Den EV3 kannst du autonom oder fremdgesteuert verwenden. In beiden Fällen muss auf dem EV3 das BrickGate-Programm gestartet sein, das die von Python gesendeten Befehle empfängt und entsprechend interpretiert. Da bei der Ausführung im autonomen Modus keine Fehler angezeigt werden, solltest du das Programm immer zuerst im fremdgesteuerten Modus ausprobieren (grüner Knopf) und erst dann mit dem EV3-Button auf den Brick herunterladen und dort ausführen. |
BEWEGEN MIT BLOCKIERENDEN METHODEN |
|
MEMO |
Du musst zwischen blockierenden und nicht blockierenden Methoden unterscheiden. Nicht blockierende Befehle bewirken eine Zustandsänderung des Roboters und kehren sofort zurück. Blockierenden Bewegungsbefehlen übergibst du ein bestimmtes Zeitintervall, während dem das Programm blockert d.h. die nächste Anweisung wird erst ausgeführt, wenn das Zeitintervall abgelaufen ist. Auf den ersten Blick scheint es einfacher zu sein, immer blockierende Methoden zu verwenden. Du handelst dir aber damit einen wesentlichen Nachteil ein. Da dein Programm nun blockiert ist, kannst du während dieser Zeit keine anderen Aktionen ausführen, also beispielsweise keine Sensorwerte lesen! Hängt sich das Programm während der Programmausführung auf, so kannst du es im fremdgesteuerten Modus durch Schliessen des Verbindungsinfo-Fensters abbrechen. Im autonomen Modus drückst du im Notfall die beiden Tasten DOWN+ENTER. |
AUFGABEN |
|
ZUSATZSTOFF |
INFRAROT-FERNBEDIENUNG |
Für den EV3-Roboter gibt es einen EV3 Infrarot-Sensor, der sich sehr vielseitig einsetzen lässt. Er ist im Lego Heim-Bausatz (inklusive der Fernsteuerbox) bereits enthalten, muss aber für den Lego Education-Bausatz zusätzlich beschafft werden. Den IRSensor kannst du auf drei Arten verwenden.
|
MEMO |
Die Methoden isEscapeHit(), isEnterHit(), isDownHit(), isUpHit(), isLeftHit(), isRightHit() liefern True, falls du im autonomen Modus die entsprechenden Buttons auf dem EV3 klickst. Im fremdgesteuerten Modus betreffen sie aber die Tastaturtasten ESCAPE, ENTER, CURSOR-DOWN, CURSOR-UP, CURSOR-LEFT, CURSOR-RIGHT. Dabei muss aber das Verbindungsinfo-Fenster aktiv sein (mit Maus hineinklicken). |