lehrkraefte:blc:informatik:glf20:robotik:pruegeli-challenge

Prügeli-Challenge

Der Roboter soll einen kleinen Parcours absolvieren, ein Prügeli aufladen und dieses dann an einem bestimmte Ort abladen.

Es gibt noch zwei neue Elemente am Roboter: Der Ultraschall-Distanzsensor und der dritte Motor, um den Heber zu bewegen.

Der Ultraschallsensor wird wie folgt initialisiert:

# Ultraschall Distanzsensor hinzufuegen
us = UltrasonicSensor(SensorPort.S2)  # Kontrollieren, ob der US-Sensor auch an Port 2 hängt
robot.addPart(us)

Die Distanz kann dann wie folgt gemessen werden:

dist = us.getDistance() # Aktuelle Distanz

Kann keine Distanz ermittelt werden, wird 0 (Null) als Wert geliefert. D.h. die Werte sind nur dann sinnvoll wenn dist>0.

Initialisierung:

# Hebearm hinzufuegen
heber = Motor(MotorPort.C)
robot.addPart(heber)
heber.setSpeed(10)

Stellen Sie sicher, dass der Heber ganz oben ist, bevor Sie das Programm starten.

Verwendung:

##########################################################################
### Sicherstellen, dass der Heber vor dem Programmstart ganz oben ist! ###
##########################################################################
 
# Heber in eine gegebene Position fahren. 
def heberPosition(position):
    heber.continueTo(position) 
    Tools.delay(500)
 
 
# Funktionen aufrufen:
heberPosition(-140)  # Heber runter, Wert eventuell anpassen
heberPosition(0)     # Heber in Ausgangsposition

Sie programmieren und testen Programmteile, um damit am Schluss die Prügeli-Challenge zu lösen.

Das Programm soll wie folgt organisiert werden:

# imports
 
# Initialiserung des Roboters, Motoren, Sensoren
 
# Definition der Funktionen wie z.B.
 
def heberPosition(position):
  # ...
 
def folgenBisWand(distanz):
  # ...
 
def wenden():
  # ...
 
# Ganz unten, Start vom eigentlichen Programm:
 
folgenBisWand(20)  # Bis 20cm vor der Wand der Linie folgen
heberPosition(-100)  # Heber in geeignete Position
folgenBisWand(10)  # Bis 10cm vor der Wand der Linie folgen
heberPosition(-60)  # Prügeli aufheben
rueckwartsFahren()
wenden()
heberPosition(-160)  # Prügeli abladen

Der Roboter soll ein Schoggi-Prügeli holen und bringen, wie in diesem Video.

Wichtig: Speichern Sie Ihr Programm (Ctrl-S) vor jeder Ausführung!

Der Roboter folgt der Linie, bis er nah genug an der Wand ist, lädt das Prügeli auf, fährt rückwärts, dreht sich, lädt das Prügeli ab und fährt den Heber wieder hoch.

Positionieren Sie die rechte Auflage fast am Rand des Papiers und das Prügeli so weit vorne wie möglich.

Messen Sie die geeignete Distanz von Sensor zur Wand, damit das Prügeli gut aufgeladen werden kann. Tragen Sie dann diese Distanz im Code unten ein und testen Sie

def fahrenBisWand():
    gear.setSpeed(20)   # Geeignete Geschwindigkeit setzen
    gear.forward()      # Fahren
    while True:
        dist = us.getDistance()
        if dist>0 and dist<30:   #Sinnvoller Wert kleiner als 30 cm ?
            break
    gear.stop()
 
# Funktionen aufrufen
fahrenBisWand()

Erweitern Sie das Programm so, dass der Heber erst runter geht, dann der Roboter fährt und am Schluss der Heber das Prügeli hoch hebt.

Schreiben Sie eine Funktion, damit der Roboter dem Rand folgt, bis zu einen bestimmten Distanz.

def folgenBisWand():
    while True:
        # Folgen
        # Distanz überprüfen

Zusätzlich können Sie die Geschwindigkeit in Abhängigkeit der Distanz anpassen:

  • zuerst maximale Geschwindigkeit, damit sinnvolles Folgen noch möglich ist
  • Dann die Geschwindigkeit bis etwa 5 reduzieren, je näher man der gewünschten Distanz kommt (verwenden Sie dazu unsere Funktion linear für die Umrechnung)
def linear(a,b,c,d,x):
    return (x-a)/(b-a)*(d-c)+c  

Jetzt sollten Sie die Challenge 1 lösen können.

Der Roboter startet beim grünen Pfeil, folgt der Linie bis vor die Mauer, fährt dann schräg daran vorbei bis zum Rand, dann wie Challange 1

Wie Challenge 2, das Prügeli soll aber im rechten unteren Ecken (beim Startpunkt) abgelegt werden.

  • lehrkraefte/blc/informatik/glf20/robotik/pruegeli-challenge.txt
  • Last modified: 2021/05/31 08:26
  • by Ivo Blöchliger