lehrkraefte:blc:informatik:glf22:robotik-mit-vscode:gutelinefollowerfunktion

Herleitung einer guten Funktion

Ziel ist es, erst einmal den Helligkeitswert ins Intervall $[-1,1]$ umzurechnen. 0 bedeutet genau auf der Kante, -1 voll im Schwarz, 1 ganz im Weiss.

Bestimmen Sie eine geeignete Formel:

def auf_intervall(hell):
  x = 0   # TODO Hier Formel mit hell einfügen.
  # Zu grosse/kleine Werte anpassen
  if (x>1.0):
    x = 1.0
  if (x<-1.0):
    x = -1.0
  return x   # Resultat der Funktion

Die Drehgeschwindigkeit soll für $x=0$ Null betragen und für $x=\pm1$ maximal sein.

Dazwischen könnte die Funktion linear sein. Damit wackelt der Roboter aber ziemlich fest, weil er schon bei kleinen Fehler schneller dreht (damit bei maximaler Drehgeschwindigkeit die engen Kurven gefahren werden können).

  • In GeoGebra lassen Sie sich verschiedene Potenzfunktionen der Form $f(x)=x^p$ mit $p=2,3,4$ anzeigen.
  • Stellen Sie dabei die Vergrösserung so ein, dass die Kurven auf dem Intervall $[0,1]$ angezeigt werden (das ist der Bereich, der uns interessiert).
  • Verstehen und Sie folgende Funktion:
def drehgeschwindigkeit(x):
  maximal = 20   # Die Maximalgeschwindigkeit anpassen.
  p = 1  # Diesen Exponenten anpassen (darf auch eine rationale Zahl sein)
  v = abs(x)**p
  if (x<0):
    v=-v
  return v*maximal
  • Bauen Sie beide Funktionen auf_intervall und drehgeschwindigkeit in Ihren Line-Follower ein.
  • Rufen Sie die beiden Funktionen auf, um die Drehgeschwindigkeit zu berechnen.
  • Passen Sie als erstes die Variable maximal an, und zwar so, dass die engsten Kurven gefahren werden können.
  • Passen Sie dann den Exponenten p an, damit der Roboter «schön» fährt.

Zusatz: Berechnen Sie die nötige maximale Drehgeschwindigkeit direkt aus dem minimalen Kurvenradius und der Vorwärtsgeschwindigkeit!

Optional können Sie zusätzlich die Vorwärtsgeschwindigkeit regeln. Z.B. soll diese zwischen einer Minimal- und Maximalgeschwindigkeit sein. Ist der Wert $x$ nahe bei Null, darf die Geschwindigkeit erhöht werden. Ist der Wert $|x|$ nahe bei Eins, soll die Geschwindigkeit schnell reduziert werden.

  • lehrkraefte/blc/informatik/glf22/robotik-mit-vscode/gutelinefollowerfunktion.txt
  • Last modified: 2023/03/02 10:25
  • by Ivo Blöchliger