lehrkraefte:blc:informatik:glf24:robotik:fahrphysik-test-programme

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lehrkraefte:blc:informatik:glf24:robotik:fahrphysik-test-programme [2024/11/18 19:06] Ivo Blöchligerlehrkraefte:blc:informatik:glf24:robotik:fahrphysik-test-programme [2024/11/19 13:41] (current) Ivo Blöchliger
Line 1: Line 1:
 +====== Testprogramme für die Fahrwerkskalibrierung ======
 +<WRAP todo>
 +  * In Visual Studio Code, legen Sie ein neues Projekt an (siehe [[https://fginfo.ksbg.ch/dokuwiki/doku.php?id=lehrkraefte:blc:informatik:glf22:robotik-mit-svcode:einrichten-und-erstes-programm#neues_projekt_anlegen|Neues Projekt anlegen]]).
 +  * Bevor Sie ein Programm auf dem Roboter starten, stellen Sie diesen bitte auf den Boden, um die Fallhöhe zu minimieren.
 +</WRAP>
 +===== Geradeausfahrt =====
 +<WRAP todo>
 +Fügen Sie dann am Ende des Programms folgende Zeilen hinzu, um die Motoren zu initialisieren:
 +</WRAP>
 +<code python>
 +links = Motor(Port.A)   # Kontrollieren Sie, ob die Motoren auch an den richtigen Ports angeschlossen sind.
 +rechts = Motor(Port.B)
 +</code>
 +<WRAP todo>
 +Fügen Sie dann weiter folgendes, unfertiges Programm hinzu und passen Sie es mit den korrekten Werten und Formeln an:
 +</WRAP>
 +<code python>
 +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()
 +</code>
 +<WRAP todo>
 +  * 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.
 +</WRAP>
 +===== Drehung mit einem Motor =====
 +<WRAP todo>
 +  * Messen Sie den Radabstand in cm (von Radmitte zu Radmitte).
 +  * Tragen Sie den Radabstand in Variable ''radabstand'' in ihrem Code hinzu.
 +  * Berechnen Sie aus ''radabstand'' und ''radumfang'' eine Variable ''drehung_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 ''drehwinkel'' die Variable ''radwinkel'', die angibt, um wie viele Grad sich das linke Rad drehen muss (während das rechte stillsteht), damit sich der Roboter um genau ''drehwinkel''  dreht.
 +  * Ändern Sie dann die Variable ''aufgabe'' auf 2 und testen Sie. Passen Sie den ''radabstand'' so an, dass die Drehung möglichst genau 360° beträgt.
 +</WRAP>
 +
 +===== Unterprogramm Linkskurve =====
 +<WRAP todo>
 +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:
 +</WRAP>
 +<code python>
 +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/
 +linkskurve(25, 180, 200)
 +</code>
 +
 +===== Challenge =====
 +<WRAP todo>
 +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».
 +</WRAP>