Folie 1

Werbung
6. Schweizer Tag für den Informatikunterricht - STIU 2015
Workshop 2:
Programmieren lernen
mit dem neuen EV3 Roboter
Jarka Arnold, PH Bern
Aegidius Plüss, ehem. Univ. Bern
Pl
STIU 2015, ETH Zürich
Jarka Arnold, Aegidius Plüss, 23.1.2015
Programm
Vorbemerkungen
1. Teil:
EV3 bedienen
leJOS Menü kennenlernen
2. Teil:
The Big Picture
EV3 als Linux Computer
3. Teil:
Mit Python programmieren
EV3 in der TigerJython IDE
4. Teil:
Mit Java programmieren
Online-Editor, BlueJ, Netbeans, Eclipse, Java Editor
5. Teil:
Einige Demos aus unseren Online-Lehrmitteln
Lernende Roboter, Sensorik (Ultraschall)
6. Teil:
Individuelle Übungen
Installation, Linux, Python, Java, Online-Editor
Workshop-Unterlagen: www.legorobotik.ch/stiu2015
Pl
STIU 2015, ETH Zürich
Jarka Arnold, Aegidius Plüss, 23.1.2015
Unser Engagement:
•
Informatikkonzepte vermitteln
bereits ab 10.-12. Altersjahr, auch für Mädchen
•
•
•
•
•
Moderne (coole) Themen und Unterrichtsmittel einsetzen
•
•
•
Denken in Abläufen: Tue dies, dann das, dann das...
Denken in Zuständen: Automaten überall im täglichen Leben
Ereignissteuerung: Wann immer ein Ereignis eintritt, dann tue...
Lösungsstrategien:
Teile und Herrsche (prozedurales Denken)
Objekte überall
Contextualized Education: Schüler sind betroffen von
Multimedia, Online-Lernen, Internet, Robotik, Spiele, Apps
Universelle Programmiersprache:
keine abgemagerten Schulsprachen, text- und nicht ikonenbasiert
Python im Trend, Java im akademischen Bereich weit verbreitet
Frust bei Lehrpersonen vermeiden
• Installationen problemlos, auch in Computerpools, (Mac, Linux, Win)
Am besten: Copy, Click & Go (TigerJython)
• Anschaffungen, Wissen, Unterlagen weiterverwenden
Vom NXT zum EV3 (gleiche Programme, gleiche Sensoren)
Pl
STIU 2015, ETH Zürich
Jarka Arnold, Aegidius Plüss, 23.1.2015
1. Teil: Bedienung des EV3
EV3-Roboter sind leistungsfähige Kleincomputer.
LEGO MINDSTORMS Education EV3 Basis Set (45544)
Bezugsquelle: www.educatec.ch, 10 % Workshop-Rabatt
(im Home Set sind nicht alle üblichen Sensoren enthalten)
STIU 2015, ETH Zürich
Ar
Jarka Arnold, Aegidius Plüss, 23.1.2015
Übersicht Anschlüsse
Motor- und Sensoren-Anschlüsse sind
gleich wie beim NXT.
NXT-Sensoren können weiter verwendet
werden und sind in unseren
Klassenbibliotheken implementiert.
Der USB-Port kann für den USB-WLAN Adapter
verwendet werden
(Netgear WNA1100 WLAN Stick 150 MBit/s)
(www.brack.ch, Artikel Nr. 126 213)
(vor dem Start einstecken)
STIU 2015, ETH Zürich
Ar
Jarka Arnold, Aegidius Plüss, 23.1.2015
SD-Karte
SD-Karte enthält Linux, unter Linux laufende Java-Virtual Machine und Skripts
und Bibliotheken von leJOS und EV3JLibA. Ist die Karte beim Starten
eingeschoben, startet EV3 mit leJOS Menu.
microSDHC 4 GB - 32 GB, FAT 32, leer!!
ev3sdcard.zip (ca. 70 MB)
Download: www.legorobotik.ch oder www.jython.ch
(gleiche SD-Karte für Java und Python)
starten
Beim ersten Start wird SD-Karte partitioniert (dauert etwas länger).
Ar
STIU 2015, ETH Zürich
Jarka Arnold, Aegidius Plüss, 23.1.2015
EV3 Schaltflächen
LEFT, RIGHT, UP, DOWN: navigieren
ENTER: EV3 starten, Auswahl bestätigen,
Programm starten
ESCAPE: zurück zum Obermenü, Programm stoppen
EV3 ausschalten
ENTER + ESCAPE gleichzeitig: ein "hängendes"
Programm unterbrechen.
Ar
STIU 2015, ETH Zürich
Jarka Arnold, Aegidius Plüss, 23.1.2015
Das Wichtigste zur Brick-Bedienung (leJOS Menüs)
Startmenü
LEFT/RIGHT nächstes Untermenü
ENTER auswählen
ESCAPE zurück
Programs
Gespeicherte Programme
Programm ausführen
Set as Default
BrickGate.jar Nicht löschen!!
Ar
STIU 2015, ETH Zürich
Jarka Arnold, Aegidius Plüss, 23.1.2015
Wichtigste leJOS Menüs
(Fortsetzung)
Bluetooth: Standardmässig alles richtig eingestellt, immer sichtbar
Wifi: Standardmässig alles richtig eingestellt
Sound: Eventuell Lautstärke einstellen
System
Change name: EV3 umbenennen
(im Klassenverband notwendig)
0123456789-@%
qwertyuiop[]{}
asdfghjkl
zxcvbnm<>7\
U l x D
Anleitung: www.legorobotik.ch
Wifi: Access-Point wählen, WPA2, Passwort
Sleep Time (standardmässig off).
Ar
STIU 2015, ETH Zürich
Jarka Arnold, Aegidius Plüss, 23.1.2015
2. Teil: The Big Picture - A Linux Computer
LAN over USB: NDIS protocol
Bluetooth PAN (Personal Area Network)
USB
Bluetooth
WLAN
TCP/IP-Protokoll
EV3
Running Linux
SSH, SCP and Telnet Server
IP 10.0.1.1
Terminal/Console
Telnet oder SSH client
Pl
STIU 2015, ETH Zürich
Jarka Arnold, Aegidius Plüss, 23.1.2015
Realisation der Telnet-Verbindung
Windows
USB
Bluetooth
WLAN
Mac OS
TCP/IP-Protokoll
Linux
EV3
Running Linux
SSH, SCP and Telnet server
IP 10.0.1.1
Pl
STIU 2015, ETH Zürich
Jarka Arnold, Aegidius Plüss, 23.1.2015
Praktische Übung (siehe verteilte Unterlagen):
Erstellen der Verbindung mit Bluetooth PAN
Auf EV3 keine Einstellungen nötig, aber:
• Bluetooth muss eingeschaltet sein
• Bluetooth-Name muss event. angepasst werden
1. Geräte paaren
• Auf PC: Bluetooth aktivieren und Gerät suchen
• Auf PC angezeigten Sicherheitscode akzeptieren
2. EV3 als Netzwerkgerät (Zugriffspunkt) definieren
• Vorgehen so, als ob EV3 ein Netzwerk-Router wäre
• Immer nötig, wenn EV3 gebootet wird
3. Verbindung testen
• In Kommandofenster/Terminal: ping 10.0.1.1
4. Falls nicht klappt, Paarung entfernen und wieder bei 1. beginnen
Mit Linux spielen: Telnet oder SSH verwenden
Win7/8: Systemsteuerung | Programme | Windows Features aktivieren. Check Box: Telnet Client
telnet 10.0.1.1
login: root
password: (leer)
STIU 2015, ETH Zürich
# pyrun
>>> 2 ** 333
Ar/Pl
Jarka Arnold, Aegidius Plüss, 23.1.2015
Linux Shell (abgemagerte Bash Shell)
•
File-Manager mit SCP (leider kein SFTP)
Windows: bestes Produkt: WinSCP (GUI)
Mac/Linux mit eingebautem Terminal-Command: scp
•
Exploration interessant, insbesondere
/home/root
lejos:
Scripts, die beim Boot verwendet werden
python: Python 2.7 Interpreter
/home/lejos/programs: Java JARs, die im leJOS-Menü erscheinen
/home/python/scripts: Python-Scripts, die im BrickGate-Menü erscheinen
/usr/sbin: zusätzliche Script-Befehle (auch für Sie!)
/usr/bin und /bin: Standard Linux Command Scripts (z.B. kill, ps, vi, usw.)
Pl
STIU 2015, ETH Zürich
Jarka Arnold, Aegidius Plüss, 23.1.2015
Wichtigste Shell-Befehle auf EV3
Befehl
chmod +x <file>
chmode <class>+|-<mode>
+: add, -:remove
cp <quelle> <ziel>
df - h
echo $PATH
export
export <variable = wert>
hostname
kill <id>, kill -9 <id>
killall <procname
kill -stop <id>
kill -cont <id>
ls
mkdir
mv <quelle> <ziel>
pidof <name>
passwd
ps
pwd
reboot
rm <Datei>
rmdir
shutdown
top
vi
Wirkung
setzt für alle Klassen u, g, o Recht execute
<class>: u:user, g:group, o:owner, a:all
<mode>:r:read, w:write, x:execute:
kopiert Datei
zeigt freien Speicherplatzes auf sd card
zeigt Pfad
zeigt Umgebungsvariablen
setzt Umgebungsvariable
zeigt Hostname
beendet Prozess
beendet Prozesse mit Namen, z.B. killall java
stopped Prozess
führt Process weiter (resume)
zeigt Dateien (ls -l mit Attributen)
erstellt Verzeichnis
verschiebt Datei
zeigt Prozess-ID mit Namen
ändert Passwort
zeigt Prozesse
zeigt aktuelles Verzeichnis
bootet
löscht Datei
löscht Verzeichnis
fährt herunter
zeigt Prozesse mit CPU-Zeit
startet vi Editor
Pl
STIU 2015, ETH Zürich
Jarka Arnold, Aegidius Plüss, 23.1.2015
Computer = Prozessorbefehle (Programm) ausführen
1. Programm auf Target editieren, compilieren und den Maschinencode
ausführen
EV3: Nein (Kein Compiler)
Raspberry Pi: Typisch (C/C++)
Arduino: Nein (Kein OS)
2. Programm auf Host editieren, cross-compilieren in Maschinencode
des Target, downloaden und ausführen
EV3: Unüblich
Raspberry Pi: Unüblich
Arduino: Typisch (C)
3. Programm auf Host editieren, in Bytecode compilieren, downloaden
und mit Bytecode-Interpreter ausführen
EV3: Typisch (Java, LabView)
Raspberry Pi: Unüblich
Arduino: Nein (Kein Interpreter)
4. Programm auf Host editieren, Source downloaden und mit
Interpreter ausführen
EV3: Typisch für Python
Raspberry Pi: Unüblich
Arduino: Nein (Kein Interpreter)
5. Programm auf Target editieren und mit Interpreter ausführen
EV3: Unüblich
Raspberry Pi: Typisch (Python)
TigerJython läuft!
STIU 2015, ETH Zürich
Arduino: Nein (Kein Interpreter)
Jarka Arnold, Aegidius Plüss, 23.1.2015
Pl
Beispiel auf EV3 mit Java:
1. Auf Host in IDE editieren
z.B. mit BlueJ
2. Compilieren
3. In JAR verpacken mit Manifest
z.B. BrickTransfer
4. Auf EV3 kopieren
z.B. SCP, BrickTransfer
5. Mit Telnet einloggen und ausführen
cd /home/lejos/programs
ls
runprog HelloJLib
(macht ein java –jar –classpath … HelloJLib.jar)
Anstelle von 5: Programm mit leJOS Menü starten
Pl
STIU 2015, ETH Zürich
Jarka Arnold, Aegidius Plüss, 23.1.2015
Verwendung der EV3 Motoren/Sensoren
Python verwendet nicht direkt die C-Routinen, sondern sendet dem BrickGateServer Befehle, mit denen dieser die entsprechenden leJOS-Routinen aufruft.
BrickGate muss für Python immer gestartet sein.
BrickGate ist ein Java-Programm, also im Menü unter Programs
BrickGate.jar starten
Python mit Telnet
# pyrun
Library ev3robot laden
>>> from ev3robot import *
>>> r = LegoRobot()
Roboter Objekt erzeugen
Gear (Fahrzeug) Objekt erzeugen
>>> g = Gear()
Gear zum Roboter hinzufügen (anschliessen)
>>> r.addPart(g)
Gear auf Linkskreis laufen lassen (Zustand)
>>> g.leftArc(0.1)
Stoppen/Verbindung zum Roboter beenden
>>> r.exit()
Nun können Sie Telnet schliessen
STIU 2015, ETH Zürich
Ar/Pl
Jarka Arnold, Aegidius Plüss, 23.1.2015
3. Teil: Robotik mit Python (TigerJython)
TigerJython:
•
•
•
•
•
•
Einfache und komfortable IDE für Python
Entwickelt von Tobias Kohn in Zusammenarbeit mit A. Plüss
Einfach zum Installieren (eine einzige Datei tigerjython2.jar)
EV3-Klassenbibliotheken sind integriert
Download: www.tigerjython.ch
TigerJython starten: Direkt vom USB-Stick mit Klick auf tigerjython2.jar
(JRE erforderlich)
• EV3-Schaltfläche aktivieren:
Einstellungen – Bibliotheken:
TigerJython muss danach neu gestartet werden.
Ar
STIU 2015, ETH Zürich
Jarka Arnold, Aegidius Plüss, 23.1.2015
Das erste Programm mit TigerJython (RobotEx1.py)
Direkter (fremdgesteuerter) Modus:
EV3 wird remote gesteuert mit einem Programm, das auf dem PC läuft
Entwicklung und Ausführung auf PC
Ständige Kommunikation
Befehlsinterpreter
(BrickGate muss laufen)
• Programm schreiben oder RobotEx1.py öffnen
• BrickGate.jar auf dem EV3 muss gestartet
sein (blinkt)
• Bluetooth-Verbindung muss erstellt sein
• Programm ausführen mit Klick auf die
Schaltfläche Ausführen
STIU 2015, ETH Zürich
Ar
Jarka Arnold, Aegidius Plüss, 23.1.2015
Autonomer Modus (RobotEx1.py)
Editieren auf PC
Download Python-Code
Ausführung mit Python-Interpreter
•
Das gleiche Programm wie beim
direkten Modus
•
Auf den EV3 hinunterladen wählen
•
Erscheint auf EV3 im BrickGate-Menü
•
Kann beliebig oft ausgeführt werden.
Ar
STIU 2015, ETH Zürich
Jarka Arnold, Aegidius Plüss, 23.1.2015
Simulationsmodus (RobotEx2.py)
from simrobot import *
robot = LegoRobot()
gear = Gear()
robot.addPart(gear)
gear.forward(2000)
robot.exit()
gear.leftArc(0.1, 1200)
gear.backward(2000)
robot.exit
blockierende Methoden
Wichtige Methoden der Klasse Gear()
forward(ms)
backward(ms)
left(ms)
right(ms)
leftArc(radius, ms)
rightArc(radius, ms)
nicht blockierende Methoden
forward()
backward()
left()
right()
leftArc(radius)
rightArc(radius)
Ar
STIU 2015, ETH Zürich
Jarka Arnold, Aegidius Plüss, 23.1.2015
Lichtsensor (RobotEx3.py)
from simrobot import *
RobotContext.useBackground("sprites/circle.gif")
robot = LegoRobot()
gear = Gear()
robot.addPart(gear)
ls = LightSensor(SensorPort.S3)
robot.addPart(ls)
gear.forward()
while not robot.isEscapeHit():
v = ls.getValue()
if v < 500:
gear.backward(2500)
gear.left(580)
gear.forward()
robot.exit()
Hintergrundbild
(im tigerjython2.jar enthalten)
gibt Sensorwerte zurück
Weitere Beispiele: www.tigerjython.ch
www.jython.ch
STIU 2015, ETH Zürich
Ar
Jarka Arnold, Aegidius Plüss, 23.1.2015
Teil 4: EV3 Robotik mit Java
Wahl der Klassenbibliotheken:
• Original leJOS_EV3 (nur autonomer Modus)
• Klassenbibliotheken EV3JLib, EV3JLibA, RobotSim
(autonomer, direkter und Simulationsmodus)
Wahl der Entwicklungsumgebung:
• Eclipse
• Netbeans
• BlueJ
• Java Editor (nur Windows)
• Online-Editor/Compiler
Ausführliche Anleitung zu allen oben genannten IDEs: www.legorobotik.ch
Ar
STIU 2015, ETH Zürich
Jarka Arnold, Aegidius Plüss, 23.1.2015
EV3-Online (www.legorobotik.ch)
• Didaktisch konzipierte Lernumgebung
• Keine lokale Installationen notwendig (nur JRE)
• Lauffähige Musterbeispiele zur Verwendung von Motoren und Sensoren
• Programme können im direkten, autonomen und Simulationsmodus
entwickelt werden
• Demo: Direkter, Autonomer und Simulationsmodus
• Programmvorlagen verwenden
Nachteile des Online-Editoer/Compilers:
• Abhängigkeit vom Internet
• Online-Editor ist sehr einfach und bietet nicht den gleichen
Entwicklungskomfort wie Eclipse oder Netbeans.
Ar
STIU 2015, ETH Zürich
Jarka Arnold, Aegidius Plüss, 23.1.2015
EV3-Robotik mit lokalen Java-IDE, alle Modi!!
Programmentwicklung mit
Netbeans (Projekt, Library, Demo: autonom)
(d:\myNetbeans\Ev3\build\classes)
BlueJ (Projekt, Library: Tools|Preferences|Libraries)
(d:\myBluej)
Java-Editor (kein Projekt, nur neue Datei erstellen und speichern)
Libraries: Fenster|Kanfiguration|Java|Interpreter|classpath-User)
(d:\myJe\Ev3)
Eclipse (leJOS Plugin installieren, Window|Preferences|leJOSEV3)
(Run As LeJOS EV3 Programm)
• Ausführliche Anleitungen: www.legorobotik.ch/Installation EV3
Ar/Pl
STIU 2015, ETH Zürich
Jarka Arnold, Aegidius Plüss, 23.1.2015
Teil 5: Einige Demos aus unseren Online-Lehrmitteln
• Fernsteuerung mit Infrarot-Steuerung
- IRRemoteSensor: zur Fernsteuerung
- IRSeekSensor: zur Messung der Distanz
und Richtung zu der Fernsteuerung
- IRDistanceSensor: zur Messung der
Distanz zu einem Ziel (Target)
• Ultraschallsensor (Simulation)
Ar/Pl
STIU 2015, ETH Zürich
Jarka Arnold, Aegidius Plüss, 23.1.2015
Teil 6: Übungen mit frei gewählten Entwicklungsumgebung:
• TigerJython
• Java mit Online-Editor
• Java mit Netbeans, BlueJ, Eclipse oder Java-Editor
Aufgabenstellung: Siehe Kurswebseite oder Aufgabenblatt
Ziel:
Ein Programm im Simulationsmodus und im direkten oder
autonomen Modus zum laufen bringen.
Zusatzaufgabe für diejenigen, die
selbst etwas programmieren möchten.
Ar/Pl
STIU 2015, ETH Zürich
Jarka Arnold, Aegidius Plüss, 23.1.2015
Wie funktioniert der Colorsensor?
Python
Java
cs = ColorSensor(SensorPort.S3)
robot.addPart(cs)
ColorSensor cs = new ColorSensor(SensorPort.S3);
robot.addPart(cs);
Der Colorsensor erkennt 6 Standardfarben:
BLACK, BLUE, GREEN, YELLOW, RED und WHITE.
color = getColorID()
1
2
3
4
5
6
gibt die Farbnummer zurück (1, 2, 3, 4, 5, oder 6)
Farbwerte auf dem LCD-Display ausschreiben (nur autonomer Modus):
Java: import lejos.hardware.lcd.LCD;
LCD.drawString("Black", 0, 2);
Python: robot.drawString("Red", 0, 1)
STIU 2015, ETH Zürich
Jarka Arnold, Aegidius Plüss, 23.1.2015
Herzlichen Dank
und viel Spass und Freude mit EV3 !
STIU 2015, ETH Zürich
Jarka Arnold, Aegidius Plüss, 23.1.2015
Herunterladen