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?
Einer Kante folgen
Idee: Man folgt einer Kante zwischen hell und dunkel.
Zu hell: nach links, zu dunkel also nach rechts.
Der Wackler
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
vund die Drehgeschwindigkeitomegaan, dass der Roboter der Linie folgen kann.
Weniger wackeln
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.
Besseres Gegensteuer
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.
Drehgeschwindigkeit dem Kurvenradius anpassen
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.