Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
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
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
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
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.
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
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
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.
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))
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
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
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
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);
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);
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');
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);
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);
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)
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