LEGO MINDSTORMS NXT WIIMOTE

February 28, 2018 | Author: Anonymous | Category: N/A
Share Embed


Short Description

Download LEGO MINDSTORMS NXT WIIMOTE...

Description

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

2.1 Linienverfolgung

8 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 Linienverfolgung. 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 Lego 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 Wiimote erfassten Bewegungen wurden durch einen Bluetoothproxy in für den Lego Roboter verständliche Steuerbefehle umgesetzt. Die Kommunikation mit dem Lego Roboter und der Wiimote erfolgte in beiden Teilprojekte ü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 Realisierung der Linienverfolgungsaufgabe verwendeten wir zwei der drei verfügbaren Motoren (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





Anwendung der Prozessdatenverarbeitung









Abbildung 3: Tastsensor

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-Compiler (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 entschieden 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 Informatikstudenten. 1.3.2 NXT Browser “NXT Browser” ist ein für MacOS X geschriebenes Programm zum hoch- und herunterladen von Dateien auf und von dem Lego Mindstorms NXT. Wir nutzten es hauptsächlich 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 Bluetooth. Das Framework stellt dabei sowohl Low-Level Befehle als auch High-Level Befehle 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 ermö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 auszulesen 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 verlor. 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 entwickeln 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 (Schwellenwert 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 wurde die Datei von Hand vom NXT auf einen Computer kopiert, sodass diese von dem Visualisierungstool interpretiert werden konnte. Listing 1 zeigt den Au-au und einen beispielhaften 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. Diese Punkte x1, y1 und alle weiteren Nachfolger werden immer mit aus dem Vorgänger gewonnen. 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 Kenntnise 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 Bewegungen 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 Neigen 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 Achse 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 zusammengefasst (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 /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 Roboters, wäre die Aufgabe erheblich komplizierter geworden.

Anwendung der Prozessdatenverarbeitung

18

3. FAZIT

Insgesamt war das Projekt sehr abwechslungsreich. Es wurde sowohl Hardwarenah programmiert als auch “high-level” Frameworks integriert. Die Arbeit mit aktueller Hardware (NXT, Wiimote) war spannend wenn auch etwas mühsam, wie im Falle der Wiimote. 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 Potential um neuen Anforderungen an interessante Aufgaben der PDV zu erfüllen.

3. Quellen NXTBrowser - Programm zum transferieren von eigenen Programmen auf den Lego Roboter 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

View more...

Comments

Copyright © 2020 DOCSPIKE Inc.