lehrkraefte:blc:informatik:glf25:robotik:distanzfahren

This is an old revision of the document!


Geradeausfahren

  • Legen Sie in neues Projekt an z.B. mit dem Namen geradeausfahren.
  • Am Ende des Programms, kommentieren Sie das Piepsen aus und fügen Sie folgende zwei Zeilen hinzu:
links = Motor(Port.A)   # Kontrollieren Sie, ob die Motoren auch an den richtigen Ports angeschlossen sind.
rechts = Motor(Port.B)
 
links.run_angle(120, 360, wait=False)   # 120 Grad/s Drehgeschwindigkeit, eine volle Rad-Umdrehung, nicht warten, sondern gleich den nächsten Befehl ausführen.
rechts.run_angle(120, 360, wait=True)   # Dito, aber warten, bis fertig gedreht.
  • Stellen Sie den Roboter auf den Boden, bevor Sie den Code testen. Der Roboter sollte eine Radumdrehung nach vorne fahren.
  • Am Anfang Ihres Programms, fügen Sie folgenden import hinzu (damit der Wert pi bekannt ist):
from math import pi  # Wert pi importieren

Einen Meter fahren

Ziel ist es, dass der Roboter möglichst genau einen Meter zurücklegt.

  • Dazu soll nicht einfach gut geraten werden, sondern durch Messung und geschickte Korrektur soll folgende Konstante für Ihren Roboter und den Teppich-Untergrund möglichst genau bestimmt werden:
    • gradProCM gibt an, um wie viele Grad sich das Rad für einen cm Vorwärtsfahrt drehen muss.
  • Der gewünschte Drehwinkel für 1 m ist dann 100*gradProCM.
  • Bestimmen Sie durch Messung die Konstante gradProCM für Ihren Roboter.
  • Fahren Sie damit einen Meter und testen Sie.
  • Fahren Sie schneller. Welche Probleme tauchen auf?

Langsam anfahren und abbremsen

Ziel ist es, die Geschwindigkeit der Motoren in Abhängigkeit der zurückgelegten Strecke selbst hoch und runter zu regeln, damit langsam angefahren und abgebremst wird, dazwischen aber doch «Vollgas» gefahren werden kann.

Dazu soll folgende Funktion ergänzt werden (nach der Definition von links, rechts und gradProCM zu platzieren):

def smoothRide(distanz, vmax):  # Fährt gegebene distanz in cm mit maximaler Geschwindigkeit vmax in cm/s
   # Winkel zurücksetzen:
   links.reset_angle(0)
   rechts.reset_angle(0)
   s = 0  # Bereits zurückgelegte Distanz
   while s<distanz:                   # Fahren, so lange die gewünschte Strecke nicht zurückgelegt ist
      s = links.angle()/gradProCM     # Bereits zurückgelegte Strecke
 
      v = 120                 # Hier aus der bereits zurückgelegten Distanz die Geschwindigkeit berechnen.
 
      links.run(v*gradProCM)
      recht.run(v*gradProCM)
   rechts.stop()
   links.stop()
 
 
# Funktion aufrufen
smoothRide(100, 20)   # 1 m fahren, mit max 2 Umdrehungen pro Sekunde.

Tipp: Die Geschwindigkeit kann als das Minimum von drei Geschwindigkeiten geschrieben werden:

vstart = ...   # Formel aus s (Anstieg am Anfang)
vend = ...     # Formel aus s (Abfall am Ende)
v = min([vstart, vmax, vend])    # Kleinste der 3 Geschwindigkeiten
  • lehrkraefte/blc/informatik/glf25/robotik/distanzfahren.1763743323.txt.gz
  • Last modified: 2025/11/21 16:42
  • by Ivo Blöchliger