Prügeli-Challenge
Der Roboter soll einen kleinen Parcours absolvieren, ein Prügeli aufladen und dieses dann an einem bestimmte Ort abladen.
Neue Elemente
Es gibt noch zwei neue Elemente am Roboter: Der Ultraschall-Distanzsensor und der dritte Motor, um den Heber zu bewegen.
Ultraschall-Distanzsensor
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
.
Heber-Motor
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
Aufgaben
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
Challenge
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.
Bis auf eine Distanz geradeaus fahren
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.
Dem Rand folgen, bis zu einer Distanz
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
Challenges
Jetzt sollten Sie die Challenge 1 lösen können.
Challenge 2
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
Challenge 3
Wie Challenge 2, das Prügeli soll aber im rechten unteren Ecken (beim Startpunkt) abgelegt werden.