LEGO MINDSTORMS NXT WIIMOTE - Anwendungen der Prozessdatenverarbeitung Vertiefung bei Prof Dr. K.O. Linn FB DCSM Sommer 2007
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
LE G O MI N D S TORMS N XT WI I MOTE Anwendungen der Prozessdatenverarbeitung Vertiefung bei Prof Dr. K.O. Linn FB DCSM Sommer 2007 Hendry Iskandar, Alexander Seith, Trung Tran, Stefan Nicolin Anwendung der Prozessdatenverarbeitung 1
I N HALTS V E RZ E I CHN I S Abstract 4 1. Komponenten 5 1.1 Hardwarebeschreibung NXT 5 1.2 Hardwarebeschreibung WiiMote 6 1.3 Softwarebeschreibung 6 1.3.1 NXC 6 1.3.2 NXT Browser 7 1.3.3 Ruby NXT 7 1.3.4 WiiRemoteFramework 7 1.3.5 RubyCocoa 8 2. Implementierung & Realisierung 8 2.1 Linienverfolgung 8 2.1.1 Zielsetzung & Aufgabenste$ung 8 2.1.2 Probleme 8 2.1.3 Algorithmus 9 2.1.4 Fazit - Linienverfolgung 14 2.2 Steuern mit der Wiimote 15 2.2.1 Zielsetzung & Aufgabenste$ung 15 2.2.2 Probleme 15 2.2.3 Algorithmus 16 Anwendung der Prozessdatenverarbeitung 2
2.2.4 Technische Anleitung 18 2.2.5 Fazit - Teilprojekt Wiimote 18 3. Fazit 19 3. Que$en 19 Anwendung der Prozessdatenverarbeitung 3
Abstract Ziel unserer PDV Vertiefung war es den von Lego hergestellten Roboterbausatz “Mindstorms NXT” auf vielfältige Art und Weise einzusetzen. Es galt den Roboter über das von Lego vorgegebene Standardmaß hinaus zu programmieren und zu steuern. Ferner war es unser Ziel verschiedene Technologien miteinander zu vereinen. Das erste Teilprojekt beschäftigte sich mit dem klassischen Problem der Linienverfol- gung. Da der Roboter mit nur einem Lichtsensor ausgerüstet war, galt es diese besondere Herausforderung zu meistern. Zur Visualisierung der aufgezeichneten Streckendaten wurde ein Programm entwickelt welches eine anschauliche Darstellung der gefahrenen Strecke erlaubte. Die Realisierung dieses Teils erfolgte mit der Standardfirmware des Le- go Roboters und einer C - ähnlichen Programmiersprache. Im zweiten Teil des Projektes beschäftigten wir uns mit der Steuerung des Roboters durch die Wiimote Fernbedienung der neuen Nintendo Spielkonsole. Die von der Wii- mote erfassten Bewegungen wurden durch einen Bluetoothproxy in für den Lego Robo- ter verständliche Steuerbefehle umgesetzt. Die Kommunikation mit dem Lego Roboter und der Wiimote erfolgte in beiden Teilpro- jekte über Bluetooth und benutzte dabei einen verlässlichen seriellen Übertragungskanal. Es wurden bei der Implementierung der vorgegebenen Anforderung nur Opensource Software und Frameworks eingesetzt. Ferner haben wir als Entwicklungsplatform das von Apple entwickelte, Unix - ähnliche Mac OS X Betriebsystem ausgewählt. Anwendung der Prozessdatenverarbeitung 4
1. Komponenten 1 . 1 H A R D WA R E B E S C H R E I B U N G N X T Der Lego Roboter NXT besitzt einen 32-Bit ARM Prozessor mit 48 MHz Taktfrequenz, 256 KB Flash-RAM, 64 KB RAM, einen USB Anschluss sowie einen Bluetooth v2.0 Chip mit EDR (Enhanced Data Rate). Zum Lieferumfang gehören ebenfalls mehrere Sensoren und Aktuatoren sowie zahlreiche Lego und speziell Lego Technik Bausteine. Zur Reali- sierung der Linienverfolgungsaufgabe verwendeten wir zwei der drei verfügbaren Moto- ren (Abbildung 1) sowie den Licht- (Abbildung 2) und Berührungssensor (Abbildung 3). Wir verzichteten dabei auf den Ultraschall- und Geräuschsensor, da diese nicht für die Erfüllung unserer beiden Projekte von Relevanz waren. Wir haben uns für die Ausführung des Roboters mit zwei Rädern entschieden (Abbildung 4). Abbildung 1: Motor Abbildung 2: Lichtsensor Abbildung 3: Tastsensor Anwendung der Prozessdatenverarbeitung 5
Abbildung 4: NXT Roboter Au-au 1 . 2 H A R D WA R E B E S C H R E I B U N G W I I M O T E Die Wiimote ist mit einem Beschleunigungssensor ausgerüstet. Es wird der ADXL330 Chip verwendet. Es werden die Bewegungen und Drehungen des Controllers erfasst und können ausgelesen werden. Für die drahtlose Kommunikation über Bluetooth wir der Broadcom 2042 Chip eingesetzt. 1 . 3 S O F T WA R E B E S C H R E I B U N G Bei der Entwicklung und Realisierung des Projektes bedienten wir uns verschiedener frei verfügbarer Programme, Frameworks und Programmiersprachen. 1 . 3 . 1 N XC Zur Programmierung des Lego Mindstorms Roboters verwendeten wir eine C-ähnliche Programmiersprache mit dem Namen NXC (Not eXactly C). NXC ist dabei “nur” eine Erweiterung zum NBC (Next Byte Code), einer assemblerähnlichen Programmiersprache für den Lego Mindstroms Roboter. Ein großer Vorteil dieser beiden Sprachen ist, dass sie Anwendung der Prozessdatenverarbeitung 6
direkt auf der von Lego mitgelieferten Firmware des Roboter laufen, da der NBC-Com- piler (welcher auch NXC kompiliert) den Code in für den Roboter verständliche Befehle übersetzt. Es gibt mehrere gute Gründe warum wir uns für diese Art der Programmierung entschie- den haben. Zum Einen ist die mitgelieferte Software zur Programmierung des NXT in ihrem Leistungsumfang und Möglichkeiten stark begrenzt. Zum Anderen haben wir schon weitreichende Erfahrung mit der Programmierung in C, weshalb der Einstieg schnell und problemlos war. Außerdem entsprach die Programmierung durch Codezeilen anstatt durch Zusammenklicken von “Codesteinen” eher der Natur eines Informatikstu- denten. 1.3.2 NXT Browser “NXT Browser” ist ein für MacOS X geschriebenes Programm zum hoch- und herunter- laden von Dateien auf und von dem Lego Mindstorms NXT. Wir nutzten es hauptsäch- lich zum Übertragen unserer NXC-Programme auf den Roboter per Bluetooth. 1 . 3 . 3 Ru b y N X T Ruby NXT ist ein Framework zur Steuerung des Lego Mindstorms Roboters per Blue- tooth. Das Framework stellt dabei sowohl Low-Level Befehle als auch High-Level Befeh- le in Ruby zu Verfügung. Da es sich hierbei um ein sogenanntes “Ruby Gem” handelt, ist das Framework Plattform unabhängig. Es lässt sich schnell und problemlos durch den von Ruby bereitgestellten Paketmanager “gem” installieren. Wir entschlossen uns für dieses Framework, um eine Steuerung von Ruby zum NXT per Bluetooth realisieren zu können, da dies einen Teil des zweiten Projektes darstellte. 1 . 3 . 4 Wi i Re m o t e Fr a m e w o r k Das WiiRemoteFramework ist ein in Objective-C (kurz Obj-C) & Cocoa geschriebenes Framework, um unter MacOS X die WiiMote leichter programmieren zu können. Es er- möglicht den einfachen Umgang mit der WiiMote durch bereitgestellte Methoden und Funktionen, wie z.B. das Auslesen aller 4 Freiheitsgrade, der Tasten und vielem mehr. Die komplette Kommunikation zwischen dem Mac und der WiiMote geschieht auch hierbei über Bluetooth. Dieses Framework nutzten wir, um zwei der vier Freiheitsgrade aus der WiiMote auszule- sen und später als Steuerbefehle zu interpretieren und zu nutzen. Anwendung der Prozessdatenverarbeitung 7
1 . 3 . 5 Ru b y C o co a RubyCocoa ist eine so-genannte Bridge, ein Brückenframework um Objekte von Cocoa (Obj-C) in Ruby und umgekehrt zu nutzen. Es ist ebenfalls möglich beide Arten von Quellcode miteinander zu vermischen. Dadurch ist es möglich, in Ruby Objekte aus dem WiiRemoteFramework zu nutzen, wie z.B. jene, die die Werte der Freiheitsgrade enthalten. Es ist also das Bindeglied zwischen dem Ruby NXT Framework und dem WiiRemoteFramework. 2. Implementierung & Realisierung 2.1 LINIENVERFOLGUNG 2.1.1 Zielsetzung & Aufgabenstel lung Ziel des ersten Teilprojektes war es, den Lego NXT Roboter eine Linie entlang fahren zu lassen. Die Linie wurde dabei entsprechend kompliziert und asymmetrisch (Abbildung 5) gewählt, um den Schwierigkeitsgrad zu erhöhen. Die Fahrtrichtung sollte der NXT selbst bestimmen. Im zweiten Schritt sollte die gefahrene Strecke in eine Datei aufgezeichnet und in einem Programm später visualisiert werden. 2.1.2 Probleme Das erste Problem mit dem wir konfrontiert wurden, war, dass der NXT mit nur einem Lichtsensor ausgestattet war. Dadurch war es nicht möglich festzustellen ob der Sensor sich links oder rechts von der schwarzen Linie befindet, wenn er die schwarze Linie ver- lor. Aus diesem Grund gestalteten wir die Kurve zweifarbig, und zwar schwarz und grau (Abbildung 5). Dadurch konnte leicht festgestellt werden, wie herum sich der NXT als nächstes drehen musste, um wieder auf Kurs zu kommen. Weiterhin war das Spektrum der Lichtwerte des Sensors gering, was bei leicht veränderten Lichtverhältnissen schnell zum Verlust der Orientierung des Roboters führte. Das zweite große Problem war die Ermittlung der notwendigen Werte und das entwi- ckeln einer geeigneten, korrekten Formel zur Visualisierung der gefahrenen Strecke. Letzteres stellte sich als besonders herausfordernd heraus. Anwendung der Prozessdatenverarbeitung 8
Abbildung 5: Au-au der Kurve 2.1.3 Algorithmus Zu Beginn wird die Fahrtrichtung festgelegt. Dazu dreht sich der NXT einmal links, und zwar solange, bis er entweder Schwarz (Schwellenwert 630) oder Weiss (Schwellenwert 420) erkennt. Ausgangslage des NXT’s und des Lichtsensors muss der graue Teil (Schwel- lenwert 510) der Linie sein (Abbildung 6). Abbildung 6: Erkennen der Fahrtrichtung Anwendung der Prozessdatenverarbeitung 9
Nach der Festlegung der Fahrrichtung beginnt der eigentliche Algorithmus. Solange der Lichtsensor den Lichtwert von Grau erkennt, fährt der NXT geradeaus (Abbildung 7). Abbildung 7: Geradeausfahrt des NXT Ist die Fahrtrichtung (wie in den Abbildungen gezeigt) gegen den Uhrzeigersinn und der NXT trifft auf die Farbe Weiss, so dreht sich der Roboter nach links (Abbildung 8). Wäre die Fahrtrichtung im Uhrzeigersinn, so würde sich der NXT nach rechts drehen. Trifft der NXT jedoch bei Fahrt gegen den Uhrzeigersinn auf Schwarz, so dreht er sich nach rechts (Abbildung 9). Würde der NXT nun aber wieder im Uhrzeigersinn fahren und auf Schwarz treffen, so würde er sich danach nach links drehen. Dabei meint eine Linksdrehung: linkes Rad entgegen der Fahrtrichtung drehen, rechtes Rad in Fahrtrichtung drehen. Bei einer Rechtsdrehung ist es genau anders herum. Anwendung der Prozessdatenverarbeitung 10
Abbildung 8: Reaktion im Falle dass der Sensor Weiss erkennt Abbildung 9: Reaktion im Falle dass der Sensor Schwarz erkennt Anwendung der Prozessdatenverarbeitung 11
Damit der zweite Teil vom ersten Teilprojekt realisiert werden konnte, mussten zuvor brauchbare Daten vom NXT aufgenommen und gespeichert werden. Die Ist-Kurve kann so später von einem zusätzlichen Programm graphisch dargestellt werden. Zu diesem Zweck speicherten wir den Winkel des rechten Rads, den des linken Rads und die Zeit (Takt) in eine Datei. Getrennt wurden die Werte durch einen Doppelpunkt. Später wur- de die Datei von Hand vom NXT auf einen Computer kopiert, sodass diese von dem Vi- sualisierungstool interpretiert werden konnte. Listing 1 zeigt den Au-au und einen bei- spielhaften Inhalt dieser Datei, Abbildung 10 zeigt das Visualisierungprogramm. 15:-16:10273 16:-17:10291 17:-18:10304 18:-19:10316 17:-18:10330 16:-17:10343 14:-15:10356 13:-13:10369 11:-11:10383 Listing 1 Abbildung 10: Visualisierungstool Anwendung der Prozessdatenverarbeitung 12
Dem Visualisierungstool liegt eine mathematische Formel zugrunde, die die Werte der Datei interpretiert und daraus die Kurve gewinnt. Abbildung 11 und 12 zeigen die Theorie der Formel. Abbildung 11: Theorie der Formel Abbildung 12: Theorie der Formel für die Ausgangspunkte x0, y0 Anwendung der Prozessdatenverarbeitung 13
xn und yn sind dabei die Punkte, die von dem Visualisierungstool gezeichnet werden. Die- se Punkte x1, y1 und alle weiteren Nachfolger werden immer mit aus dem Vorgänger ge- wonnen. Weiterhin werden alle An zur weiteren Berechnung benötigt. An lässt sich aus dem Satz des Pythagoras gewinnen: c2 = a2 + b2 + 2 * a * b * cos γn An2 = Rn2 + Rn2 - 2 * Rn * Rn * cos γn An = Rn * √2 * (1-cos γn) Aus Rn gewinnt man nun wiederum γn und somit αn: αn = π - βn βn = (π-γn)/2 2 . 1 . 4 Fa z i t - L i n i e n v e r f o l g u n g Die Herausforderung mit nur einem Lichtsensor relativ zügig einer verwinkelten Linie zu folgen konnte gemeistert werden. Das größte Problem stellte dabei die mathematische Herleitung und Formulierung des Problems dar. Durch die im Studium erlangten Kenn- tnise der Sprache C war die Umstellung auf das Dialekt NXC leicht zu bewältigen. Auch der Kontakt zum Entwickler der NXC Sprache stellte sich als gewinnbringend heraus (sowohl für das Projekt als auch als Erfahrung im Umgang mit anderen Entwickler). Anwendung der Prozessdatenverarbeitung 14
2.2 STEUERN MIT DER WIIMOTE 2.2.1 Zielsetzung & Aufgabenstel lung Ziel dieses Teilprojektes war es den NXT durch Bewegungen der Wiimote zu steuern. Die Wiimote sollte eine Direktverbindung zum NXT über Bluetooth herstellen. Die Be- wegungen der Wiimote sollten in Ansteuerungsbefehle für den NXT umgesetzt werden und diese den Roboter in die gewünschte Richtung fahren lassen. 2.2.2 Probleme Es war nicht möglich eine Direktverbindung von der Wiimote zum NXT aufzubauen. Der Bluetoothstack des Roboters unterstützt nicht das nötige Protokoll für diese Art der Kommunikation. Stattdessen musste ein Mac Laptop als “Bluetoothproxy” eingesetzt werden (Abbildung 13). Abbildung 13: Bluetoothproxy Anwendung der Prozessdatenverarbeitung 15
2.2.3 Algorithmus Die Bewegungen der Wiimote können mit Hilfe des Wiiremoteframeworks ausgelesen werden. Für diesen Zweck wurde ein kleines Programm erstellt um die Ausgelesenen Werte darzustellen. Abbildung 14: WiimoteJack Für unsere Aufgabenstellung waren die Werte “pitch” und “roll” von Bedeutung. Das Nei- gen der Wiimote nach vorne sollte den NXT nach vorne fahren lassen. Gleichzeitiges Neigen nach vorne und drehen nach z.B. links sollte den Roboter sich um die eigene Ach- se nach links drehen lassen. Die horizontale, gerade Haltung der Wiimote veranlasst den NXT beide Motoren zu stoppen. Die verschiedenen möglichen Zustände wurden in einen Zustandsautomaten zusammen- gefasst (Abbildung 16). Folgende Zustände wurden durch Zahlen repräsentiert: 0 - Stop, 1 - Zurück, 2 - Vorwärts, 3 - Links, 4 - Rechts Für die Steuerung sind 5 Funktionen vorhanden die die entsprechenden Werte von der Wiimote auslesen. Zwischen Werten von >128 und = 141 ist die Wiimote nach vorne geneigt und der Befehl zum Vorwärtsfahren wird ausgelöst. Bei einem Wert von = 146 nötig. Bei einem Wert von
Abbildung 15: Lokales Koordinatensystem der Wiimote Abbildung 16: Zustandsautomat Anwendung der Prozessdatenverarbeitung 17
2 . 2 . 4 Te c h n i s c h e A n l e i t u n g Folgende Systemvoraussetzungen sind nötig um das Wiimote Teilprojekt auszuführen: • Lego Mindstorms NXT Roboter • Wii Remote der Nintendo Wii Spielkonsole • (Intel) Mac mit Bluetoothadapter • Mac OS X 10.4.x • Wiiremoteframework 0.4 • RubyCocoa 0.11.x • Ruby 1.8.x • ruby-nxt 0.8.1 Um die per Bluetooth getunnelte serielle Verbindung zum NXT zu erstellen sind folgen- de Schritte nötig: 1. Den NXT mit dem Laptop per Bluetooth verbinden (Pairing). 2. In den Bluetootheigenschaften auf dem (eng.) “Sharing” Tab klicken und ein neues serielles Interface hinzufügen (Typ. RS-232). Dadurch wird ein Device unterhalb von /dev erstellt => /dev/tty.Name-vom-Nxt. 3. Nun zeitnah im Terminal auf das Device zugreifen: cat /dev/tty.Name-vom-Nxt 4. Auf dem NXT im Bluetooth-Menü reingehen und Kontakte auswählen und eine Verbindung zum Mac herstellen. 2 . 2 . 5 F a z i t - Te i l p r o j e k t W i i m o t e Die Steuerung des Roboters mit der Wiimote ließ sich dank der ausgewachsenen Mac Programmierumgebung und der Objektorientierten Skriptsprache Ruby relativ leicht implementieren. Der Erfolg des Teilprojektes ruht auf den Schultern von Giganten. Ohne komfortable Frameworks die das Auslesen und Steuern der Wiimote und des NXT Robo- ters, wäre die Aufgabe erheblich komplizierter geworden. Anwendung der Prozessdatenverarbeitung 18
3. FAZIT Insgesamt war das Projekt sehr abwechslungsreich. Es wurde sowohl Hardwarenah pro- grammiert als auch “high-level” Frameworks integriert. Die Arbeit mit aktueller Hard- ware (NXT, Wiimote) war spannend wenn auch etwas mühsam, wie im Falle der Wiimo- te. Die Mac Plattform hat durch ihre Unix-ähnlichkeit bewiesen dass es sowohl flexibel als auch vielseitig ist - vor allem was das Angebot an Treiberunterstützung für aktueller Hardware angeht. Der NXT Roboter hat durch die modulare Bauweise genügend Poten- tial um neuen Anforderungen an interessante Aufgaben der PDV zu erfüllen. 3. Quellen NXTBrowser - Programm zum transferieren von eigenen Programmen auf den Lego Ro- boter URL: http://web.mac.com/carstenm/iWeb/Lego/NXT/F2F73940-D837-4038-9011-2968725A2872 .html [Stand 2007-05-20] NXC - Compiler für NXT für MAC/WIN/LINUX URL: http://bricxcc.sourceforge.net/nbc/ [Stand 2007-04-20] NXT Bluetoothverbindung unter (intel) MacOS X URL: http://www.juju.org/articles/2006/08/01/mindstorms-nxt-bluetooth-on-osx [Stand 2007-05-07] Ruby Gem für den NXT URL: http://rubyforge.org/projects/ruby-nxt/ [Stand 2007-05-07] Nxtasy - Portal mit vielen Infos über NXT URL: http://nxtasy.org/ [Stand 2007-04-26] Anwendung der Prozessdatenverarbeitung 19
NXT Blog - Entwicklung auf dem Mac URL: http://nxtdev.org/ [Stand 2007-04-26] NXT Infos für Mac und Linux URL: http://www.degrunt.org/articles/category/nxt [Stand 2007-04-26] NXC Tutorial (Linux) URL: http://lukas.internet-freaks.net/nxt.php [Stand 2007-04-26] Wii(mote) Informationen - Wiki URL: http://wiili.org [Stand 2007-05-10] RubyCocoa - Bridge zwischen Ruby und Cocoa (Mac) URL: http://rubycocoa.sourceforge.net/ [Stand 2007-06-01] Wiiremoteframework - Auslesen der Wiimote unter Mac OSX URL: http://sourceforge.net/projects/darwiin-remote/ [Stand 2007-06-01] Anwendung der Prozessdatenverarbeitung 20
Sie können auch lesen