Programmierung der Lego Mindstorms Roboter



Ähnliche Dokumente
Programmierung des Lego NXT in C. Hochschule Mannheim Fakultät für Informatik

Lejos LEGO-Mindstorms-Roboter in Java programmieren

Programmierung mit NQC: Kommunikation zwischen zwei RCX

Beim ROBORACE werden jedes Jahr Schüler und Studierende mit einer neuen Aufgabe aus dem Bereich der Technischen Kybernetik herausgefordert.

Lego Mindstorms Tutorial

Praktikum. Thomas Röfer. Lego Mindstorms Bauen mit Lego RCX Motoren und Sensoren Programmiersprachen Einschränkungen der Lego-Firmware Not Quite C

LEGO MINDSTORMS NXT Programming

System Design Projekt Einführung in NXC

schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv

Lego Roboter mit NXT-G programmieren. Hochschule Mannheim

Einführung in die Programmierung des NXT mit C

IVE-W530BT. Bluetooth Software Update Manual mit Android Telefonen

Tutorium Rechnerorganisation

Programmierung in C. Grundlagen. Stefan Kallerhoff

Programmieren von Lego Robotern mit NQC

C/C++ Programmierung

Einführung in die Programmierung

Übersicht Programmablaufsteuerung

Programmieren von LegoMindstorms-Robotern mit NQC

Roboter programmieren mit NXC für LEGO MINDSTORMS NXT

Erwin Grüner

Installation und Inbetriebnahme von Microsoft Visual C Express

Inhaltsverzeichnis. Vorwort NXTundNXC DerNXT NXC Not exactly C Compiler Zusammenfassung 17

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

WINDOWS 7 (32 o 64 bit)

Basisanforderungen: EVA-Prinzips. Erweiterte Anforderungen: wirtschaftlichen und privaten Alltag.

Vorkurs C++ Programmierung

TREIBER INSTALLATIONSPROZESS WINDOWS 7 (32 oder 64 BIT)

Anleitung für die Firmware-Aktualisierung

SCHNELLEINSTIEG ZUM TOOL NODEBUILDER

Übungen Programmieren 1 Felix Rohrer. Übungen

Modellierung und Programmierung 1

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet

Die Programmiersprache C99: Zusammenfassung

Einführung in die C-Programmierung

5. Tutorium zu Programmieren

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Propädeutikum. Dipl.-Inf. Frank Güttler

Programmieren Sie einen mobilen Roboter des Typs Lego Mindstorm, so daß dieser einen bedingten Reflex erlernen kann.

Lösungsvorschlag zum Übungsblatt 1 zur Vorlesung Informatik II / WS2001/02

1 Was ist das Mediencenter?

2. Programmierung in C

Kontrollstrukturen, Strukturierte Programmierung

Klausur in Programmieren

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen

Fuel. für X-Plane 10.25

Graphic Coding. Klausur. 9. Februar Kurs A

Visual Basic Express erstes Projekt anlegen

Inhalt: 1. Einleitung 2. Installation 3. Bedienung 4. Hinweise

E-PRIME TUTORIUM Die Programmiersprache BASIC

Visual Basic Basisbefehle Hinweis: Der Text in eckigen Klammern [ ] ist variabel, z.b. [var] => 5.3. Eckige Klammern sind stets wegzulassen!

Funktionsdaten Editor Kurzanleitung

Lua Grundlagen Einführung in die Lua Programmiersprache

Inhaltsverzeichnis. Grundbegriffe der C-Programmierung Für den HI-TECH C-Compiler

DIGITALVARIO. Anleitung Bootloader. Ausgabe 0.1 deutsch für Direkt-Digital-Vario. Firmware ab Hardware 01 Seriennummer ab 0003

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2014/2015 Wirtschaftsingenieur Bachelor 4. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Projektverwaltung Problem Lösung: Modulare Programmierung

Allgemeine-Update-Anleitung

"Memory Stick" zur Programmierung der comfort 8+ Lichtsteuranlage mit PC Software "scenes editor"

1 Installation QTrans V2.0 unter Windows NT4

IVE-W530BT. Bluetooth Software Update Manual mit Windows

Bedienungsanleitung PC-Konfigurationssoftware des ID Inclinometers

Delegatesund Ereignisse

Samsung Large Format Display

Betriebsanleitung. Mikroprozessorgesteuerter Batterie-Kapazitätstester CAPTEST 1225 und 2425 Für 12V (0,3 A 25 A) oder 24V (0,3 A 25 A)

Sin-Funktion vgl. Cos-Funktion

Anleitung zur Software-Installation. ENDEAVOUR 1001 Version Deutsch

Grundlagen der Programmierung Prof. H. Mössenböck. 3. Verzweigungen

Warum? Keine umständliche Telefonbuch-Synchronisierung, alle Kontakte sind gleich zur Hand.

LanTEK II Firmware Upgrade - Anleitung

FB Informatik. Fehler. Testplan

Wirtschaftsinformatik I

ABB i-bus KNX. Software-Information. Melde- und Bedientableau. Typ: MT 701.2

Bedienungsanleitung Version 1.0

Einführung in die Programmierung

Information zur Durchführung von. Software-Updates

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Um die Installation zu starten, klicken Sie auf den Downloadlink in Ihrer (Zugangsdaten für Ihre Bestellung vom...)

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Programmierung von ATMEL AVR Mikroprozessoren am Beispiel des ATtiny13. Teil IV: Programmieren an Beispielen

Dr. Monika Meiler. Inhalt

Softwareupdate-Anleitung // AC Porty L Netzteileinschub

Einführung in die C++ Programmierung für Ingenieure

Überblick: Programmierung der USB-Boards. Erstmalige Inbetriebnahme. Programmiervorgang:

LEGO-Mindstorms-Roboter im Informatikunterricht 1 - mit Java-

Bedienungsanleitung TIME IT. a Look Solutions 1 product

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Was unterscheidet Microcontroller von einem PC ( Laptop ) oder einem Handy

Informatik 1 Tutorial

Softwareupdate für einzelne oder alle Teile der Maschinensoftware (bei normaler Betriebsbereitschaft der Bedieneinheit)

Anleitung Grundsetup C3 Mail & SMS Gateway V

Technische Dokumentation SilentStatistikTool

2A Basistechniken: Weitere Aufgaben

Seite 1/6. ModellFerienPass.pdf).

Visual Basic Express Debugging

Informationstechnisches Projekt 2012

Bootapplikation ohne CODESYS laden

Transkript:

Programmierung der Lego Mindstorms Roboter Dipl.-Inform. O. Taminé Gliederung Infrastruktur Aufbau, Vorbereitungen, WWW-Links NQC-Programmierung Vorbereitungen, Kommandozeilen-Programmierung, IDE-Oberflächen NQC-Sprachreferenz Beschreibung der NQC-Sprache

Teil I: Infrastruktur RCX-Baustein Hitachi H8-Prozessor 8 Bit, 16 Mhz 32 Kbyte RAM 16 Kbyte ROM je drei Ein-/Ausgänge Infrarot-Schnittstelle 5 Programmspeicher

Speicheraufbau 5x1,2 KByte RAM Programmspeicherplätze 32 Kbyte statisches RAM 16 Kbyte ROM 1 2 3 4 5 Firmware BIOS RCX-Display Batterieanzeige Kommunikation Aktiver Sensoranzeige Zeitanzeige Boot-Modus Ausgang View On/Off 1 2 3 ^ 00.00 ^ ^ 1 A B C Prgm Run

Infrarotsender Kommunikation PC -> Lego Mindstorms Anschluß an COM-Port (1) Übertragung der Firmware (2) Übertragung eigener Programme Stromversorgung 9 Volt (6x1,5 V Mignon Batterien) 1,5 V Alkaline NiCd Entladung

RCX-Code Lego-Programmiersprache WWW-Links Software, Dokumentationen, Büchertipps, WWW-Seiten, Teilnehmerlisten,... auf der Praktikumshomepage: http://i61www.ira.uka.de/users/tamine/lego/

Teil II: NQC-Programmierung Vorbereitung (Teil 1) Auf Lego-CD: System\spirit.ocx Firm\firm0309.lgo Download der RCX 2.0 Firmware: firm0328.lgo (Praktikumshomepage)

Software installieren (Teil 2) Installieren von Bricx Command Center: bricxcc.exe, Aktuelle Version: 3.3 Win 95/98/ME/2000/XP Download von Homepage Alternativ: Installieren von NQC: nqc-win-2-3-r1.zip, Aktuelle Version: 2.3 Download von Homepage Version 2.4 im Beta-Stadium Firmware übertragen (Teil 3) 1. Möglichkeit Bricx Command Center: Menü Tools/Download Firmware Datei firm0328.lgo auswählen 2. Möglichkeit: nqc -firmware pfad\firm0328.lgo oder: nqc -firmfast pfad\firm0328.lgo

Programmierumgebung I (1) NQC-Programm in Editor schreiben (2) DOS-Shell: Kompilieren + Übertragen an RCX Programmierumgebung II

Starten vom Bricx Command Center Suche nach eingeschaltetem Lego Mindstorms Roboter Falls Roboter nicht gefunden wird, sind nicht alle Funktionen verfügbar. Tool: Direct Control Direkte Steuerung der RCX-Komponenten: Sensoren: Typ + Modus der 3 Sensoren Motoren: Vorwärts, Rückwärts, Bremsen, Leerlauf Variablen: Wertzuweisung Tasks: Starten + Anhalten der 10 Tasks

Tool: Diagnostics Anzeige von: Status Firmware-Version Batteriestatus Anschlußport Aktueller Programmnr. Auschaltzeit Infrarotstärke Einschaltzeit Display-Anzeige Tool: Watching the RCX Beobachten folgender RCX-Werte: Variablen Sensoren Motoren Timer Infrarot Zähler

Weitere Tools Send Message RCX-Piano Joystick Teil III: NQC-Sprachreferenz

NQC Sprachkonstrukte NQC = Not quite C Lexikalische Strukturen Programmstrukturen Kontrollstrukturen RCX API Beispiele Lexikalische Strukturen Kommentare // Einzeiliger Kommentar /* Dieser Kommentar belegt mehrere Zeilen */ Leerzeichen nicht notwendig, aber hilfreich x=2; x = 2; Numerische Konstanten x = 10; // setzt x auf den Dezimalwert 10 x = 0x10; // setzt x auf den Dezimalwert 16 Präprozessorbefehle wie in C

Der Präprozessor Einbinden von Programmteilen #include part2.nqc Substitution von Werten #define SCHWARZ 800 Speicherreservierung #pragma reserve 0 1 2 notwendig bei Timern und Zählern Programmstrukturen 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 }

Programmstrukturen 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 } Programmstrukturen 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); }

Variablen 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; // modulo x = 31 1; // Or Globale und lokale Variablen unterstützt max. 32 globale Variablen max. 16 lokale Variablen Beispiel: int x = 0; // bin global task main() { int y; // bin lokal y = x; // ok } task move() { x = 5; // ok y = x; // nicht ok, y hier unbekannt }

Kontrollstrukturen 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); Motorsteuerung Konstanten: OUT_A, OUT_B, OUT_C Befehl Beschreibung On (const) schaltet Motor ein Off(const) schaltet Motor aus Float(const) schaltet auf Leerlauf Fwd(const) vorwärts Rev(const) rückwärts Toggle(const) wechselt Richtung OnFwd(const) ein + vorwärts OnRev(const) ein + rückwärts OnFor(const, time) vorwärts für time/100 sec SetPower(const, x) Geschwindigkeit (0-7)

Sensorik Berührungssensor Lichtsensor Ausgänge: SENSOR_1, SENSOR_2, SENSOR_3 Sensoren: SENSOR_TOUCH, SENSOR_LIGHT SetSensor(Ausgang, Sensor) setzt einen Ausgang auf einen bestimmten Sensortyp Der Sensor wird dabei in seinem Standardmodus betrieben Berü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); }

Sensor-Modi Const: SENSOR_TYPE_TOUCH, SENSOR_TYPE_LIGHT Befehl SetSensorType(Ausgang, const) SetSensorMode(Ausgang, mod) Beschreibung legt Sensortyp fest legt Sensormodus fest Modus Beschreibung SENSOR_MODE_RAW 0 bis 1023 SENSOR_MODE_BOOL 0 bis 1 SENSOR_MODE_EDGE zählt Zustandswechsel SENSOR_MODE_PULSE zählt Zustandsperioden SENSOR_MODE_PERCENT 0 bis 100 Prozent Funktionsweise eines Sensors SENSOR_MODE_RAW 1023 0 SENSOR_MODE_PERCENT: Transformation des Raw-Wertes in den Wertebereich 0-100 t

Boolescher Modus SENSOR_MODE_BOOL 1023 True False 0 t Zustandswechsel SENSOR_MODE_EDGE 1023 1 3 2 4 0 t

Periodenwechsel SENSOR_MODE_PULSE 1023 1 2 0 t RCX Events Befehl Beschreibung SetEvent(Nr, source, type) legt Sensorfest fest monitor(event_mask(nr)) überwacht Event Typ EVENT_TYPE_PRESSED EVENT_TYPE_RELEASED EVENT_TYPE_PULSE EVENT_TYPE_EDGE EVENT_TYPE_LOW EVENT_TYPE_NORMAL EVENT_TYPE_HIGH EVENT_TYPE_MESSAGE EVENT_TYPE_FASTCHANGE Beschreibung Gedrückt Nicht gedrückt Periodenwechsel Zustandswechsel Wechsel in Niedrigbereich Wechsel in Normalbereich Wechsel in Hochbereich IR-Nachricht empfangen Schneller Wertwechsel

Event Modus 1023 Hoch Normal 0 Niedrig Beispiel: 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 } }

Kommunikation Befehle: 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 Beispiel 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;}

Programmumschaltung 5 Programmspeicher Befehl SelectProgram(Nr) x = Program(); Beschreibung wechselt Programm und startet es (Nr: 0-4) liest aktuelle Programmnr. aus Weitere Befehle Musik Zähler Timer Display Datalog Random usw, usw., usw.

Letztes 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); }} Viel Erfolg!!!!!!!