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