Die Position der Motoren des Roboters kann als Winkel in Grad ausgelesen und auch angesteuert werden. Geschwindigkeiten werden in $\frac{\text{Grad}}{\text{s}}$ (also Grad pro Sekunde) angegeben. Daher ist es wichtig, den Umfang der Räder zu messen, um Winkel in Distanz umzurechnen.
cm_pro_grad
und grad_pro_cm
, mit denen dann zwischen cm und Grad umgerechnet werden kann. Dabei soll nur eine der beiden Konstanten im Code festgelegt werden, die andere wird daraus berechnet.def geradeAus(distanz):
. # imports fehlen hier, siehe https://fginfo.ksbg.ch/dokuwiki/doku.php?id=lehrkraefte:blc:informatik:glf22:robotik-mit-svcode:programm-struktur from math import pi # Wert pi importieren # Initialisierungen fehlen hier 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 distanz = 100 # 100 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. links.stop() rechts.stop()
Wenn der Radumfang einmal korrekt kalibriert ist, muss der Radabstand kalibriert werden, damit korrekt um die eigene Achse gedreht werden kann. Wo genau der Drehpunkt der Räder ist, hängt vom Untergrund und der genauen Geometrie der Radaufhängung ab (die Achsen sind nämlich nicht exakt auf derselben Geraden, sondern vom Eigengewicht des Roboters leicht nach oben geneigt).
radabstand
ihrem Code hinzu.rotation_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).drehen(motor, winkel):
, die bewirkt, dass sich der Roboter mit dem gegebenen Motor um die eigene Achse um den winkel
dreht. Aufgerufen wird die Funktion dann z.B. mit drehen(links, 360)
.
Mit diesen Daten programmieren Sie eine Funktion kreis_fahren_links(radius, winkel, geschwindigkeit)
, mit der der Roboter(-mittelpunkt) auf einem Kreis mit gegebenem Radius um einen gegebenen Winkel fährt, mit der Durchschnittsgeschwindigkeit geschwindigkeit
. D.h. kreis_fahren_links(50, 360, 100)
fährt einen Vollkreis auf einem Kreis mit 1m Durchmesser und einer Durchschnitts-Rad-Geschwindigkeit von 100Grad/s.
Der Lichtsensor vom Roboter startet auf einem Punkt, der 1 m von Zentrum eines Drehstuhls entfernt ist. Der Roboter muss den Stuhl umrunden und möglichst genau den Startpunkt wieder anfahren.
Aus der benötigten Zeit $t$ und der Entfernung $d$ in cm vom Startpunkt wird wie folgt ein Score berechnet: $t + 2d$. Das kleinste Score gewinnt.