Testprogramme für die Fahrwerkskalibrierung
- In Visual Studio Code, legen Sie ein neues Projekt an (siehe Neues Projekt anlegen).
- Bevor Sie ein Programm auf dem Roboter starten, stellen Sie diesen bitte auf den Boden, um die Fallhöhe zu minimieren.
Geradeausfahrt
Fügen Sie dann am Ende des Programms folgende Zeilen hinzu, um die Motoren zu initialisieren:
links = Motor(Port.A) # Kontrollieren Sie, ob die Motoren auch an den richtigen Ports angeschlossen sind. rechts = Motor(Port.B)
Fügen Sie dann weiter folgendes, unfertiges Programm hinzu und passen Sie es mit den korrekten Werten und Formeln an:
from math import pi # Wert pi importieren # Variablen für den Roboter raddurchmesser = 5 # Phantasiewert! Bitte ersetzen radumfang = 23 # Hier Formel mit pi einsetzen grad_pro_cm = 42.0 # Phantasiewert, bitte anpassen, am besten direkt aus dem Radumfang berechnen. cm_pro_grad = 1.0/grad_pro_cm radabstand = 20 # Phantasiewert, Abstand in cm drehung_pro_grad = 4 # um wieviele Grad dreht sich der Roboter, wenn sich ein Rad um ein Grad dreht. aufgabe = 1 if aufgabe==1: distanz = 10 # 10 cm soll der Roboter fahren links.run_angle(120, distanz*grad_pro_cm, wait=False) # 120 Grad/s Drehgeschwindigkeit, Drehwinkel, nicht warten, sondern gleich den nächsten Befehl. rechts.run_angle(120, distanz*grad_pro_cm, wait=True) # Dito, aber warten, bis fertig gedreht. elif aufgabe==2: drehwinkel = 360 radwinkel = 42 # Formel, um aus dem drehwinkel und der Konstante grad_pro_grad den Winkel zu berechnen, um den sich das linke Rad drehen muss. links.run_angle(120, radwinkel, wait=True) links.stop() rechts.stop()
- Testen Sie Ihr Programm. Der Roboter sollte 10 cm vorwärts fahren.
- Ändern Sie die Distanz auf 100 cm und messen Sie die zurückgelegte Distanz. Passen Sie dann den Raddurchmesser so an, dass die Strecke nachher genau stimmen sollte.
Drehung mit einem Motor
- Messen Sie den Radabstand in cm (von Radmitte zu Radmitte).
- Tragen Sie den Radabstand in Variable
radabstandin ihrem Code hinzu. - Berechnen Sie aus
radabstandundradumfangeine Variabledrehung_pro_grad, die angibt, um wie viele Grad sich der Roboter um die eigene Achse dreht, pro Grad Radumdrehung eines Rads (wenn das andere stillsteht). - Berechnen Sie dann aus dem
drehwinkeldie Variableradwinkel, die angibt, um wie viele Grad sich das linke Rad drehen muss (während das rechte stillsteht), damit sich der Roboter um genaudrehwinkeldreht. - Ändern Sie dann die Variable
aufgabeauf 2 und testen Sie. Passen Sie denradabstandso an, dass die Drehung möglichst genau 360° beträgt.
Unterprogramm Linkskurve
Ziel ist es, eine Funktion linkskurve(r, winkel, v) zu schreiben, die den Roboter veranlasst eine Linkskurve um winkel Grad mit Geschwindigkeit v zu fahren, wobei die Mitte des Roboters sich auf einem Kreis mit Radius r (in cm) bewegen soll. Dabei sollen die definierten Variablen radumfang, grad_pro_cm, radabstand, etc verwendet werden.
- Fügen Sie folgenden, noch unvollständigen Code nach der Definition aller Fahrphysikvariablen ein:
def linkskurve(r, winkel, v): wegmitte = 42 # Distanz für Robotermitte aus r und winkel ausrechnen zeit = 42 # zeit, die mit der Geschwindigkeit v für die Streck wegmitte benötigt wird wegrechts = 42 # Distanz ausrechnen, die das rechte Rad zurücklegen muss: Formel aus winkel, r und radabstand weglinks = 42 # linkes rad winkelrechts = 42 # wegrechts in Drehwinkel für das rechte Rad umrechnen winkellinks = 42 # Winkel für linkes Rad vrechts = 42 # Winkelgeschwindigkeit für linkes Rad ausrechnen (aus zeit und winkelrechts) vlinks = 42 # dasselbe für links # Und jetzt fahren! links.run_angle(vlinks, winkellinks, wait=False) rechts.run_angle(vrechts, winkelrechts, wait=True) # Test: Roboter sollte 180 Grad auf einem Kreis mit Radius 25cm fahren, mit einer Radgeschwindigkeit von durchschnittlich 200 Grad/s linkskurve(25, 180, 200)
Challenge
Der Roboter startet mit dem rechten Rad auf einem Punkt, der 1 m von Zentrum eines Drehstuhls entfernt ist. Der Roboter muss den Stuhl umrunden und möglichst genau den Startpunkt mit dem rechten Rad wieder anfahren.
Falls die Distanz kleiner als 50cm ist, wird aus der benötigten Zeit $t$ in Sekunden und der Entfernung $d$ in cm vom Startpunkt wie folgt ein Score berechnet: $t + 2d$. Die drei Gruppen mit den kleinsten Scores gewinnen ein «Minörli».