Robotik
Begriffe, Definitionen
Robotik im Simulationsmodus
Wichtigste Gear-Funktionen
- Voraussetzung ist, dass die Variable
gear
auch einGear
-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:
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
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
- Challenge 1: Roboter bleibt auf dem roten Punkt unten rechts stehen
- Challenge 2: Roboter bleibt auf dem roten Punkt oben stehen.