====== Robotik ======
* {{lehrkraefte:blc:informatik:glf20:robotik:intro-robotik.pdf}}
===== Begriffe, Definitionen =====
* https://de.wikipedia.org/wiki/Roboter
* https://de.wikipedia.org/wiki/Aktor
* https://de.wikipedia.org/wiki/Sensor
===== Robotik im Simulationsmodus =====
==== Wichtigste Gear-Funktionen ====
* Voraussetzung ist, dass die Variable ''gear'' auch ein ''Gear''-Objekt ist.
* **Nicht-blockierend** heisst, das Programm läuft sofort weiter. Die Motoren drehen einfach weiter in dieser Einstellung, bis eine Änderung vorgenommen wird.
* **Blockierend** heisst, das Programm wartet an dieser Stelle die gegebene Anzahl **Millisekunden** und kann während dieser Zeit nicht auf Sensoreingaben reagieren. Die Motoren **stoppen nach** einen blockierenden Befehl wieder.
^ nicht-blockierend ^ blockierend ^ Beschreibung ^
| gear.backward() | gear.backward(ms) | fährt rückwärts |
| gear.forward() | gear.forward(ms) | fährt forwärts |
| gear.left() | gear.left(ms) | dreht links |
| gear.right() | gear.right(ms) | dreht rechts |
| gear.leftArc(radius) | gear.leftArc(radius , ms) | fährt auf einem Linksbogen (negative Radien bewirken eine Rückwärtsbewegung) |
| gear.rightArc(radius) | gear.rightArc(radius , ms) | Rechtsbogen |
| gear.setSpeed(speed) | | setzt die Geschwindigkeit (Werte zwischen 0 und ungefähr 70 sind überhaupt sinnvoll.) |
| gear.stop() | | stoppt das Fahrwerk (nötig nach nicht-blockierenden Befehlen |
Vollständige Dokumentation der Funktionen: http://tigerjython.ch/index.php?inhalt_links=navigation.inc.php&inhalt_mitte=robotik/robotikdoc.html
==== Aufwärm-Aufgaben ====
Zeichnen Sie mit dem Roboter folgende Figur:
{{:lehrkraefte:blc:informatik:glf20:robotik:mgr:pasted:20210325-220909.png}}
Benutzen Sie dazu geeignete ''Gear''-Funktionen von oben und eine for-Schleife für die 3-fache Wiederholung, z.B.
for i in range(3):
# Tu was
Zeichnen Sie in etwa folgende Spirale:
{{:lehrkraefte:blc:informatik:glf20:robotik:mgr:pasted:20210325-223207.png}}
Definieren Sie eine Variable für den Kurvenradius und erhöhen Sie diese Variable in einer Wiederholungs-Schleife.
==== Lichtsensor ====
Es ist auch möglich, im Simulator einen Lichtsensor zu verwenden. Der Lichtsensor misst die Helligkeit, die Werte liegen zwischen 0 und 1023 (je grösser der Wert, umso heller). Der Lichtsensor muss auch zum Roboter hinzugefügt werden und zwar mit folgenden Zeilen
# Initialisierung
ls = LightSensor(SensorPort.S3)
robot.addPart(ls)
ls.activate(True)
# Ausgelesen wird der Sensor im Programm mit
v = ls.getValue()
# v enthält nun einen Wert zwischen 0 (schwarz) und 1023 (weiss)
Die Initialisierung (aller erste Zeilen) soll nun wie folgt aussehen:
from simrobot import *
from random import randrange
RobotContext.useBackground("sprites/border.gif")
RobotContext.setStartPosition(350 + randrange(50), 250)
RobotContext.setStartDirection(135+randrange(90))
Dabei wird ein Hintergrund geladen und die Startposition zufällig gewählt.
Lassen Sie den Roboter so lange vorwärts fahren, bis der Roboter auf weissem Grund steht. Dann soll der Roboter anhalten.
===== Challenges =====
* {{lehrkraefte:blc:informatik:glf20:robotik:robochallenge.zip}}
* Challenge 1: Roboter bleibt auf dem roten Punkt unten rechts stehen
* Challenge 2: Roboter bleibt auf dem roten Punkt oben stehen.