Programmierung der Lego Mindstorms NXT- Roboter mit lejos!

Ähnliche Dokumente
Fakultät für Informatik, Institut für Robotik Lego Mindstorms NXT - Programmierung mit JAVA Einführung

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Institut für Programmierung und Reaktive Systeme. Java 1. Markus Reschke

Fakultät für Informatik, Institut für Robotik Laborpraktikum I Legorobotik in JAVA

Vorkurs Informatik WiSe 17/18

Vorkurs Informatik WiSe 16/17

Objektorientierte Programmierung Studiengang Medieninformatik

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Computeranwendung und Programmierung (CuP)

Repetitorium Informatik (Java)

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

2 Programmieren in Java I noch ohne Nachbearbeitung

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache. Variablen. Operationen Zuweisung. Variablen

Einführung in die Programmierung 1

Vorlesung Informatik II

Implementieren von Klassen

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Institut für Programmierung und Reaktive Systeme 2. Februar Programmieren I. Übungsklausur

Programmieren in Java

Objektorientierung. Marc Satkowski 20. November C# Kurs

Inhaltsverzeichnis. Grundlagen und Einführung (1. Band) 1

Tag 8 Repetitorium Informatik (Java)

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

2 Eine einfache Programmiersprache

Martin Unold INFORMATIK. Geoinformatik und Vermessung

2 Eine einfache Programmiersprache

Algorithmen und Datenstrukturen

II.1.1. Erste Schritte - 1 -

Vorkurs Informatik WiSe 16/17

2 Eine einfache Programmiersprache

II.1.1. Erste Schritte - 1 -

Probeklausur Java Einführung in die Informatik. Wintersemester 2016/2017

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Probeklausur: Programmierung WS04/05

7. Übung Informatik II - Objektorientierte Programmierung

AuD-Tafelübung T-B5b

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Aufgabe 1.90: Ein Geschäft gibt ihren Kunden unterschiedliche Rabatte. Schreiben ein Programm, das folgende Rabattklassen vorsieht:

Silke Trißl Wissensmanagement in der Bioinformatik. Objektorientierte Programmierung (OOP) Vorstellung wie in der realen Welt: Farbe Hubraum Tank...

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Lego Mindstorms RCX / NXT mit Java - Installation und erste Schritte -

Vorkurs Informatik WiSe 15/16

Programmieren in Java -Eingangstest-

Tag 7 Repetitorium Informatik (Java)

Fragenkatalog ESOP WS 16/17

II.1.1. Erste Schritte - 1 -

Institut für Programmierung und Reaktive Systeme 25. Januar Programmieren I. Übungsklausur

Fakultät IV Elektrotechnik/Informatik

Vorkurs Informatik WiSe 17/18

Kapitel 4: Klassen und Unterklassen

Methoden und Klassen. Silke Trißl Wissensmanagement in der Bioinformatik

Vorlesung Programmieren

Einführung in die Programmierung mit Java

Algorithmen und Datenstrukturen II

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

BREMEN MITTE. Lokalisierung eines Roboters innerhalb eines Raumes. ZfP-Sonderpreis der DGZfP beim Regionalwettbewerb Jugend forscht.

Programmieren I. Dokumentation mit javadoc Heusch 10.4 Ratz Institut für Angewandte Informatik

Programmieren in Java

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Praktische Informatik 1

Beschreibung des Angebotes. Java Programmierung. LernenimInternet. Ansprechpartner. Angebot-Nr Angebot-Nr Weiterbildung.

Javakurs für Anfänger

Probeklausur Java Einführung in die Informatik. Wintersemester 2017/2018

Informatik. Studiengang Chemische Technologie. Michael Roth Hochschule Darmstadt -Fachbereich Informatik- WS 2012/2013.

Java Einführung Methoden. Kapitel 6

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

Anweisungen zur Ablaufsteuerung

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Ein Vortrag im Rahmen des Wahlpflichtmoduls Fortgeschrittene Programmierung mit JAVA

7. Einführung in C++ Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Einführung in Java. Ausgewählte Quellen zu Java

Einführung in die Programmierung

Erste Java-Programme (Scopes und Rekursion)

Java Übung. Übung Mai Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung. Werner Gaulke.

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Klassenvariablen, Klassenmethoden

7. Objektorientierung. Informatik II für Verkehrsingenieure

Programmierkurs Java

Computeranwendung und Programmierung (CuP)

Arbeitsblatt zu Methoden

Programmierkonventionen - 1 -

Programmieren in Java

Programmierkurs C++ Abstrakte Klassen und Methoden

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Vorkurs Informatik WiSe 16/17

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

Objektorientiertes Programmieren (Java)

Überschreiben von Methoden

Programmieren in Java

Java Zusammenfassung. Basisdatentypen ganzzahlig: Byte, Short, Integer, Long Fließkomma: Float, Double Zeichen: Character Wahrheitswerte: Boolean

Transkript:

Programmierung der Lego Mindstorms NXT- Roboter mit lejos! INSTITUT FÜR ANTHROPOMATIKLEHRSTUHL PROF. DR.-ING. R. DILLMANN Julian Schill Boris Stach schill@kit.edu boris.stach@student.kit.edu KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu

Übersicht 1 Infrastruktur NXT-Hardware lejos 2 Entwicklungsumgebung Vorbereitungen und IDE 3 Java an sich Java Kurzeinführung 4 lejos API Ein Java Programm Boris Stach 2/37

Weitere Infos Software, Dokumentationen, Büchertipps, Links,... auf der Praktikumshomepage: http://wwwiaim.ira.uka.de/legowiki Boris Stach 3/37

NXT-Baustein und Peripherie Boris Stach 4/37

Leistung 32-Bit ARM7 Mikroprozessor 256Kb FLASH, 64 Kb RAM 100x64 Pixel Dot Matrix LCD 4 Ein- und 3 Ausgänge (I 2 C) Kommunikation PC mit Lego Mindstorms NXT Anschluß über USB-Schnittstelle oder Bluetooth(BT) (drahtlos): Übertragung der lejos Firmware Übertragung eigener Java-Programme BT: Datenaustausch mit PC oder anderen Robotern Stromversorgung Li-Ion-Akku, mit Ladegerät Alternativ: Standard-Akkus (AAA) Boris Stach 5/37

Menü Programme auswählen, ausführen, löschen Konfigurieren:Töne, Bluetooth Ein/Aus... Boris Stach 6/37

Java und lejos lejos Merkmale seit 2006 für Lego NXT Java Compiler ist standard-konform Normales Java-Tutorial genügt zum Erlernen Enthält Erweiterungen zum Ansteuern des Roboters Gute Dokumentation Boris Stach 7/37

Installation der Entwicklungsumgebung Java Standard Edition JSE von Oracle downloaden & installieren. Lego USB Treiber downloaden & installieren lejos downloaden & installieren libusb downloaden & installieren lejos mit neuer Firmware flashen, wenn Version zu alt! Eclipse IDE downloaden & installieren Weitere Details in Wiki Boris Stach 8/37

Programmierumgebung I Eclipse für Java Boris Stach 9/37

Eclipse: Open Source Entwicklungsumgebung (IDE) für verschiedene Programmiersprachen Programmerstellung, Ablauf: Java Quelltext schreiben (Text!) Compilieren erzeugt Bytecode für Zielhardware (hier: lejos) ggf. Syntaxfehler korrigieren, dann Schritt wiederholen Downloaden auf Zielhardware lejos/nxt Programm starten und testen Boris Stach 10/37

Java an sich Klassen und Objekte Attribute und Methoden Kontrollstrukturen Beispiele Boris Stach 11/37

Aufbau einer Java-Klasse Wichtig! Java-Dateien: <klassenname>.java Dateiname = Klassenname! Grundsätzliches zur Syntax Kommentar: Block: /* */ Zeile: // Anweisungsblock zwischen Hinter jede Anweisung gehört ein Semikolon ; Leerzeichen beliebig erlaubt Boris Stach 12/37

public class Box // Attribute ( Objekte oder Variablen einer Klasse ) private float len ; private float width ; // Methoden ( Funktionen einer Klasse ) public void set_size ( float l, float w ) len = l ; width = w ; public float calculatearea () float A = len * width ; return A ; public class Example public static void main ( String [] args ) Box mybox = new Box (); mxbox. set_size (3,4); System.out. println ( "Area : " + box. calculatearea () ); Boris Stach 13/37

Variablen und Basis-Datentypen Variablen sind Speicherschubladen Berechnen, Auswerten und Manipulieren von Ausdrücken Jeweils verschiedene Operationen möglich: +,-,/,*,... Verschiedene Datentypen Boris Stach 14/37

Methoden Methoden sind Sammlungen von Anweisungen Modularisierung des Programmes Ein oder mehr Übergabe-Parameter public void set_size ( float l, float w ) Genau ein Rückgabe-Wert - Rückgabe mit return-befehl public float calculatearea () float A = len * width ; return A ; Methoden sind immer Teil einer Klasse! Boris Stach 15/37

Objektorientierte Programmierung Java ist eine objektorientierte Programmiersprache. Klassen - Beschreibung von gleichartigen realen oder abstrakten Objekte - Schablone für solche Objekte Objekte - Instanz einer Klasse. - Nur aus einer Klassenbeschreibung erzeugt (instanziiert) Box mybox = new Box (); Box mybox2 = new Box (); Boris Stach 16/37

Verwendung von Klassen Instantiierung von Objekten Objekt der Box-Klasse wird mit new instanziiert. Zugriff auf public-attribute und Methoden durch: <Objektname>.<Member-Name> public class Example public static void main ( String [] args ) Box mybox = new Box (); mxbox. set_size (3,4); System.out. println ( "Area : " + box. calculatearea () ); Boris Stach 17/37

Sichtbarkeit Sichtbarkeits-Spezifizierer für Klassen, Attribute und Methoden: public: für alle sichtbar (aufrufbar, zugreifbar) private: nur innerhalb der gleichen Klasse sichtbar protected: nur innerhalb der gleichen oder in einer Kinder-Klasse sichtbar Vorgabe/Standard: protected Sicheres Programmieren Vermeidung von Spaghetti-Code Boris Stach 18/37

Statische Attribute und Methoden Spezifizierer static vor Attribut oder Methode Alle Instanzen einer Klasse teilen sich das Attribut bzw. die Methode. Statische Methoden können ohne Instantiierung der Klasse aufgerufen werden Ein statisches Attribut wird von allen Instanzen einer Klasse gemeinsam benutzt Besonderheit: Ausführbare Java-Klasse muss statische main-methode besitzen, bsp.: public static void main ( String [] args ) System.out. println ( "I am the main method \n" ); Boris Stach 19/37

Vererbung von Klassen Beschreibung von Klassenhierarchien Modularisierung/ Wiederverwendbarkeit! Bsp.: Die Klasse Quadrat erbt alle Eigenschaften von Box Schlüsselwort: extends Die Methode set_size (... ) wird in quadrat überladen Zugriff auf len und width deshalb protected statt private public class Box // Attribute protected float len ; protected float width ; // Methoden public void set_size ( float l, float w ) len = l ; width = w ;.. public class Quadrat extends Box public void set_size ( float l ) len = l ; width = l ; Boris Stach 20/37

Kontrollstrukturen Verzweigung / Bedingte Ausführung if (condition)... else... Beispiel: public float limiter ( float a, float lower, float upper ) if ( a > upper ) a = upper ; else if ( a < lower ) a = lower ; return a ; Boris Stach 21/37

Kontrollstrukturen Schleifen For-Schleife (zum Zählen mit Variablen) for (startausdruck, Endausdruck, Schrittweite)... Beispiel: public static void main ( String [] args ) for ( int i = 0; i < 10; i ++) System.out. println ( " count \n" + i ); Boris Stach 22/37

Kontrollstrukturen Schleifen While-Schleife (Vergleich) while (Bedingung)... Bedingung wird zuerst geprüft! Do-While-Schleife do... while (Bedingung) Anweisungsblock wird mind. einmal ausgeführt! public static void main ( String [] args ) int i = 0; while ( i < 10) System.out. println ( " count \n" + i ); i = i + 1; public static void main ( String [] args ) int i = 0; do System.out. println ( " count \n" + i ); i = i + 1; while ( i < 10) Boris Stach 23/37

Zusammenfassung Klassen und Objekte Variablen und Attribute Methoden Sichtbarkeit Instanziierung Statische Attribute/Methoden Vererbung Bedingte Ausführung Schleifen Boris Stach 24/37

Weitere Infos zu Java, Auswahl Einfaches Java-Tutorial, englisch: http://www.freejavaguide.com/corejava.htm Java ist auch eine Insel: Umfangreiche Anleitung für Anfänger, deutsch, Online-Version: https://www-rz.uni-hohenheim.de/anw/programme/prg/ java/tutorials/javainsel4/index.htm Links auf unserer Praktikumshomepage: http://wwwiaim.ira.uka.de/legowiki Boris Stach 25/37

lejos API - Was ist eine API? Bisher: Java allgemein. Jetzt: Spezielle lejos Java-Erweiterungen für Lego-Roboter Application Programming Interface (API) Einbinden mit import lejos.nxt.*; Klassenbibliothek Sammlung von Klassen zur Programmierung, u.a.: - Ausgabe von Text auf LCD - Motorsteuerung - Sensordaten lesen - Kommunikation über Bluetooth Boris Stach 26/37

Textausgabe auf LCD Einfache, zeilenweise Textausgabe (Standard-Java): System.out.println(String text); Text positioniert ausgeben LCD.drawString(String text, int x, int y); Zeichenkette (String) zusammensetzen mit + Bsp.: public static void main ( String [] args ) float a = 0.8; for ( int i = 0; i < 10; i ++) System.out. println ( " count \n" + i + ': ' + (a*i) + "done. " ); Boris Stach 27/37

Tastenfeld Implementiert in Klasse Button Zugriff auf alle Tasten: - Button.LEFT - Button.RIGHT - Button.ENTER - Button.ESCAPE Wesentlich Methode boolean ispressed() Beispiel if ( Button. ENTER. ispressed ()) System.out. println ( " enter! " ); Boris Stach 28/37

Motorsteuerung Implementiert in Klasse Motor Drei Motoren an NXT-Ausgängen A,B,C: Motor.A, Motor.B, Motor.C Methoden forward() backward() stop() setspeed(int s) int gettachocount() rotateto(int a) Beschreibung schaltet Motor ein, vorwärts schaltet Motor ein, rückwärts schaltet Motor aus setzt Geschw., Grad/Sekunde Position (Winkel) abfragen auf Winkel rotieren Boris Stach 29/37

Berührungssensor Implementiert in Klasse TouchSensor Instantiierung mit: TouchSensor(sensorport) Wesentlich Methode boolean ispressed() Beispiel TouchSensor touch = new TouchSensor ( SensorPort.S2 ); if ( touch. ispressed ()) System.out. println ( " Sensor pressed! " ); Boris Stach 30/37

Lichtsensor Implementiert in Klasse LightSensor Instanziierung mit: LightSensor(sensorport) Methoden Beschreibung int readnormalizedvalue() lese Helligkeitswert (0..1023) int readvalue() lese Helligkeitswert (0..100) setfloodlight(boolean fl) schalte Licht ein/aus Boris Stach 31/37

Lichtsensor - Werte Boris Stach 32/37

Ultraschall Distanzsensor Implementiert in Klasse UltrasonicSensor Instantiierung mit: UltrasonicSensor(sensorport) Wesentliche Methode int getdistance() lese Entfernung zu Hindernis, 255 für undendlich. Boris Stach 33/37

Checkup Was macht diese Klasse? import lejos. nxt.*; public class Example public static void main ( String [] args ) TouchSensor touch = new TouchSensor ( SensorPort.S1 ); Motor m = Motor. A ; while (! Button. ESCAPE. ispressed ()) m. forward (); while (! touch. ispressed ()) m. backward (); while (! touch. ispressed ()) m. stop (); Boris Stach 34/37

Linienfolger Boris Stach 35/37

Weitere Klassen Kommunikation über Bluetooth Musik Timer und Threads Buttons Random usw, usw., usw. Boris Stach 36/37

Viel Erfolg! Boris Stach 37/37