Unterlagen zum Praktikum Lego Mindstorms in der FEITMedizintechnik... · Lego Mindstorms in der...

18
Unterlagen zum Praktikum Lego Mindstorms in der FEIT Inhalt 1. MATLAB Variablen in MATLAB definieren 1 Operationen mit Vektoren und Matrizen 2 Die Hilfe-Funktion und Hilfe-Kommandos 3 Programmstrukturierung 4 Messwertdarstellung 5 Timing 5 Funktionsinterpolation 6 2. NXT- Toolbox NXT Kommunikation 7 NXT Motor Class 8 Classic NXT Motor Functions 10 NXT Sensoren 11 NXT Direct Commands 17

Transcript of Unterlagen zum Praktikum Lego Mindstorms in der FEITMedizintechnik... · Lego Mindstorms in der...

Page 1: Unterlagen zum Praktikum Lego Mindstorms in der FEITMedizintechnik... · Lego Mindstorms in der FEIT Inhalt 1. MATLAB Variablen in MATLAB definieren 1 Operationen mit Vektoren und

Unterlagen zum Praktikum

Lego Mindstorms in der FEIT

Inhalt

1. MATLAB

Variablen in MATLAB definieren 1

Operationen mit Vektoren und Matrizen 2

Die Hilfe-Funktion und Hilfe-Kommandos 3

Programmstrukturierung 4

Messwertdarstellung 5

Timing 5

Funktionsinterpolation 6

2. NXT- Toolbox

NXT Kommunikation 7

NXT Motor Class 8

Classic NXT Motor Functions 10

NXT Sensoren 11

NXT Direct Commands 17

Page 2: Unterlagen zum Praktikum Lego Mindstorms in der FEITMedizintechnik... · Lego Mindstorms in der FEIT Inhalt 1. MATLAB Variablen in MATLAB definieren 1 Operationen mit Vektoren und

1

Variablen in MATLAB definieren Jede MATLAB-Variable ist grundsätzlich eine Matrix! Ein Skalar ist z.B. eine 1x1 Matrix, ein

Zeilenvektor der Länge n eine 1xn Matrix. Die Einträge können reell oder komplexwertig sein. Ein

Semikolon hinter einer Variablendefinition bewirkt, dass die Variable nach ihrer Definition nicht im

Kommandofenster ausgegeben wird. Alle nachfolgenden Variablennamen und Einträge sind

willkürlich und als Beispiele zu verstehen. Gibt man keinen Variablennamen an, so weist MATLAB das

Ergebnis automatisch dem Namen „ans“ (für answer) zu. Im Workspace-Fenster (rechts oben) werden

alle bisher definierten Variablen aufgelistet.

Skalar definieren

o x = 3.75 %Punkt vor Nachkommastellen benutzen!

o y = 7/8 + 5^2 %auch Ergebnisse von Rechnungen sind zulässig

o k = 2.64e-6 %kurze Schreibweise für k = 2.64*10^-6

Komplexe Zahl definieren

o z = 2 + 2*j %als imaginäre Einheit kann man j oder i benutzen

o z = sqrt(8)*exp(i*pi/4) %die gleiche Zahl in Exponentialform definiert

Zeilenvektor definieren

o v = [1 5 -2] %eckige Klammern u. Leerzeichen zwischen Einträgen

o n = (0:2:100); %der Vektor n besitzt die Einträge 0 2 4 6 … 98 100

%Syntax: (Anfangswert : Schrittweite : Endwert)

Spaltenvektor definieren

o w = [4 ; 6 ; 1] %Einträge durch Semikolon trennen

o w = [4 6 1]‘ %Zeilenvektor definieren und transponieren mit ‘

Matrix definieren

o A = [3 1+2*j 2 ; 4 0 -5] %definiert eine 2x3 Matrix

o B = A‘ % Matrix A wird transponiert, B ist eine 3x2 Matrix

o C = eye(3) %definiert eine 3x3 Einheitsmatrix

o D = zeros(3,4) %definiert 3x4 Matrix bestehend aus Nullen

o E = ones(4,2) %definiert 4x2 Matrix bestehend aus Einsen

o E = [E [2 4 3 5]‘] %fügt E eine Spalte hinzu, E ist jetzt eine 4x3 Matrix

Variablen anzeigen

o who %zeigt alle zurzeit verwendeten Variablennamen an

o whos %zeigt zusätzliche Informationen zu den Variablen an

Variablen löschen

o clear k h %löscht nur die Variablen k und h

o clear %löscht alle Variablen im Workspace

Page 3: Unterlagen zum Praktikum Lego Mindstorms in der FEITMedizintechnik... · Lego Mindstorms in der FEIT Inhalt 1. MATLAB Variablen in MATLAB definieren 1 Operationen mit Vektoren und

2

Operationen mit Vektoren und Matrizen Im Folgenden sind weitere wichtige Befehle für den Umgang mit und die Manipulation von Matrizen

und Vektoren aufgeführt. Weiterhin wird auf Rechenoperationen mit Matrizen eingegangen. Dabei ist

zu beachten, dass Multiplikation und Division immer als Matrixmultiplikationen interpretiert werden

(bei der Division wird mit der inversen Matrix multipliziert). Es können z.B. Fehler auftreten, wenn die

Dimensionen der Operanden nicht zusammen passen. Außerdem gibt es für Matrizen sogenannte

Feldoperationen, bei denen die Multiplikation, Division etc. komponentenweise durchgeführt werden.

Ebenso funktionieren auch logische Operationen mit Matrizen.

Arbeiten mit Vektoren und Matrizen

o length(x) %gibt Anzahl der Elemente des Vektors x zurück

o size(Y) %liefert Dimension der Matrix Y

o inv(Y) %liefert die inverse Matrix zu Y (wenn existent)

o det(Y) %liefert Determinante von Y

o x(n) %Zugriff auf das n-te Element des Vektors x (n=1,2,3…)

o Y(n,m) %Zugriff auf das m-te Element der n-ten Zeile der Matrix Y

o Y(n,:) %liefert die n-te Zeile als Vektor

o Y(:,m) %liefert die m-te Spalte als Vektor

o Y(n,:) = [] %löscht die n-te Zeile der Matrix Y

o Y‘ %transponieren eines Vektors oder einer Matrix

Arithmetische Matrixoperationen

o A + B %komponentenweise Addition (Dim. müssen gleich sein)

o A – B %komponentenweise Subtraktion (Dim. müssen gleich sein)

o A*B %Matrixmultiplikation ist nur definiert wenn die Anzahl der

%Spalten von A der Anzahl der Zeilen von B entspricht!

o A/B %rechte Division bedeutet A*inv(B), falls inv(B) existiert

o A\B %linke Division bedeutet inv(A)*B falls inv(A) existiert

o A^n %A wird n Mal (n=1,2,3…) mit sich selbst multipliziert (nur bei

%quadratischen Matrizen möglich)

Feldoperationen

o A.*B %komponentenweise Multiplikation(Dim. müssen gleich sein)

o A./B % komponentenweise Division (Dim. müssen gleich sein)

o A.^k %jedes Element wird hoch k genommen (k ist reelle Zahl)

o abs(A) %gibt den Betrag für jede Komponente zurück

Logische Operationen (bei Matrizen komponentenweise)

o A&B %gibt Matrix zurück mit einer 1 an den Stellen, wo A und B

%ungleich 0 sind, alle anderen Einträge sind 0

o A>B %A größer B

o A>=B %A größer gleich B (für A<B etc. analog!)

o A==B %A gleich B

o A~=B %A ungleich B

o A|B %A oder B: gibt nur 0 wo beide Einträge 0 sind

o ~A %Negation: gibt 1 überall wo Eintrag 0 ist

o xor(A,B) %exclusive or: gibt nur 0 wo beide Einträge ungleich 0 sind

Page 4: Unterlagen zum Praktikum Lego Mindstorms in der FEITMedizintechnik... · Lego Mindstorms in der FEIT Inhalt 1. MATLAB Variablen in MATLAB definieren 1 Operationen mit Vektoren und

3

Die Hilfe-Funktion und Hilfe-Kommandos Die bisher aufgeführten Befehle sind bei weitem keine Vollständige Auflistung. Es gibt noch sehr viel

mehr als in diese Zusammenfassung wichtiger Befehle passen würde. Daher ist es notwendig, die

MATLAB-Hilfe benutzen zu können um sich neue Befehle oder weitere Eigenschaften bekannter

Befehle zu erschließen. Zum einen findet man in der oberen Menu-Leiste unter Help > Product Help

ein Hilfe-Verzeichnis welches sich durchsuchen lässt und Informationen über jede Toolbox und Befehle

geordnet nach Kategorien enthält. Dies ist praktisch wenn man den Namen des gesuchten Befehls

nicht kennt, jedoch die Kategorie in welcher dieser stehen müsste. Eine andere Möglichkeit ist die

Eingabe von „help“ im Kommandofenster. Kennt man den Namen des gesuchten Befehls, lässt sich

mit „help <Befehlsname>“ direkt eine detailierte Beschreibung des Befehls anzeigen. Man kann auch

direkt den Namen einer Kategorie nach „help“ eingeben. Einige nützliche Befehle sind im Folgenden

aufgeführt:

Hilfe-Befehle

o help %ruft die Komplette Liste aller Befehlskategorien auf

o help elmat %Befehle für elementare Matrixmanipulationen

o help elfun %Befehle für elementare mathematische Funktionen

o help ops %Operatoren (z.B. +, -, *, <, ==, &, |, …)

o help lang %Programmiersprachen-Konstrukte (z.B. if, else, while…)

o help polyfun %Befehle für Interpolation und Polynome

o help matfun %Befehle für Matrix Funktionen

o help graph2d %Befehle für 2D-Graphen

o help <Befehlsname> %detailierte Beschreibung des Befehls meist mit Beispiel

Strukturen (Structs) in MATLAB

Strukturen sind Felder, in denen verschiedene Datentypen (z.B. Skalare, Strings, Vektoren,

Matrizen…) zusammen in einer logischen Einheit gespeichert werden können. Dabei wird auf die

einzelnen Daten nicht durch numerische Indizes, sondern durch Namen zugegriffen. Diese Strukturen

können benutzt werden, um unterschiedliche, aber zusammengehörige Daten übersichtlich

zusammenzufassen. Eine leere Struktur kann wie folgt initialisiert werden:

StructName = struct(‘Darum1‘ , [], ‘Datum2‘ , [], ‘Datum3‘ , [] )

In diesem Fall besitzt die Struktur 3 Einträge (können beliebig viele sein), welche alle noch leer sind.

Die eckigen Klammern ohne Inhalt sind sozusagen Platzhalter für die richtigen Daten. Jetzt kann man

mit folgender Syntax auf die Daten zugreifen:

StructName.Datum1 = [1 5 -2]; %Datum 1 ist jetzt ein Zeilenvektor

StructName.Datum2 = ‘hallo‘; %Datum 2 ist ein String

StructName.Datum3 = eye(2); %Datum 3 ist eine 2x2 Einheitsmatrix

Prinzipiell kann man durch diese Einzeldefinitionen ebenfalls die Struktur definieren ohne sie vorher

initialisieren zu müssen.

Page 5: Unterlagen zum Praktikum Lego Mindstorms in der FEITMedizintechnik... · Lego Mindstorms in der FEIT Inhalt 1. MATLAB Variablen in MATLAB definieren 1 Operationen mit Vektoren und

4

Programmstrukturierung Wie bereits aus den Grundlagen der Informatik bekannt sein sollte, dienen Verzweigungen, Schleifen

und Funktionen der Strukturierung von Programmen.

If-Verzweigung

o if (BEDINGUNG) %BEDINGUNG muss Boolscher Ausdruck sein

%code

o else % optional

%code

o end

Switch-Verzweigung

o switch VAR

Case WERT#1 %beliebig viele Cases implementierbar

%code

Case WERT#2

%code

o end

For-Schleife

o for VAR = START:STOP %Alternativ: VAR = START : SCHRITTWEITE : STOPP

%code

o end

While-Schleife

o while (BEDINGUNG)

%code

o end

Funktionen

o VAR ist die Rückgabevariable, beliebig viele Eingangsparameter möglich

o Wird die Funktion in einem separaten .m-file abgespeichert muss dieses den Namen

der Funktion tragen

Function VAR=Funktionsname(PARAMETER)

%code

end

Skripte

o Sind eine Ansammlung sequentiell abzuarbeitender Befehle

o Werden durch Eingabe des Dateinamens im Hauptfenster aufgerufen

Page 6: Unterlagen zum Praktikum Lego Mindstorms in der FEITMedizintechnik... · Lego Mindstorms in der FEIT Inhalt 1. MATLAB Variablen in MATLAB definieren 1 Operationen mit Vektoren und

5

Messwertdarstellung Messwerte stellt man am besten in Diagrammen bzw. Plots dar.

Plot(x,y, … )

o Übergabe zweier gleich langer Vektoren, die entsprechend x- bzw. y-Werte der

darzustellenden Punkte beinhalten

o … Optionen wählbar durch einen String aus maximal 3 Zeichen

o Weitere Informationen durch Eingabe von help plot

Plot-Optionen

Erstes Zeichen

Farbe Zweites Zeichen

Markierung der Punkte

Drittes Zeichen

Linienstil

B Blue . Punkt - Durchgehend

G Green o Kreis : Gepunktet

R Red X Kreuz -. Punkt-Strich

C Cyan + Plus -- Gestrichelt

M Magenta * Stern (none) Keine Linie

Y Yellow S Quadrat

K Black D Diamant/Raute

w white v Dreieck

o Beispiel:

x = -pi : pi/10 : pi;

y = tan(sin(x)) - sin(tan(x));

Plot( x , y , 'rs--' )

Timing Zur Verbesserung des Programmablaufes kann es nötig sein, Pausen in der Abarbeitung einzufügen

oder herauszufinden, wie viel Zeit seit einem bestimmten Befehl vergangen ist.

Tic

o Startet einen Zähler, der mit toc abgerufen werden kann

Toc

o Gibt den aktuellen Wert in Sekunden des von tic gestarteten Timers aus

Pause

o Pause on – erlaubt Pause-Befehle

o Pause off – deaktiviert Pause-Befehle

o Pause(ZEIT) – unterbricht den Programmablauf für ZEIT Sekunden

Page 7: Unterlagen zum Praktikum Lego Mindstorms in der FEITMedizintechnik... · Lego Mindstorms in der FEIT Inhalt 1. MATLAB Variablen in MATLAB definieren 1 Operationen mit Vektoren und

6

Funktionsinterpolation Hat man eine Reihe von Messwerten aufgenommen, kann es sinnvoll sein, eine Funktion zu

interpolieren, durch die diese Messwerte beschrieben werden – z.B. um das Verhalten des

untersuchten Systems zwischen den gemessenen Werten abzuschätzen.

P=polyfit(x,y,n)

o Berechnet die Koeffizienten P eines Polynoms n-ten Grades, welches die gegebenen

Messwerte(x,y) ab besten annähert

o P ist ein Vektor der Länge n+1 der die Koeffizienten der verschiedenen Potenzen von

x in absteigender Reihenfolge enthält

o Anzahl der Messwerte sollte größer sein als die Ordnung des zu interpolierenden

Polynoms

Y = polyval (P, X)

o Berechnet den Funktionswert Y des Polynoms P an der Stelle X

Zusätzlich zu dieser Art der Interpolation, welche nur Polynome als Ergebnis zulässt, gibt es weitere

Befehle, einsehbar z.B. unter help polyfun.

Es existieren auch zwei graphisch gestützte Möglichkeiten, Messwerte durch Funktionen anzunähern:

1. Start Toolboxes curve fitting

2. Im Plot: Tools basic fitting

Diese bieten direkten Vergleich der Messwerte mit der Interpolierten Funktion und ermöglichen den

Export der Ergebnisse zum Workspace.

Page 8: Unterlagen zum Praktikum Lego Mindstorms in der FEITMedizintechnik... · Lego Mindstorms in der FEIT Inhalt 1. MATLAB Variablen in MATLAB definieren 1 Operationen mit Vektoren und

7

NXT Kommunikation

Diese Befehlskategorie dient der Kommunikation von PC und NXT. Sämtliche weitere Befehle,

die auf den NXT zugreifen sollen, benötigen dafür ein sogenanntes handle, welches mit Hilfe

dieser Kommunikationsbefehle erstellt und verwaltet werden kann. Das handle selbst ist ein

Objekt, welches für die Kommunikation erforderliche Daten enthält und somit im Programm

festlegt, welcher NXT angesteuert werden soll.

COM_OpenNXT( ) o alternativ: COM_OpenNXT(inifilename)

o Verwendung: handle = COM_OpenNXT(…); o ohne Parameter öffnet dieser Befehl eine USB-Verbindung zum ersten NXT,

der gefunden wird.

o Wird eine passende .ini-Datei übergeben, funktioniert der Befehl wie ohne Parameter – sollte jedoch per USB kein NXT gefunden werden, wird die Suche via Bluetooth mit den gegebenen Einstellungen fortgesetzt.

Zum Erstellen der .ini-Datei COM_MakeBTConfigFile

COM_OpenNXTEx('USB', UseThisNXTMAC) o alternativ: COM_OpenNXTEx('Bluetooth', UseThisNXTMAC, inifilename) o Verwendung: handle = COM_OpenNXTEx(…);

o ähnlich wie handle = COM_OpenNXT(), mit Spezifikation, welcher NXT ausgewählt werden soll (besonders für Bluetooth sinnvoll)

COM_CloseNXT(handle) o Beendet die Verbindung zum angegebenen NXT und löscht das handle.

o Wird an Stelle eines handles ’all’ übergeben, werden alle bestehenden Verbindungen getrennt

o Beispiel: handle = COM_OpenNXT('bluetooth.ini'); COM_SetDefaultNXT(handle); NXT_PlayTone(440,10); COM_CloseNXT(handle);

COM_SetDefaultNXT(handle) o Setzt das übergebene handle als globales handle, welches alle NXT-Funktionen

verwenden, wenn kein handle übergeben wird.

COM_GetDefaultNXT( ) o Verwendung: handle =COM_GetDefaultNXT(); o gibt den defaultNXT an (wird durch COM_SetDefaultNXT spezifiziert), welchen

alle NXT-Funktionen verwenden, wenn kein handle übergeben wird. o Beispiel:

handle = COM_OpenNXT('bluetooth.ini'); COM_SetDefaultNXT(handle); MyNXT = COM_GetDefaultNXT(); % now MyNXT and handle refer to the same device

COM_MakeBTConfigFile( ) o Öffnet Dialog zur Erstellung einer .ini-Datei für Bluetooth-Verbindungen (Siehe

COM_OpenNXT(inifilename))

Page 9: Unterlagen zum Praktikum Lego Mindstorms in der FEITMedizintechnik... · Lego Mindstorms in der FEIT Inhalt 1. MATLAB Variablen in MATLAB definieren 1 Operationen mit Vektoren und

8

NXT Motor Class Die folgenden Befehle dienen der Erstellung und Verwendung von Motorobjekten.

Diese bieten den komfortabelsten Weg, Befehle an die Motoren des NXT zu senden, indem dem

Objekt zuerst alle gewünschten Eigenschaften zugewiesen werden und es dann an die MotorControl

auf dem NXT übermittelt wird.

NXTMotor(PORT) o Verwendung: OBJ = NXTMotor(Port); o Erzeugt ein NXTMotor-Objekt und weist es der Variable OBJ zu. Über diese

Variable können nun sämtliche Methoden dieser Klasse aufgerufen werden. o Port spezifiziert den Anschlussport des Motors. Zulässige Angaben: [0, 1, 2,

MOTOR_A, MOTOR_B, MOTOR_C, 'A', 'B', 'C'] Synchronbetrieb zweier Motoren durch Angabe zweier Ports in einem

Vektor , z.B. ’AB’, ’BC’‚ ’AC’ o Weitere mögliche Eigenschaften des Motor-Objektes: NXTMotor(PORT,

’EIGENSCHAFT1’, WERT1‚ ’Eigenschaft2’ , WERT2) Power – bestimmt die am Motor anliegende Batteriespannung in

Prozent, [-100,100] – bestimmt per Vorzeichen die Bewegungsrichtung SpeedRegulation – [TRUE,FALSE] wird SpeedRegulation auf TRUE

gesetzt, versucht der Controller die Drehzahl des Motors unabhängig von der Last konstant zu halten, d.h. Power wird entsprechend nachgeregelt

TachoLimit – [0 , 999999] gibt die Position an, bei der ActionAtTachoLimit ausgelöst wird, 0 für Endlosbetrieb; Richtung einstellbar durch Vorzeichen von Power

ActionAtTachoLimit – gewünschte Aktion bei Erreichen von TachoLimit [COAST,BRAKE,HOLDBRAKE]

’COAST’ – Motorspannung schaltet bei TachoLimit ab, rollt frei weiter (je nach Geschwindigkeit und Trägheit) - TachoLimit wird nicht eingehalten

’BRAKE’ – führt kurz vor Erreichen von TachoLimit Gegenstrombremsung durch – erreicht TachoLimit im Allgemeinen mit Genauigkeit von +/- 1°; nach dem Bremsen wird Motorspannung abgeschaltet

’HOLDBRAKE’ – ähnlich wie BRAKE, jedoch bleibt Bremse nach Stillstand aktiv um Motor auf Position zu halten (vgl. Handbremse bei Parken in Schräglage) – verbraucht EXTREM viel Energie!

SmoothStart – Steigert Power beim Anfahren linear von 0 zum gewünschten Wert, verhindert durchdrehende Reifen; nur verfügbar in Verbindung mit TachoLimit > 0 und ActionAtTachoLimit = BRAKE oder HOLDBRAKE

Page 10: Unterlagen zum Praktikum Lego Mindstorms in der FEITMedizintechnik... · Lego Mindstorms in der FEIT Inhalt 1. MATLAB Variablen in MATLAB definieren 1 Operationen mit Vektoren und

9

o Beispiel: % Construct a NXTMotor object on port 'B' with a power of % 60, disabled speed regulation, a TachoLimit of 360 and % send the motor settings to the NXT brick. motorB = NXTMotor('B', 'Power', 60) motorB.SpeedRegulation = false; motorB.TachoLimit = 360; motorB.ActionAtTachoLimit = 'Brake'; % this is the default anyway motorB.SmoothStart = true; % enough setting up params, let's go! motorB.SendToNXT(); % let MATLAB wait until the motor has stopped moving motorB.WaitFor(); % Play tone when motor is ready to be used again NXT_PlayTone(400,500);

DATA = OBJ.ReadFromNXT(HANDLE) o Ermittelt den aktuellen Status des durch OBJ spezifizierten Motors

o Ergebnis DATA ist eine Struktur folgender Zusammensetzung: Port Power Position – aktuelle Position des internen Rotationssensors in Grad;

kann mit OBJ.ResetPosition() auf 0 gesetzt werden IsRunning – [TRUE, FALSE] gibt an, ob Spannung am Motor anliegt, z.B.

bei Fahrt oder aktiver Bremsung. SpeedRegulation – siehe NXTMotor(PORT, ’EIGENSCHAFT1’, WERT1) TachoLimit – siehe NXTMotor(PORT, ’EIGENSCHAFT1’, WERT1) TachoCount – interner Zähler für Erreichung von TachoLimit. i.A. gleich

dem Wert Position, solange nicht OBJ.ResetPosition aufgerufen wird. o Beispiel:

% Move motor A and show its state after 3 seconds motorA = NXTMotor('A', 'Power', 50); motorA.SendToNXT(); pause(3); data = motorA.ReadFromNXT();

OBJ.ResetPosition(HANDLE) o Setzt den Wert des internen Rotationssensors auf 0; siehe OBJ.ReadFromNXT

(betrifft Wert Position, NICHT TachoCount)

OBJ.SendToNXT(HANDLE) o Sendet die aktuelle Motorkonfiguration aus OBJ an den NXT – Die tatsächliche

Bewegung des Motors startet erst mit diesem Kommando, nicht durch setzen der Attribute von OBJ.

o Führt der angesprochene Motor noch ein Kommando aus, wird die neue Anweisung ignoriert. Um sicherzustellen, dass der Motor bereit ist, verwendet man OBJ.WaitFor oder unterbricht die aktuelle Anweisung mit OBJ.Stop

Page 11: Unterlagen zum Praktikum Lego Mindstorms in der FEITMedizintechnik... · Lego Mindstorms in der FEIT Inhalt 1. MATLAB Variablen in MATLAB definieren 1 Operationen mit Vektoren und

10

OBJ.Stop(BRAKEMODE, HANDLE) o Stoppt den durch OBJ spezifizierten Motor nach Angabe in BRAKEMODE:

['nobrake', 'off', 0, false] COAST, Ausrollen ['brake', 'on', 1, true] BRAKE, aktive Bremsung

o Um alle Motoren exakt zur selben Zeit zu stoppen, ist StopMotor(port, mode)geeigneter.

OBJ.WaitFor(HANDLE) o Wartet bis die kontrollierte Bewegung des durch OBJ angegebenen Motors

abgeschlossen ist.

o Alternativ: OBJ.WaitFor(TIMEOUT, HANDLE) funktioniert grundlegend genauso, allerdings nur für den Zeitraum TIMEOUT (in Sekunden) – nützlich falls der Motor blockiert wird und ein vorgegebenes TachoLimit nicht erreichen kann (vermeidet Endlosschleife)

o Beispiel: motor = NXTMotor('A', 'Power', 50, 'TachoLimit', 200); motor.SendToNXT(); motor.WaitFor(); NXT_PlayTone(400,500);

Classic NXT Motor Functions Dienen ebenso wie die NXT Motor Class Befehle dem Ansteuern der NXT-Motoren und erfüllen

grundsätzlich dieselbe Funktionalität, weshalb sie hier nicht aufgeführt werden. Bei Interesse

konsultieren Sie die Hilfe der Toolbox.

StopMotor(port, mode, handle)

o Ähnlich wie Motor.Stop(); verwendet selbe Modi

o 'all' als Portangabe stoppt alle Motoren gleichzeitig

o Nutzen Sie wenn möglich die Methode .Stop des Motorobjektes

Page 12: Unterlagen zum Praktikum Lego Mindstorms in der FEITMedizintechnik... · Lego Mindstorms in der FEIT Inhalt 1. MATLAB Variablen in MATLAB definieren 1 Operationen mit Vektoren und

11

NXT Sensoren

Folgende Befehle werden zum initialisieren, kalibrieren und auslesen der einzelnen Sensoren

benötigt. Die Ports für die Sensoren werden mit den Konstanten SENSOR_1, SENSOR_2,

SENSOR_3 und SENSOR_4 angesprochen, entsprechend den Zahlen an den Eingängen des

NXT-Controllers.

CalibrateCompass(port, f_start)

o Der Sensor muss vorher initialisiert sein. Während der Kalibrierung muss der

Kompass 2 Mal langsam um 360° gedreht werden. Vermindert Störeinflüsse

z.B. durch den NXT-Motor. Mit f_start bestimmt man Start und Stopp der

Kalibrierung indem man TRUE bzw. FALSE einsetzt.

o Beispiel:

% compass must be open for calibration

OpenCompass(SENSOR_2);

% enable calibration mode

CalibrateCompass(SENSOR_2, true);

% compass is attached to motor A, rotate 2 full turns

m = NXTMotor('A', 'Power', 5, 'TachoLimit', 720)

m.SendToNXT();

m.WaitFor();

% calibration should now be complete!

CalibrateCompass(SENSOR_2, false)

CalibrateGyro(port, 'AUTO')

o Alternativ: offset = CalibrateGyro(port, 'MANUAL', manualOffset) o Der Sensor muss vorher initialisiert sein. Der Befehl setzt den neuen Offset-

Wert des Sensors und gibt ihn als Wert zurück. o Auto-Modus: Der Sensor muss sich währenddessen für einige Sekunden in

Ruhe befinden! o Manueller Modus: Als manualOffset wird ein integer-Wert benutzt, der vorher

durch Autokalibrierung bestimmt wurde. Dadurch braucht der Sensor während der Kalibrierung nicht in Ruhe zu sein.

o Beispiel: h = COM_OpenNXT(); COM_SetDefaulNXT(h); OpenGyro(SENSOR_1); % now, once the automatic calibration: offset = CalibrateGyro(SENSOR_1, 'AUTO'); % remember this value...

CloseSensor(port)

o Der Befehl schließt den vorher initialisierten Sensor am gewählten Port. o Beispiel:

OpenLight(SENSOR_3, 'ACTIVE'); light = GetLight(SENSOR_3); CloseSensor(SENSOR_3);

Page 13: Unterlagen zum Praktikum Lego Mindstorms in der FEITMedizintechnik... · Lego Mindstorms in der FEIT Inhalt 1. MATLAB Variablen in MATLAB definieren 1 Operationen mit Vektoren und

12

GetAccelerator(port)

o Gibt den 1x3 Beschleunigungsvektor des Sensors zurück. Ein Wert von 200 entspricht der Erdbeschleunigung (1g). Der Wertebereich liegt zwischen -2g und 2g.

o Beispiel: OpenAccelerator(SENSOR_4); acc_Vector = GetAccelerator(SENSOR_4); CloseSensor(SENSOR_4);

GetColor(port, mode)

o Gibt den Farbindex und die RGB-Werte des HiTechnic V2-Farbsensors als Vektor zurück. Es wird nur mode = 0 unterstützt! Der Wertebereich der RGB-Werte liegt zwischen 0 und 255. Der Farbindex entspricht ungefähr folgenden Farben:

% 0 = black % 1 = violet % 2 = purple % 3 = blue % 4 = green % 5 = lime % 6 = yellow % 7 = orange % 8 = red % 9 = crimson % 10 = magenta % 11 to 16 = pastels % 17 = white

o Beispiel: OpenColor(SENSOR_4); [index r g b] = GetColor(SENSOR_4, 0); CloseSensor(SENSOR_4);

GetCompass(port)

o Gibt die Richtung des Kompass-Sensors in Grad an. Der Wertebereich liegt zwischen 0 und 359, wobei 0 Norden kennzeichnet. Die Zählweise ist gegen den Uhrzeigersinn, d.h. die Richtung Westen ist z.B. bei dem Wert 90.

o Beispiel: OpenCompass(SENSOR_4); degree = GetCompass(SENSOR_4); CloseSensor(SENSOR_4);

GetGyro(port)

o Gibt die Winkelgeschwindigkeit des Gyro-Sensors in Grad pro Sekunde aus. Der Wertebereich liegt zwischen -360 und 360. Vorher muss der Sensor initialisiert und kalibriert werden (siehe CalibrateGyro).

o Beispiel: OpenGyro(SENSOR_2); CalibrateGyro(SENSOR_2, 'AUTO'); speed = GetGyro(SENSOR_2);

Page 14: Unterlagen zum Praktikum Lego Mindstorms in der FEITMedizintechnik... · Lego Mindstorms in der FEIT Inhalt 1. MATLAB Variablen in MATLAB definieren 1 Operationen mit Vektoren und

13

CloseSensor(SENSOR_2);

GetInfrared(port)

o Gibt die Rohdaten des Infrarot-Sensors als 1x5 Vektor, sowie die Hauptrichtung (1-9) zurück.

o Beispiel: OpenInfrared(SENSOR_4); [direction rawData] = GetInfrared(SENSOR_4); CloseSensor(SENSOR_4);

GetLight(port)

o Gibt den normalisierten Lichtwert zurück. Dieser liegt zwischen 0 und 1023. o Beispiel:

OpenLight(SENSOR_1, 'ACTIVE'); light = GetLight(SENSOR_1); CloseSensor(SENSOR_1);

GetNXT2Color(port)

o Je nach Modus in dem der LEGO NXT 2.0-Farbsensor initialisiert wurde, gibt der Befehl unterschiedliche Werte zurück:

Full color mode: Gibt einen der folgenden Strings zurück: 'BLACK', 'BLUE', 'GREEN', 'YELLOW', 'RED', 'WHITE'

Jeder andere Modus: Gibt einen Integer-Wert zwischen 0 und 1023 zurück, je nachdem wie viel Licht reflektiert und detektiert wurde.

o Beispiel 1: port = SENSOR_1; OpenNXT2Color(port, 'FULL'); color = GetNXT2Color(port); if strcmp(color, 'BLUE') disp('Blue like the ocean'); else disp(['The detected color is ' color]); end CloseSensor(port);

o Beispiel 2: port = SENSOR_2; OpenNXT2Color(port, 'NONE'); colorVal = GetNXT2Color(port); if colorVal > 700 disp('It is quite bright!') end CloseSensor(port);

GetSound(port)

o Gibt den normalisierten Wert des Schallsensors zurück (zwischen 0 und 1023). Der Modus für die Rückgabe normalisierter Werte wird standardmäßig durch den Befehl OpenSound gesetzt.

o Beispiel: OpenSound(SENSOR_1, 'DB');

Page 15: Unterlagen zum Praktikum Lego Mindstorms in der FEITMedizintechnik... · Lego Mindstorms in der FEIT Inhalt 1. MATLAB Variablen in MATLAB definieren 1 Operationen mit Vektoren und

14

sound = GetSound(SENSOR_1); CloseSensor(SENSOR_1);

GetSwitch(port)

o Gibt den Wert des Tastsensors als logische Größe zurück. Ist er gedrückt, liefert die Funktion TRUE zurück, wenn nicht liefert sie FALSE.

o Beispiel: OpenSwitch(SENSOR_4); switchState = GetSwitch(SENSOR_4); CloseSensor(SENSOR_4);

GetUltrasonic(port)

o Gibt die gemessene Entfernung des Ultraschallsensors in cm zurück. Der maximal mögliche Wert ist 255. Bei einem Fehler wird -1 zurückgegeben. Ist der Sensor im Snapshot-Modus, funktioniert dieser Befehl nicht. Der Wert kann maximal alle 20 ms ausgelesen werden.

o Beispiel: OpenUltrasonic(SENSOR_4); distance = GetUltrasonic(SENSOR_4); CloseSensor(SENSOR_4);

OpenAccelerator(port)

o Initialisiert den Beschleunigungssensor am gewählten Port. o Beispiel:

OpenAccelerator(SENSOR_4); acc_Vector = GetAccelerator(SENSOR_4); CloseSensor(SENSOR_4);

OpenColor(port)

o Initialisiert den V2-Farbsensor am gewählten Port. o Beispiel:

OpenColor(SENSOR_2); [index r g b] = GetColor(SENSOR_2, 0); CloseSensor(SENSOR_2);

OpenCompass(port)

o Initialisiert den Kompass-Sensor am gewählten Port. o Beispiel:

OpenCompass(SENSOR_2); degree = GetCompass(SENSOR_2); CloseSensor(SENSOR_2);

OpenGyro(port)

o Initialisiert den Gyro-Sensor am gewählten Port. Vor Benutzung muss der Sensor noch kalibriert werden! (siehe CalibrateGyro)

o Beispiel: OpenGyro(SENSOR_2); CalibrateGyro(SENSOR_2, 'AUTO'); speed = GetGyro(SENSOR_2); CloseSensor(SENSOR_2);

Page 16: Unterlagen zum Praktikum Lego Mindstorms in der FEITMedizintechnik... · Lego Mindstorms in der FEIT Inhalt 1. MATLAB Variablen in MATLAB definieren 1 Operationen mit Vektoren und

15

OpenInfrared(port)

o Initialisiert den Infrarotsensor am gewählten Port. o Beispiel:

OpenInfrared(SENSOR_4); [direction rawData] = GetInfrared(SENSOR_4); CloseSensor(SENSOR_4);

OpenLight(port, mode)

o Initialisiert den Lichtsensor am gewählten Port sowie den Modus in dem dieser betrieben werden soll.

o Modus ‘ACTIVE‘: Aktive Beleuchtung (Das rote Licht ist an). o Modus ‘INACTIVE‘: Passive Beleuchtung (Das rote Licht ist aus). o Beispiel:

OpenLight(SENSOR_1, 'ACTIVE'); light = GetLight(SENSOR_1); CloseSensor(SENSOR_1);

OpenNXT2Color(port, mode)

o Initialisiert den LEGO NXT 2.0 Farbsensor am gewählten Port. Folgende Modi sind möglich:

‘FULL‘: Die rote, grüne und blaue LED sind an. Der Sensor detektiert 6 vordefinierte Farben (Schwarz, Weiß, Blau, Grün, Gelb, Rot)

‘RED‘: Die rote LED ist an. Der Sensor gibt das reflektierte Licht bzw. die Helligkeit an.

‘GREEN‘: Die grüne LED ist an. Der Sensor gibt das reflektierte Licht bzw. die Helligkeit an.

‘BLUE‘: Die blaue LED ist an. Der Sensor gibt das reflektierte Licht bzw. die Helligkeit an.

‘NONE‘: Alle LEDs sind aus. Der Sensor gibt Umgebungshelligkeit an. o Beispiel:

port = SENSOR_2; OpenNXT2Color(port, 'NONE'); colorVal = GetNXT2Color(port); if colorVal > 700 disp('It''s quite bright!') end CloseSensor(port);

OpenSound(port, mode)

o Initialisiert den Schallsensor am gewählten Port. Folgende Modi sind möglich: ‘DB‘: Sensor gibt den entfernungsunabhängigen Schalldruckpegel in dB

aus. ‘DBA‘: Sensor gibt den in definierter Entfernung gemessenen und

bewerteten Schalldruckpegel in dB(A) aus. o Beispiel:

OpenSound(SENSOR_1, 'DB'); sound = GetSound(SENSOR_1); CloseSensor(SENSOR_1);

Page 17: Unterlagen zum Praktikum Lego Mindstorms in der FEITMedizintechnik... · Lego Mindstorms in der FEIT Inhalt 1. MATLAB Variablen in MATLAB definieren 1 Operationen mit Vektoren und

16

OpenSwitch(port)

o Initialisiert den Tastsensor am gewählten Port. o Beispiel:

OpenSwitch(SENSOR_4); switchState = GetSwitch(SENSOR_4); CloseSensor(SENSOR_4);

OpenUltrasonic(port)

o Initialisiert den Ultraschallsensor am gewählten Port. o Alternativ: OpenUltrasonic(port, mode) o Mit mode=‘snapshot‘ wird der Snapshot-Modus initialisiert. Dabei können

mehrere Messwertaufnahmen in einem Schritt ausgeführt werden. (siehe USMakeSnapshot)

o Beispiel 1: OpenUltrasonic(SENSOR_4); distance = GetUltrasonic(SENSOR_4); CloseSensor(SENSOR_4);

o Beispiel 2: port = SENSOR_4; OpenUltrasonic(port, 'snapshot'); % send out the ping USMakeSnapshot(port); % wait some time for the sound to travel pause(0.1); % retrieve all the echos in 1 step echos = USGetSnapshotResults(port); CloseSensor(SENSOR_4);

USGetSnapshotResults(port)

o Gibt den Vektor der Messergebnisse des Ultraschallsensors im Snapshot-Modus zurück. Dieser Vektor besitzt immer 8 Komponenten. Die einzelnen Werte sind Entfernungen analog zum Befehl GetUltrasonic.

o Beispiel: (siehe OpenUltrasonic)

USMakeSnapshot(port)

o Durch diesen Befehl sendet der Ultraschallsensor am gewählten Port ein einzelnes Signal (ping) aus. Bis zu 8 daraus resultierende Messwerte kann der Sensor auf einmal speichern. Mit dem Befehl USGetSnapshotResults können diese mit einem Mal ausgelesen werden.

o Beispiel: (siehe OpenUltrasonic)

Page 18: Unterlagen zum Praktikum Lego Mindstorms in der FEITMedizintechnik... · Lego Mindstorms in der FEIT Inhalt 1. MATLAB Variablen in MATLAB definieren 1 Operationen mit Vektoren und

17

NXT Direct Commands

Direkte Kommandos sind grundlegende Befehle, über die MATLAB direkt mit dem NXT

kommuniziert. Sie werden von den „einfacheren“ OpenSensor und GetSensor – Befehlen

intern verwendet und bieten dem fortgeschrittenen Benutzer vielfältige

Einstellungsmöglichkeiten. Es folgt eine unvollständige Übersicht, für nähere Informationen

konsultieren Sie die Hilfe der Toolbox.

NXT_GetBatteryLevel(handle)

o Verwendung: voltage = NXT_GetBatteryLevel(handle)

o Gibt aktuelle Batteriespannung in mV an.

NXT_SetInputMode(port, SensorTypeDesc, SensorModeDesc, ReplyMode, handle)

o Direktes NXT-Kommando zum Initialisieren von Sensoren

o Siehe Hilfe

NXT_GetInputValues(port, handle)

o Direktes NXT-Kommando zum Auslesen von Sensorwerten

o Siehe Hilfe

NXT_SetOutputState(port, power, IsMotorOn, IsBrake, RegModeName, TurnRatio,

RunStateName, TachoLimit, ReplyMode, handle)

o Direktes NXT-Kommando zum Ansteuern von Motoren

o Siehe Hilfe

NXT_GetOutputState(port, handle)

o Direktes NXT-Kommando zum Auslesen des Motorstatus

o Siehe Hilfe

NXT_SendKeepAlive(ReplyMode, handle)

o Sendet KeepAlive_packet an den NXT

o ‘dontreply‘ – setzt den internen Zähler wieder auf 0, verhindert automatisches

Abschalten

o ‘reply‘ - [status SleepTimeLimit] = NXT_SendKeepAlive('reply'), SleepTimeLimit

ist die Zeit bis zur Abschaltung in ms

NXT_PlayTone(frequency, duration, handle)

o NXT erzeugt Ton

o Frequency [200,14000]Hz ; duration in ms

NXT_PlaySoundFile(filename, 'loop')

o Gibt Sounddatei vom NXT wieder; ‘loop‘ initialisiert Endloswiedergabe

NXT_StopSoundPlayback(handle)

o beendet die aktuelle Wiedergabe