Transcript
Page 1: Programmierung der Lego Mindstorms Roboter · Kommunikation PC -> Lego Mindstorms Anschluß an COM-Port (1) Übertragung der Firmware (2) Übertragung eigener ... Direkte Steuerung

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

Programmierung derProgrammierung derLego MindstormsLego MindstormsRoboterRoboterDipl.-Inform. O. Taminé

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

Gliederung

❑ Infrastruktur Aufbau, Vorbereitungen, WWW-Links

❑ NQC-ProgrammierungVorbereitungen, Kommandozeilen-Programmierung,IDE-Oberflächen

❑ NQC-SprachreferenzBeschreibung der NQC-Sprache

Page 2: Programmierung der Lego Mindstorms Roboter · Kommunikation PC -> Lego Mindstorms Anschluß an COM-Port (1) Übertragung der Firmware (2) Übertragung eigener ... Direkte Steuerung

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

Teil I: Infrastruktur

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

RCX-BausteinRCX-Baustein

❑ Hitachi H8-Prozessor8 Bit, 16 Mhz

❑ 32 Kbyte RAM

❑ 16 Kbyte ROM

❑ je drei Ein-/Ausgänge

❑ Infrarot-Schnittstelle

❑ 5 Programmspeicher

Page 3: Programmierung der Lego Mindstorms Roboter · Kommunikation PC -> Lego Mindstorms Anschluß an COM-Port (1) Übertragung der Firmware (2) Übertragung eigener ... Direkte Steuerung

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

SpeicheraufbauSpeicheraufbau

BIOS

Firmware

1 2 3 4 532 Kbytestatisches RAM

16 Kbyte ROM

5x1,2 KByte RAMProgrammspeicherplätze

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

RCX-DisplayRCX-Display

Boot-Modus

View

On/Off

Prgm

Run

1 2 3

A B C

100.00

Zeitanzeige

^^^

SensoranzeigeBatterieanzeigeKommunikationAktiver Ausgang

Page 4: Programmierung der Lego Mindstorms Roboter · Kommunikation PC -> Lego Mindstorms Anschluß an COM-Port (1) Übertragung der Firmware (2) Übertragung eigener ... Direkte Steuerung

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

InfrarotsenderInfrarotsender

Kommunikation PC -> Lego Mindstorms

Anschluß an COM-Port

(1) Übertragung derFirmware

(2) Übertragung eigenerProgramme

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

StromversorgungStromversorgung

9 Volt (6x1,5 V Mignon Batterien)

1,5 V

Entladung

Alkaline

NiCd

Page 5: Programmierung der Lego Mindstorms Roboter · Kommunikation PC -> Lego Mindstorms Anschluß an COM-Port (1) Übertragung der Firmware (2) Übertragung eigener ... Direkte Steuerung

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

RCX-CodeRCX-Code

Lego-Programmiersprache

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

WWW-LinksWWW-Links

Software, Dokumentationen, Büchertipps, WWW-Seiten, Teilnehmerlisten, ...

auf der Praktikumshomepage:

http://i61www.ira.uka.de/users/tamine/lego/

Page 6: Programmierung der Lego Mindstorms Roboter · Kommunikation PC -> Lego Mindstorms Anschluß an COM-Port (1) Übertragung der Firmware (2) Übertragung eigener ... Direkte Steuerung

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

Teil II: NQC-Programmierung

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

Vorbereitung (Teil 1)Vorbereitung (Teil 1)

Auf Lego-CD:System\spirit.ocxFirm\firm0309.lgo

Download der RCX 2.0 Firmware:firm0328.lgo (Praktikumshomepage)

Page 7: Programmierung der Lego Mindstorms Roboter · Kommunikation PC -> Lego Mindstorms Anschluß an COM-Port (1) Übertragung der Firmware (2) Übertragung eigener ... Direkte Steuerung

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

Software installieren (Teil 2)Software installieren (Teil 2)

Installieren von Bricx Command Center:bricxcc.exe, Aktuelle Version: 3.3

Win 95/98/ME/2000/XPDownload von Homepage

Alternativ:Installieren von NQC:

nqc-win-2-3-r1.zip, Aktuelle Version: 2.3Download von Homepage

Version 2.4 im Beta-Stadium

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

Firmware übertragen (Teil 3)Firmware übertragen (Teil 3)

1. Möglichkeit Bricx Command Center:Menü Tools/Download FirmwareDatei firm0328.lgo auswählen

2. Möglichkeit:nqc -firmware pfad\firm0328.lgo

oder: nqc -firmfast pfad\firm0328.lgo

Page 8: Programmierung der Lego Mindstorms Roboter · Kommunikation PC -> Lego Mindstorms Anschluß an COM-Port (1) Übertragung der Firmware (2) Übertragung eigener ... Direkte Steuerung

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

Programmierumgebung IProgrammierumgebung I

(1) NQC-Programmin Editor schreiben

(2) DOS-Shell:Kompilieren +Übertragen an RCX

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

Programmierumgebung IIProgrammierumgebung II

Page 9: Programmierung der Lego Mindstorms Roboter · Kommunikation PC -> Lego Mindstorms Anschluß an COM-Port (1) Übertragung der Firmware (2) Übertragung eigener ... Direkte Steuerung

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

Starten vom Starten vom Bricx Command Bricx Command CenterCenter

Suche nacheingeschaltetem LegoMindstorms Roboter

Falls Roboter nicht gefunden wird,sind nicht alle Funktionen verfügbar.

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

Tool: Tool: Direct ControlDirect Control

Direkte Steuerung derRCX-Komponenten:

❑ Sensoren:Typ + Modus der 3 Sensoren

❑ Motoren:Vorwärts, Rückwärts, Bremsen, Leerlauf

❑ Variablen:Wertzuweisung

❑ Tasks:Starten + Anhalten der10 Tasks

Page 10: Programmierung der Lego Mindstorms Roboter · Kommunikation PC -> Lego Mindstorms Anschluß an COM-Port (1) Übertragung der Firmware (2) Übertragung eigener ... Direkte Steuerung

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

Tool: Tool: DiagnosticsDiagnostics

Anzeige von:

❑ Status❑ Firmware-Version❑ Batteriestatus❑ Anschlußport❑ Aktueller Programmnr.❑ Auschaltzeit❑ Infrarotstärke❑ Einschaltzeit❑ Display-Anzeige

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

Tool: Tool: Watching the Watching the RCXRCX

Beobachten folgender RCX-Werte:❑ Variablen❑ Sensoren

❑ Motoren❑ Timer

❑ Infrarot❑ Zähler

Page 11: Programmierung der Lego Mindstorms Roboter · Kommunikation PC -> Lego Mindstorms Anschluß an COM-Port (1) Übertragung der Firmware (2) Übertragung eigener ... Direkte Steuerung

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

Weitere ToolsWeitere Tools

Joystick

RCX-PianoSendMessage

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

Teil III: NQC-Sprachreferenz

Page 12: Programmierung der Lego Mindstorms Roboter · Kommunikation PC -> Lego Mindstorms Anschluß an COM-Port (1) Übertragung der Firmware (2) Übertragung eigener ... Direkte Steuerung

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

NQC SprachkonstrukteNQC Sprachkonstrukte

❑ Lexikalische Strukturen

❑ Programmstrukturen

❑ Kontrollstrukturen

❑ RCX API

❑ Beispiele

NQC = Not quite C

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

Lexikalische StrukturenLexikalische Strukturen

❑ Kommentare // Einzeiliger Kommentar/* Dieser Kommentar belegt mehrere Zeilen */

❑ Leerzeichen nicht notwendig, aber hilfreichx=2;x = 2;

❑ Numerische Konstantenx = 10; // setzt x auf den Dezimalwert 10x = 0x10; // setzt x auf den Dezimalwert 16

❑ Präprozessorbefehle wie in C

Page 13: Programmierung der Lego Mindstorms Roboter · Kommunikation PC -> Lego Mindstorms Anschluß an COM-Port (1) Übertragung der Firmware (2) Übertragung eigener ... Direkte Steuerung

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

Der Der PräprozessorPräprozessor

❑ Einbinden von Programmteilen #include “part2.nqc“

❑ Substitution von Werten#define SCHWARZ 800

❑ Speicherreservierung#pragma reserve 0 1 2notwendig bei Timern und Zählern

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

Programmstrukturen IProgrammstrukturen I

Tasks❑ RCX ist multitaskingfähig❑ unterstützt max. 10 Tasks❑ Tasks werden durch start task_name gestartet

und durch stop task_name beendet❑ StopAllTasks(); beendet alle Tasks

Beispiel:

task main(){ // Ein leerer Task}

Page 14: Programmierung der Lego Mindstorms Roboter · Kommunikation PC -> Lego Mindstorms Anschluß an COM-Port (1) Übertragung der Firmware (2) Übertragung eigener ... Direkte Steuerung

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

Programmstrukturen IIProgrammstrukturen II

Unterprogramme❑ max. 8 Stück❑ keine Parameter❑ keine Rückgabewerte ❑ keine Rekursion erlaubt❑ keine anderen Unterprogrammaufrufe erlaubt❑ nur 1 kompiliert (Speicherplatz sparend!)

Beispiel:sub dummy(){ // Ein leeres Unterprogramm}

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

Programmstrukturen IIIProgrammstrukturen III

Inline-Funktionen❑ kein Rückgabewert❑ Parameterübergabe per Wert und per Referenz❑ Funktionen werden beim Kompilieren an die

Aufrufstelle kopiert (Makro)

Beispiel:void fkt(int x, int& y) { x = 3; y = 2;} task main() { int y = 1; int x = 2; fkt(x, y);}

Page 15: Programmierung der Lego Mindstorms Roboter · Kommunikation PC -> Lego Mindstorms Anschluß an COM-Port (1) Übertragung der Firmware (2) Übertragung eigener ... Direkte Steuerung

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

VariablenVariablen

❑ nur 16-Bit Integer Variablen❑ Arrays erlaubt❑ Deklarationen wie in C❑ Ausdrücke wie in C erlaubt (++, *=, |, &&, >>, usw.)

Beispiele:

int a=1, x;x += a;a = 5 % 2; // modulox = 31 | 1; // Or

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

Globale und lokale VariablenGlobale und lokale Variablen

❑ unterstützt max. 32 globale Variablen

❑ max. 16 lokale Variablen

Beispiel:

int x = 0; // bin globaltask main() {

int y; // bin lokaly = x; // ok

}

task move() {x = 5; // oky = x; // nicht ok, y hier unbekannt

}

Page 16: Programmierung der Lego Mindstorms Roboter · Kommunikation PC -> Lego Mindstorms Anschluß an COM-Port (1) Übertragung der Firmware (2) Übertragung eigener ... Direkte Steuerung

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

KontrollstrukturenKontrollstrukturen

❑ if (Bedingung) Block1 else Block2❑ while (Bedingung) Block❑ do Block while (Bedingung)❑ repeat (Ausdruck) Block❑ switch (Ausdruck) case❑ until (Bedingung);❑ Befehle break, continue, default usw. wie in C

Beispiele:if (x==1) y = 3; else y = 4;while (x<10) {

y *= 5; x++; }until (SENSOR_1 == 1);

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

MotorsteuerungMotorsteuerung

Konstanten: OUT_A, OUT_B, OUT_C

Befehl BeschreibungOn (const) schaltet Motor einOff(const) schaltet Motor ausFloat(const) schaltet auf LeerlaufFwd(const) vorwärtsRev(const) rückwärtsToggle(const) wechselt RichtungOnFwd(const) ein + vorwärtsOnRev(const) ein + rückwärtsOnFor(const, time) vorwärts für time/100 secSetPower(const, x) Geschwindigkeit (0-7)

Page 17: Programmierung der Lego Mindstorms Roboter · Kommunikation PC -> Lego Mindstorms Anschluß an COM-Port (1) Übertragung der Firmware (2) Übertragung eigener ... Direkte Steuerung

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

SensorikSensorik

Berührungssensor Lichtsensor

Ausgänge: SENSOR_1, SENSOR_2, SENSOR_3Sensoren: SENSOR_TOUCH, SENSOR_LIGHTSetSensor(Ausgang, Sensor) setzt einen Ausgangauf einen bestimmten SensortypDer Sensor wird dabei in seinem Standardmodusbetrieben

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

BerührungssensorBerührungssensor

Was macht dieses Programm ?

task main(){

SetSensor(SENSOR_1, SENSOR_TOUCH);OnFwd(OUT_A+OUT_C);until (SENSOR_1 == 1);Off(OUT_A+OUT_C);

}

Page 18: Programmierung der Lego Mindstorms Roboter · Kommunikation PC -> Lego Mindstorms Anschluß an COM-Port (1) Übertragung der Firmware (2) Übertragung eigener ... Direkte Steuerung

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

Sensor-ModiSensor-Modi

Const: SENSOR_TYPE_TOUCH, SENSOR_TYPE_LIGHT

Befehl BeschreibungSetSensorType(Ausgang, const) legt Sensortyp festSetSensorMode(Ausgang, mod) legt Sensormodus fest

Modus BeschreibungSENSOR_MODE_RAW 0 bis 1023SENSOR_MODE_BOOL 0 bis 1SENSOR_MODE_EDGE zählt ZustandswechselSENSOR_MODE_PULSE zählt ZustandsperiodenSENSOR_MODE_PERCENT 0 bis 100 Prozent

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

Funktionsweise eines SensorsFunktionsweise eines Sensors

SENSOR_MODE_RAW

1023

0

SENSOR_MODE_PERCENT: Transformation desRaw-Wertes in den Wertebereich 0-100

t

Page 19: Programmierung der Lego Mindstorms Roboter · Kommunikation PC -> Lego Mindstorms Anschluß an COM-Port (1) Übertragung der Firmware (2) Übertragung eigener ... Direkte Steuerung

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

Boolescher ModusBoolescher Modus

SENSOR_MODE_BOOL

False

1023

0

True

t

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

ZustandswechselZustandswechsel

SENSOR_MODE_EDGE

1023

0

1

2

3

4

t

Page 20: Programmierung der Lego Mindstorms Roboter · Kommunikation PC -> Lego Mindstorms Anschluß an COM-Port (1) Übertragung der Firmware (2) Übertragung eigener ... Direkte Steuerung

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

PeriodenwechselPeriodenwechsel

SENSOR_MODE_PULSE

1023

01

2

t

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

RCX RCX EventsEvents

Befehl BeschreibungSetEvent(Nr, source, type) legt Sensorfest festmonitor(EVENT_MASK(Nr)) überwacht Event

Typ BeschreibungEVENT_TYPE_PRESSED GedrücktEVENT_TYPE_RELEASED Nicht gedrücktEVENT_TYPE_PULSE PeriodenwechselEVENT_TYPE_EDGE ZustandswechselEVENT_TYPE_LOW Wechsel in NiedrigbereichEVENT_TYPE_NORMAL Wechsel in NormalbereichEVENT_TYPE_HIGH Wechsel in HochbereichEVENT_TYPE_MESSAGE IR-Nachricht empfangenEVENT_TYPE_FASTCHANGE Schneller Wertwechsel

Page 21: Programmierung der Lego Mindstorms Roboter · Kommunikation PC -> Lego Mindstorms Anschluß an COM-Port (1) Übertragung der Firmware (2) Übertragung eigener ... Direkte Steuerung

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

Niedrig

Normal

Event Event ModusModus

Hoch1023

0

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

Beispiel: LichtsensorBeispiel: Lichtsensor

task main() {

SetSensorType(SENSOR_2, SENSOR_LIGHT);

SetEvent(1, SENSOR_2, EVENT_TYPE_HIGH);

SetEvent(2, SENSOR_2, EVENT_TYPE_LOW);

SetLowerLimit(2, 550); SetUpperLimit(1, 790);

monitor(EVENT_MASK(1) | EVENT_MASK(2)) {

// tue was immer du willst...

} catch (EVENT_MASK(1)) {

// Schwarz gefunden

} catch (EVENT_MASK(2)) {

// Weiss gefunden

} }

Page 22: Programmierung der Lego Mindstorms Roboter · Kommunikation PC -> Lego Mindstorms Anschluß an COM-Port (1) Übertragung der Firmware (2) Übertragung eigener ... Direkte Steuerung

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

KommunikationKommunikation

❑ id = Message();id = 0: keinen Wert empfangen

❑ SendMessage(id);versendet id (0-255)

❑ ClearMessage();löschst den Empfangspuffer

❑ SetTXPower(TX_POWER_LO)legt Sendestärke fest

Befehle:

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

Beispiel KommunikationBeispiel Kommunikation

#define __NOTETIME 10#define __WAITTIME 12

task communication() { ClearMessage(); SendMessage(5); // Warte auf Antwort until (Message() != 0); // ID empfangen if (Message() == 5) { // ID korrekt SendMessage(10); PlayTone(330,4*__NOTETIME); Wait(4*__WAITTIME); } else { // Falscher Partner OnRev(OUT_A+OUT_C); } } ClearMessage(); }task main() { start communication;}

Page 23: Programmierung der Lego Mindstorms Roboter · Kommunikation PC -> Lego Mindstorms Anschluß an COM-Port (1) Übertragung der Firmware (2) Übertragung eigener ... Direkte Steuerung

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

ProgrammumschaltungProgrammumschaltung

5 Programmspeicher

Befehl BeschreibungSelectProgram(Nr) wechselt Programm und

startet es (Nr: 0-4)x = Program(); liest aktuelle Programmnr.

aus

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

Weitere BefehleWeitere Befehle

❑ Musik

❑ Zähler

❑ Timer

❑ Display

❑ Datalog

❑ Random

❑ usw, usw., usw.

Page 24: Programmierung der Lego Mindstorms Roboter · Kommunikation PC -> Lego Mindstorms Anschluß an COM-Port (1) Übertragung der Firmware (2) Übertragung eigener ... Direkte Steuerung

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

Letztes Beispiel: SemaphorenLetztes Beispiel: Semaphoren

int sem;task main() {

sem = 0; start move;SetSensor(SENSOR_1, SENSOR_TOUCH);while (true) {

if (SENSOR_1 == 1) {until (sem == 0); sem = 1;OnRev(OUT_A); Wait(85);sem = 0; } }

}task move() {

while (true) {until (sem == 0); sem = 1;OnFwd(OUT_A);sem = 0; Wait(200);

}}

Universität Karlsruhe (TH), Institut für Prozeßrechentechnik, Automation und Robotik

Viel Erfolg !!!!!!!


Recommended