Zum Hauptinhalt springen
Version: 28Gb

Linienfolger

Für einen Linienfolger braucht es Sensoren, welche die Linie erkennen können. Der Maqueen Plus V2 hat fünf Liniensensoren, welche schwarz/weiss unterscheiden können.

Dabei gilt:

Schwarz
Sensorwert 1
Weiss
Sensorwert 0

Die Sensoren sind wie folgt angeordnet und können mit line_sensor_all() ausgelesen werden:

Ein einfacher Ansatz für einen Linienfolger wäre, die Liniensensoren immer zu überprüfen und entsprechend die Motoren anzusteuern:

Sensor M = 1
Geradeaus fahren
Sensor L1 = 1 und M = 0
Linkskurve, da nun zu weit rechts
Sensor R1 = 1 und M = 0
Rechtskurve, da nun zu weit links

In Python würde das etwa so aussehen:

from microbit import *
from maqueen import *
while True:
sensoren = line_sensor_all()
if sensoren[2] == 1:
motor_run(Motor.ALL, 40)
elif sensoren[1] == 1:
motor_run(Motor.LEFT, 0)
motor_run(Motor.RIGHT, 40)
elif sensoren[3] == 1:
motor_run(Motor.LEFT, 40)
motor_run(Motor.RIGHT, 0)
Bemerke

Weil zuerst der mittlere Sensor M überprüft wird, ist bei den folgenden elif Bedingungen bereits sicher, dass M Null ist, da sonst die erste Bedingung zugetroffen hätte. Deshalb braucht es ein zusätzliches ... and sensoren[2]==0 nicht.

Dieser Ansatz funktioniert allerdings nicht zuverlässig 😭.

Problem des einfachen LinienfolgersProblem des einfachen Linienfolgers
Aufgabe

Erklären Sie kurz anhand der obigen Abbilgung, weshalb der einfache Linienfolger nicht zuverlässig funktioniert.

Laden...