Table of Contents

Robotik

Begriffe, Definitionen

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:

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:

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