LEGO MINDSTORMS NXT WIIMOTE - Anwendungen der Prozessdatenverarbeitung Vertiefung bei Prof Dr. K.O. Linn FB DCSM Sommer 2007

Die Seite wird erstellt Petra-Hortensia Reiter
 
WEITER LESEN
LEGO MINDSTORMS NXT WIIMOTE - Anwendungen der Prozessdatenverarbeitung Vertiefung bei Prof Dr. K.O. Linn FB DCSM Sommer 2007
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
LEGO MINDSTORMS NXT WIIMOTE - Anwendungen der Prozessdatenverarbeitung Vertiefung bei Prof Dr. K.O. Linn FB DCSM Sommer 2007
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
LEGO MINDSTORMS NXT WIIMOTE - Anwendungen der Prozessdatenverarbeitung Vertiefung bei Prof Dr. K.O. Linn FB DCSM Sommer 2007
2.2.4 Technische Anleitung

          18

       2.2.5 Fazit - Teilprojekt Wiimote

   18

   3. Fazit

                                19

3. Que$en

                                  19

Anwendung der Prozessdatenverarbeitung

          3
LEGO MINDSTORMS NXT WIIMOTE - Anwendungen der Prozessdatenverarbeitung Vertiefung bei Prof Dr. K.O. Linn FB DCSM Sommer 2007
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
LEGO MINDSTORMS NXT WIIMOTE - Anwendungen der Prozessdatenverarbeitung Vertiefung bei Prof Dr. K.O. Linn FB DCSM Sommer 2007
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
LEGO MINDSTORMS NXT WIIMOTE - Anwendungen der Prozessdatenverarbeitung Vertiefung bei Prof Dr. K.O. Linn FB DCSM Sommer 2007
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
LEGO MINDSTORMS NXT WIIMOTE - Anwendungen der Prozessdatenverarbeitung Vertiefung bei Prof Dr. K.O. Linn FB DCSM Sommer 2007
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
LEGO MINDSTORMS NXT WIIMOTE - Anwendungen der Prozessdatenverarbeitung Vertiefung bei Prof Dr. K.O. Linn FB DCSM Sommer 2007
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
LEGO MINDSTORMS NXT WIIMOTE - Anwendungen der Prozessdatenverarbeitung Vertiefung bei Prof Dr. K.O. Linn FB DCSM Sommer 2007
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
LEGO MINDSTORMS NXT WIIMOTE - Anwendungen der Prozessdatenverarbeitung Vertiefung bei Prof Dr. K.O. Linn FB DCSM Sommer 2007
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