lehrkraefte:blc:informatik:glf20:robotik:linefollower

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:glf20:robotik:linefollower [2021/05/12 21:33]
Ivo Blöchliger [Weitere mögliche Verbesserungen]
lehrkraefte:blc:informatik:glf20:robotik:linefollower [2021/05/21 11:37] (current)
Ivo Blöchliger
Line 18: Line 18:
 grau = 500          # Diesen Wert eventuell anpassen grau = 500          # Diesen Wert eventuell anpassen
 radiusLinks = 0.1   # Radius anpassen, so dass die engsten Kurven gefahren werden können radiusLinks = 0.1   # Radius anpassen, so dass die engsten Kurven gefahren werden können
-rediusRechts = 0.2  # Radius anpassen, so dass die engsten Kurven gefahren werden können+radiusRechts = 0.2  # Radius anpassen, so dass die engsten Kurven gefahren werden können
  
 gear.setSpeed(20)   # Langsam genug, damit der Roboter noch sinnvoll fahren kann. gear.setSpeed(20)   # Langsam genug, damit der Roboter noch sinnvoll fahren kann.
Line 41: Line 41:
 Wenn die Geschwindigkeit klein genug ist (z.B. ''gear.setSpeed(10)'') erhält man so einen Linefollower, der schön ruhig und zuverlässig der Linie folgt. Wenn die Geschwindigkeit klein genug ist (z.B. ''gear.setSpeed(10)'') erhält man so einen Linefollower, der schön ruhig und zuverlässig der Linie folgt.
  
 +<code python>
 +###########################################
 +## B E G I N   D E S   P R O G R A M M S ##
 +###########################################
 +
 +
 +grau = 500          # Diesen Wert eventuell anpassen
 +radiusLinks = 0.1   # Radius anpassen, so dass die engsten Kurven gefahren werden können
 +radiusRechts = 0.2  # Radius anpassen, so dass die engsten Kurven gefahren werden können
 + 
 +# Das Interval [a,b] linear auf das Intervall [c,d] umrechnen, an der Stelle x
 +
 +def linear(a,b,c,d,x):
 +    return (x-a)/(b-a)*(d-c)+c  
 +
 +def guterRadius(hell):
 +    if (hell>=grau-50 and hell<=grau+50):
 +        gear.forward()
 +        return
 +    if (hell<grau):
 +        r = linear(?, grau-50, ?, ?, hell);  # TODO
 +        gear.leftArc(r)
 +    else:
 +        r = linear(grau+50, ?, ?, ? , hell);  # TODO
 +        gear.rightArc(r)
 +
 +gear.setSpeed(20)   # Langsam genug, damit der Roboter noch sinnvoll fahren kann.
 +while True:
 +    hell = ls.getValue()
 +    if hell==0:  # Roboter wurde aufgehoben? Also Ende
 +        break
 +    guterRadius(hell)
 + 
 +gear.stop()   # Motoren stopp
 +robot.exit()  # Programm korrekt beenden
 +</code>
 ===== Weitere mögliche Verbesserungen ===== ===== Weitere mögliche Verbesserungen =====
   * Auf geraden Stücken könnte die Geschwindigkeit erhöht werden und die Kurvenradien entsprechend reduziert werden. Sobald aber eine Kurve festgestellt wird, muss die Geschwindigkeit wieder reduziert werden.   * Auf geraden Stücken könnte die Geschwindigkeit erhöht werden und die Kurvenradien entsprechend reduziert werden. Sobald aber eine Kurve festgestellt wird, muss die Geschwindigkeit wieder reduziert werden.
  • lehrkraefte/blc/informatik/glf20/robotik/linefollower.1620848037.txt.gz
  • Last modified: 2021/05/12 21:33
  • by Ivo Blöchliger