Fakultät für Informatik, Institut für Robotik Laborpraktikum I Legorobotik in JAVA – EV3 Ute Ihme Hochschule Mannheim | Ute Ihme DAS LEGO® MINDSTORMS® System Die Bausysteme source: Lego via Cnet 1999: RCX Hochschule Mannheim | Ute Ihme 2007: NXT 2013: EV3 März 2013 2 DAS LEGO® MINDSTORMS® System Das EV3 System Prinzip von LEGO® MINDSTORMS® Roboter wird gebaut mit programmierbarem LEGO® Stein bis zu 4 Motoren oder Lampen bis zu 4 Sensoren LEGO® TECHNIC Teile Erstellung eines Steuerprogramms am Computer Übertragen des Programms auf den Roboter Testen des Programms Hochschule Mannheim | Ute Ihme März 2013 3 DAS SPIELFELD EXPLORE MARS Allgemeiner Aufbau Mannheim University of Applied Sciences | Ute Ihme March 4, 2013 7 Start der Entwicklungsumgebung Starten von Eclipse 1. Starten der 32-bit Version von Eclipse (Eclipse Luna) 2. Auswahl des Arbeitsbereiches Standardeinstellungen übernehmen auf OK-Button drücken Hochschule Mannheim| Ute Ihme März 2013 8 Start der Entwicklungsumgebung Starten von Eclipse 3. Programmierumgebung Eclipse wird gestartet Navigationsleiste Dateinavigator Feld für Programmentwicklung Informationsfeld Mannheim University of Applied Sciences | Ute Ihme March 4,. 2013 9 Start der Entwicklungsumgebung Starten von Eclipse 3. Programmierung vorbereiten Datei wählen Mannheim University of Applied Sciences | Ute Ihme March 4,. 2013 10 Start der Entwicklungsumgebung Starten von Eclipse 3. Programmierung vorbereiten - Neu und - Projekt… auswählen Mannheim University of Applied Sciences | Ute Ihme - LeJOS EV3 Projekt wählen - auf Weiter> drücken March 4,. 2013 11 Start der Entwicklungsumgebung Starten von Eclipse 3. Programmierung vorbereiten Projektname eingeben Fertigstellen drücken Mannheim University of Applied Sciences | Ute Ihme March 4,. 2013 12 JAVA Code JAVA Basics I Jedes JAVA Programm besteht aus Klassen. public class Berechnung { // hier wird der Programmcode eingefügt } Eine der Klassen muss eine main Methode besitzen. public class Berechnung { public static void main(String[] args) { // hier wird der Programmcode eingefügt } } Mannheim University of Applied Sciences | Ute Ihme March 4,. 2013 13 Start der Entwicklungsumgebung Starten von Eclipse 3. Programmierung vorbereiten - Datei - neu - Klasse wählen Mannheim University of Applied Sciences | Ute Ihme March 4,. 2013 14 Start der Entwicklungsumgebung Starten von Eclipse 3. Programmierung vorbereiten 1. Klassennamen eingeben 2. Hier zusätzlich public static void main ankreuzen, wenn Klasse main Methode enthalten soll. 3. Fertigstellen drücken Mannheim University of Applied Sciences | Ute Ihme March 4,. 2013 15 Start der Entwicklungsumgebung Starten von Eclipse 3. Programmierung vorbereiten Nun kann das Programmieren beginnen! Mannheim University of Applied Sciences | Ute Ihme March 4,. 2013 16 JAVA Code Realisierung eines Pausenbefehls 1. Warten darauf, dass ein Knopf des NXT Steins gedrückt wird Button.waitForAnyPress(); 2. Nutzung eines leJos Pausen - Befehls Delay.msDelay(2000); Hochschule Mannheim| Ute Ihme März 2013 17 JAVA Code Displayanzeige Syntax: 1. Nutzung des Standard JAVA Befehls System.out.println("Hello World!") 2. Nutzung des lejos Befehls a) für Strings LCD.drawString(“string", Zeile, Spalte)) LCD.drawString("Hello World 1", 0, 2); b) Für Zahlen LCD.drawInt(Zahl, Spalte, Zeile); LCD.drawInt(7, 0, 4); 3. Löschen des Displays LCD.clearDisplay(); Hochschule Mannheim| Ute Ihme März 2013 18 JAVA Code Das erste Programm: Bildschirmanzeige / Hello World // Importieren von LejosBibliotheken import lejos.hardware.Button; import lejos.hardware.lcd.LCD; import lejos.utility.Delay; public class HelloWorld { public static void main(String[] args) { // TODO Automatisch generierter Methodenstub // Nutzung der JAVA Syntax für die Ausgabe eines Strings System.out.println("Hello World!"); Button.waitForAnyPress(); // Bildschirmlöschen LCD.clear(); Hochschule Mannheim| Ute Ihme März 2013 19 JAVA Code Das erste Programm: Bildschirmanzeige / Hello World // Ausgabe eines Strings mit dem LejosBefehl LCD.drawString("Hello", 0, 2); // Warten für 2000ms Delay.msDelay(2000); // Ausgabe einer Zahl mit dem LejosBefehl LCD.drawInt(7, 0, 4); Delay.msDelay(2000); } } Hochschule Mannheim| Ute Ihme März 2013 20 JAVA Code Das erste Programm: Bildschirmanzeige / Hello World Datei speichern bzw. alle Dateien speichern drücken Hochschule Mannheim| Ute Ihme März 2013 21 JAVA Code Das erste Programm: Bildschirmanzeige / Hello World 1. 2. 3. • Ausführen als LeJOS EV3 Programm wählen, zuvor NXT Stein einschalten Hochschule Mannheim| Ute Ihme März 2013 22 DAS SPIELFELD EXPLORE MARS Mission 0: Displayanzeige Erstellen Sie ein erstes Programm, dass Ausgaben auf dem Display des EV3 realisiert. • Programmieren Sie dazu zunächst, dass Beispiel der vorherigen Folien selbstständig nach! • Realisieren Sie danach eigene Ausgaben! Hochschule Mannheim| Ute Ihme März 2013 23 DAS LEGO® MINDSTORMS® System Motoren Servomotor Verfügt über integrierten Rotationssensor misst Geschwindigkeit und Abstand Leitet Ergebnisse an NXT Stein weiter Motor kann auf einen Grad genau gesteuert werden Quelle: Lego Kombinationen mehrerer Motoren möglich arbeiten ggf. mit gleicher Geschwindigkeit Hochschule Mannheim| Ute Ihme März 2013 24 JAVA Code Die Klasse Motor – Allgemeine Befehle Verwendung folgender import - Funktionen import lejos.hardware.motor.Motor; Wichtige Methoden der Klasse Motor Vorwärtsfahren: Motor.A.forward(); Rückwärtsfahren: Motor.A.backward(); Verwendung der Portbezeichnung (A, B, C oder D), An den der Sensor angeschlossen Ist bzw. wird. Anhalten: Motor.A.stop(); Hochschule Mannheim| Ute Ihme März 2013 25 JAVA Code Motorensteuerung für 2 Motoren - zeitgesteuert Syntax: Vorwärtsfahren: Motor.A.forward(); Motor.B.forward(); Kurve Motor.A.forward(); Motor.B.backward(); Rückwärtsfahren: Motor.A.forward(); Motor.B.forward(); oder Motor.A.backward(); Motor.B.forward(); Anhalten: Motor.A.stop(); Motor.B.stop(); Mannheim University of Applied Sciences | Ute Ihme March 4,. 2013 26 JAVA Code Motorensteuerung import lejos.hardware.motor.Motor; import lejos.utility.Delay; - zeitgesteuert Programmbeispiel: public class Motoren { public static void main(String[] args) { // Vorwärtsfahren Motor.A.forward(); Motor.B.forward(); // Zeit in ms Delay.msDelay(2000); Motor.A.stop(); Motor.B.stop(); } } Mannheim University of Applied Sciences | Ute Ihme March 4,. 2013 27 JAVA Code Motorensteuerung - zeitgesteuert Programmelemente: // Rückwärtsfahren Motor.A.backward(); Motor.B.backward(); // Zeit in ms Delay.msDelay(2000); Motor.A.stop(); Motor.B.stop(); Mannheim University of Applied Sciences | Ute Ihme // Kurve mit einem Motor Motor.A.forward(); // Zeit in ms Delay.msDelay(2000); Motor.A.stop(); //Kurve mit 2 Motoren Motor.A.forward(); Motor.B.backward(); // Zeit in ms Delay.msDelay(2000); Motor.A.stop(); Motor.B.stop(); March März 4,. 2013 28 DAS SPIELFELD EXPLORE MARS Mission 1 Schieben der Trägerrakete in Startposition Start und Ende: Base 1 Die Langstreckenrakete soll von der Ausgangsstellung zur Startrampe geschoben werden. Mannheim University of Applied Sciences | Ute Ihme March 4,. 2013 32 JAVA Code Arbeiten mit Sensoren Verwendung folgender import - Funktionen import lejos.hardware.port.SensorPort; import lejos.hardware.sensor.*; import lejos.robotics.*; Hinweis: Die Initialisierung der Sensoren und die Abfrage der Messwerte erfolgt bei allen Sensoren nach dem gleichen Prinzip. Wichtig ist, dass stets der Port (S1, S2, S3 bzw. S4) in der Initialisierung verwendet wird, an dem der Sensor tatsächlich angeschlossen ist. Mannheim University of Applied Sciences | Ute Ihme March 4,. 2013 34 DAS LEGO® MINDSTORMS® System Berührungssensor / Tastsensor • Abfrage, ob Sensor gedrückt • Werte des Sensors • 0: Sensor nicht gedrückt • 1: Sensor gedrückt Hochschule Mannheim| Ute Ihme März 2013 35 JAVA Code Berührungssensor / Tastsensor Initialisierung: SensorModes sensor1 = new EV3TouchSensor(SensorPort.S1); SampleProvider touch = sensor1.getMode("Touch"); Abfrage der Messwerte: Jeweiligen Anschlußport angeben (S1, S2, S3 oder S4) // Initialisierung der Messwerte float pressed =0; float sample[] = new float[touch.sampleSize()]; // Abfrage der Sensorwerte touch.fetchSample(sample, 0); pressed = sample[0]; Mannheim University of Applied Sciences | Ute Ihme March 4,. 2013 36 JAVA Code Berührungssensor / Tastsensor Programmbeispiel: import import import import lejos.hardware.motor.Motor; lejos.hardware.port.SensorPort; lejos.hardware.sensor.*; lejos.robotics.*; public class Tastsensor { public static void main(String[] args) { // TODO Automatisch generierter Methodenstub - Programmcode nächste Folien } } Mannheim University of Applied Sciences | Ute Ihme March März 4,. 2013 37 JAVA Code Berührungssensor / Tastsensor Programmcode für public static void main: // Initialisierung des Sensors SensorModes sensor1 = new EV3TouchSensor(SensorPort.S1); SampleProvider touch = sensor1.getMode("Touch"); // Initialisierung der Messwerte float pressed =0; float sample[] = new float[touch.sampleSize()]; Mannheim University of Applied Sciences | Ute Ihme March 4,. 2013 38 JAVA Code Berührungssensor / Tastsensor Programmcode für public static void main: // Einschalten der Motoren Motor.A.forward(); Motor.B.forward(); // Abfrage der Sensorwerte bis Sensor gedrückt wird while(pressed ==0){ touch.fetchSample(sample, 0); pressed = sample[0]; } // Ausschalten der Motoren Motor.A.stop(); Motor.B.stop(); Mannheim University of Applied Sciences | Ute Ihme March 4,. 2013 39 DAS SPIELFELD EXPLORE MARS Mission 3: Einschalten des Kontrollzentrums Start und Ende: Base 2 Der blaue Knopf am Kontrollzentrum soll betätigt werden. Der Roboter soll mit Hilfe eines Berührungssensors feststellen, wenn der blaue Knopf gedrückt ist. Wird der Berührungssensor ausgelöst, so soll der Roboter anhalten und für 3 s eine Aufschrift auf dem Display anzeigen. Erst danach soll der Roboter zurück zur Base 2 fahren. Mannheim University of Applied Sciences | Ute Ihme March 4,. 2013 40