lehrkraefte:blc:informatik:glf20:robotik:start

Robotik

  • 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

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.

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.

  • Challenge 1: Roboter bleibt auf dem roten Punkt unten rechts stehen
  • Challenge 2: Roboter bleibt auf dem roten Punkt oben stehen.
  • lehrkraefte/blc/informatik/glf20/robotik/start.txt
  • Last modified: 2021/03/26 21:23
  • by Ivo Blöchliger