Motoren - Hochschule Mannheim

Werbung
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
Herunterladen