1 Aufgabe:

Lego Mindstorms NXT Roboter

Lego Mindstorms NXT Roboter

Die Aufgabe war es, die Steuerbefehle der Wii Fernbedienung an den Roboter weiterzuleiten und die Befehle vom Roboter richtig ausführen zu lassen. Der Roboter soll auch ans Ziel kommen, wenn keine Verbindung vorhanden ist.

Wir haben uns vorgestellt, dass wir die Signale der Wii Remote, die wir über Bluetooth empfangen, am PC verarbeiten und die Befehle ebenfalls via Bluetooth an den NXT Roboter zu senden.

Damit sich der Roboter aber auch bewegen kann, wenn keine Bluetoothverbindung besteht, verfügt er über ein Programm, das per Hand gestartet werden kann. Um die Wegfindung für den Roboter überhaupt möglich zu machen, haben wir einige der Lego NXT Sensoren verwendet.

2 Grundlage:

2.1 WiiRemote:

WiiRemote

WiiRemote

Das Besondere an der WiiRemote ist, das sie auch über einen Beschleunigungssensor verfügt, den wir bei der Steuerung des Roboters verwendet haben. Damit können die Bewegungen und Drehungen der WiiRemote erkannt werden und ihre Position festgestellt werden.

Das Signal der Wii-Fernbedienung wird via Bluetooth verschickt. Die maximale Reichweite beträgt 10m, was für unsere Verwendung vollkommen ausreichte.

2.2 Lego Mindstorms NXT Roboter:

Der Roboter besteht aus:

–       einem programmierbaren NXT-Stein :

Programmierbarer Baustein

Programmierbarer Baustein

Er verfügt über einen 32-Bit-Mikroprozessor und besitzt 3 Moter- und 4 Sensoranschlüsse.

–       3 Servomotoren:

Sie besitzen Rotationssensoren. Damit kann die Position des Roboters berechnet werden.

–       Sensoren:

Licht-und US-Sensor

Licht-und US-Sensor

· Der Ultraschallsensor: Er verfügt über einen Sender, der ein Ultraschallsignal aussendet, und über einen Empfänger, der das reflektierte Signal aufnimmt. Die Entfernung hängt von der Zeit ab, die das Signal braucht.

· Der Lichtsensor: Ein Infrarotlicht wird benützt, um das Umgebungslicht zu messen. Umso heller die Umgebung ist, desto größer ist der Wert, den wir zurückbekommen.

· Der Druckkontaktsensor

· Der Geräuschsensor

–       Einem Bluetooth- und USB-Anschluss:

Beide können für die Programmierung und die Kommunikation benützt werden. Wir haben den USB-Anschluss gebraucht, um den Roboter zu programmieren. Der Bluetooth-Anschluss wurde für die Kommunikation verwendet.


2.3 Verwendete Software:

Um den Code zu schreiben haben wir Eclipse gebraucht (http://www.eclipse.org/downloads/)(Last tested: 2.8.2010). LeJOS NXJ  wird aber auch benötigt, um den Lego Mindstorms NXT Roboter zu programmieren.

Dokumentation und Installationsguide für Lejos:

http://lejos.sourceforge.net/nxt/nxj/tutorial/Preliminaries/GettingStartedWindows.htm#5(Last tested: 2.8.2010)

In diesem Downloadpaket waren auch wichtige Libraries(classes.jar) vorhanden, mit denen wir später gearbeitet haben.

Um Wii Remote, PC und den NXT Roboter mit einander über Bluetooth zu verbinden, wird BlueSoleil benötigt (http://www.bluesoleil.com/)(Last tested: 2.8.2010).

Man kann optional OnBricks verwenden, um den Roboter mit den Informationen der Wii Remote zu steuern.

Dokumentation für BlueSoleil, GlovePIE und OnBrick:

http://www.zenophotos.com/Articles/wii_nxt_remote.html (Last tested: 2.8.2010)

OnBricks war jedoch nicht so effizient, wie wir es uns vorgestellt haben. Deshalb haben wir stattdessen einen Javacode geschrieben. Dafür brauchten wir iCommand und Bluecove.

Dokumentation für Eclipse, iCommand und Bluecove:

http://www.tiim.info/the_nxt_project/download/Installation_and_Setup_Guide.pdf (Last tested: 2.8.2010)

3 Programmierung:


3.1 Verarbeitung der Wii Information:

Zuerst bekommt der PC über GlovePIE die Informationen der Wii Remote und kann diese verarbeiten. Wir haben dafür einen Code geschrieben, der folgende Funktionen beinhaltet:

Aktivity Diagram für die Verarbeitung des WiiRemote Signals

Aktivity Diagram für die Verarbeitung des WiiRemote Signals

Die Tasten und Bewegungssensoren der Wii Remote werden als Keys interpretiert. Mit Hilfe der X-Rotation wird der Right- oder Left-Key aktiviert.

GlovePIE Code:


/*

*

*WiiRemote als Fahrzeugsteuerung

*

*

*Elodie Bockstaller, Manuel Noswitz

*29/07/2010

*

*/

//Calibrate your Wiimote!

//Place the Wiimote face up on a flat surface. Change these values until the

//debug line next to the run button shows zero for each axis.

var.xOffset = -10

var.yOffset = -15

var.zOffset = -8

//Hier wird die Frequenz der zu sendenden Signale verändert

PIE.FrameRate = 4hz

//Position der WiiRemote zur Steuerung mit den Bewegungssensoren

var.xRot = Wiimote.RawForceX + var.xOffset

var.yRot = Wiimote.RawForceY + var.yOffset

var.zRot = Wiimote.RawForceZ + var.zOffset

// Anzeige der Position

debug = “X=” + var.xRot + ”   Y=” + var.yRot + ”   Z=” + var.zRot

//Interpretation der Wiimote-Tasten in Keys

Key.F3 = Wiimote.A

Key.F4 = Wiimote.B

Key.F5 = Wiimote.Minus

Key.F6 = Wiimote.Plus

Key.F7 = Wiimote.One

Key.F8 = Wiimote.Two

Key.F9 = Wiimote.Right

Key.F10 = Wiimote.Left

//X-Bewegung zur Rechts-und Linksbewegung

if var.xRot > 20 then

Key.F1 = true

elseif var.xRot < -20 then

Key.F2 = true

else

Key.F1 = false

Key.F2 = false

endif

3.2 Steuerung des Roboters:

Die Keys werden von einem Javacode interpretiert, um Befehle zu dem NXT Roboter zu senden.

KeyCode für Java:

http://protocolsofmatrix.blogspot.com/2007/09/javascript-keycode-reference-table-for.html
(Last tested: 2.8.2010)

Dieser Code ermöglicht folgende Funktionen:


Aktivity Diagram für die Steuerung des Roboters

Aktivity Diagram für die Steuerung des Roboters

Diese Funktionen werden als Javacode so geschrieben:

public void keyPressed(KeyEvent e)

{

switch (e.getKeyCode())

{

case FORWARD:

//Wir benutzen ein Flag um die Methode nav.forward() nur ein Mal aufzurufen

if (flag == 1)

{

nav.forward();

flag = 0;

}

nav.getX();

nav.getY();

nav.updatePosition();

break;

case BACKWARD:

if (flag == 1)

{

nav.backward();

flag = 0;

}

nav.getX();

nav.getY();

nav.updatePosition();

break;

case LEFT:

flag = 1;

Motor.C.backward();

Motor.B.forward();

nav.getX();

nav.getY();

nav.updatePosition();

break;

case RIGHT:

flag = 1;

Motor.C.forward();

Motor.B.backward();

nav.getX();

nav.getY();

nav.updatePosition();

break;

case SENSOR:

//Wir können die Information des Lichtsensors lesen

light = lightSensor.getLightValue();

System.out.println(“Light : “ + light);

break;

}

}

public void keyReleased(KeyEvent e)

{

switch (e.getKeyCode())

{

case FORWARD:

flag = 1;

nav.stop();

break;

case BACKWARD:

flag = 1;

nav.stop();

break;

case LEFT:

nav.stop();

break;

case RIGHT:

nav.stop();

break;

case SENSOR:

seek();

break;

case QUIT:

NXTCommand.close();

System.exit(0);

}

}

//Der Roboter fährt bis zu einer schwarzen Linie und stoppt dann.

public void seek()

{

nav.forward();

while (light > 500)

{

light = lightSensor.getLightValue();

}

nav.stop();

}

Es wird ein Keylistener benützt, der die Information von GlovePIE verwendet. Für jeden Key gibts es einen Befehl, z.B. eine Bewegung oder ein Programm starten. Für die Befehle haben wir die iCommand-Library verwendet.

3.3 Steuerung ohne Bluetoothverbindung:

Neben der Wii Steuerung haben wir ein anderes Programm geschrieben, sodass der Roboter ohne Bluetoothverbindung von allein fahren kann.

Wenn das Programm gestartet ist, dann wird der Roboter nicht mehr gesteuert.

Damit der Roboter den Hindernissen ausweichen kann, haben wir den Ultraschallsensor verwendet.

Der US-Sensor wurde so eingebaut, dass er sich bewegen konnte. Dadurch war es möglich die Breite der Hindernisse festzustellen und so den kürzesten Weg um sie herum zu finden.

4 Anmerkung:

OnBricks ist mit den vielen Informationen der WiiRemote nicht zurechtgekommen und konnte diese nicht verarbeiten. Aus diesem Grund sind wir zu dem Javacode gewechselt, welcher besser funktioniert.

Durch diesen Code war der Roboter nicht fähig, von sich selbst ein anderes Programm zu starten. Das brauchten wir aber nicht, da die Verbindung mehr als ausreichend für unsere Verwendung war. Sollte der Roboter doch die Verbindung verlieren, verfügt er über ein eigenes Programm, das wir von Hand starten können.


Manuel Noswitz

Elodie Bockstaller

Betreuer: Patrik Grausberg

Leave a Reply