lehrkraefte:blc:informatik:glf25:robotik:linefollower

Helligkeitssensor

Gemessen wird die Differenz der Helligkeit zwischen Licht an und Licht aus (so schnell, dass man das Flackern nicht direkt sieht).

Gemesser wird aber nicht an einem Punkt, sondern an einem Fleck, der ungefähr 1cm (???) Durchmesser hat.

  • Wer mag diesen Durchmesser bestimmen?

Idee: Man folgt einer Kante zwischen hell und dunkel.

Zu hell: nach links, zu dunkel also nach rechts.

Man legt einen geeigneten Kurvenradius und Geschwindigkeit fest (kann für gerade Linien beides auch ein bisschen grösser sein).

  • Bestimmen Sie die gemessene Helligkeit, wenn der Sensor genau auf der Linie ist.
  • Kopieren Sie folgenden Code in ein neues Projekt, z.B. mit Namen linefollower:
licht = ColorSensor(Port.S3)  # Bitte Anschluss-Nummer überprüfen.
 
links = Motor(Port.A)
rechts = Motor(Port.B)
fahrwerk = DriveBase(links, rechts, 55, 110)  # Motor links, Motor rechts, Raddurchmesser (in mm), Radabstand (in mm)
 
v = 100      # Geschwindigkeit
omega = 30   # Drehgeschwindigkeit (um die eigene Achse)
 
fahrwerk.reset() 
while fahrwerk.distance()<400:           # Wiederholen, bis 400mm zurückgelegt wurden
    hell = licht.reflection()    # Helligkeit messen
    if (hell<25):
        fahrwerk.drive(v, omega)
    else:
        fahrwerk.drive(v, -omega)
 
fahrwerk.stop()  # Danach anhalten
  • Passen Sie Geschwindigkeit v und die Drehgeschwindigkeit omega an, dass der Roboter der Linie folgen kann.

Aus der Helligkeit hell und der maximalen Drehgeschwindigkeit omega, berechnen Sie eine neue Drehgeschwindigkeit o, die zwischen -omega und omega liegen soll. o soll Null sein, wenn der Roboter genau drauf liegt.

Stellen wir uns vor, der Roboter fährt gerade, aber mit kleinem Winkel über den Klebestreifen. Die Helligkeit nimmt langsam zu. Aber schon vor die gewünschte Helligkeit erreicht wird, muss der Roboter in die andere Richtung lenken.

Dazu wird die Helligkeit am Ende der Wiederholung in einer Variable hell_alt gespeichert. Diese Variable wird vor der Wiederholung auf -1 initialisiert, damit erkannt werden kann, dass noch kein Wert existiert.

Die Drehgeschwindigkeit soll jetzt zusätzlich von der Differen hell-hell_alt beeinflusst werden.

Damit sollte sich der Roboter schneller stabilisieren können.

In einer Kurve wird der Roboter neben der Kante fahren (bei dem Wert, der nötig ist, um die Kurve zu fahren). Das kann schnell schief gehen, wenn die Kurve zu eng ist.

Die Idee ist, die Abweichungen vom Soll-Wert aufzusummieren. Diese Summe beinflusst dann zusätzlich die Drehgeschwindigkeit (und evtl. die Geschwindigkeit, weil langsamer ist besser).

Damit die Summe nicht komplett unsinnige Werte annimt, soll sie auf ein Intervall eingeschränkt werden.

  • lehrkraefte/blc/informatik/glf25/robotik/linefollower.txt
  • Last modified: 2025/12/12 14:30
  • by Ivo Blöchliger