Linienfolger-Simulator: Roboter im Browser abstimmen
Baue einen virtuellen Linienfolger-Roboter, visualisiere seine Sensoren und stimme einen PID-Regler im interaktiven Browser-Simulator ab.
- Kategorie
- Arduino
- Zeitaufwand
- 45–90 Min.
- Plattform
- Browser · Arduino
01 / Hier starten
Einführung
Ein Linienfolger wandelt Sensormesswerte in Lenkkorrekturen um. Dieses Projekt lässt dich eine Strecke zeichnen, Roboter- und Sensorgeometrie ändern und einem deterministischen PID-Regler in Echtzeit zusehen. Verknüpfe Regelungstechnik mit dem Verhalten eines Arduino-Roboters auf physischem Kurs.
Live lab / Deterministic 60 Hz model
Line follower simulator
Run the starter track, tune the controller, or pause and draw a course of your own.
Bright nodes are sensors currently detecting the track. The lavender heading line shows steering output. Drawing pauses the robot automatically.
- Elapsed
- 0.0 s
- Distance
- 0 units
- Line error
- 0.000
- Steering
- 0.000
- Track contact
- 100%
Keyboard: focus the course, then use Space to run/pause, N to step, R to reset, D to draw, and F for full screen.
Steuerung
Nutze die Streckenvoreinstellungen als Basis oder pausiere den Lauf und zeichne direkt auf den Kurs. Die Robotergeschwindigkeit steuert, wie weit das Chassis pro Update vorrückt. Sensoranzahl und -abstand ändern das Sichtfeld. Die Regler P, I und D ändern die Lenkantwort; Schritt rechnet im Pausezustand ein deterministisches Update weiter.
Beginne mit mittlerer Geschwindigkeit, fünf Sensoren und Standardverstärkungen. Ändere eine Variable nach der anderen und vergleiche Fehler, Rundenzeit und Spurtreue-Kennzahlen.
Theorie
Der Sensorbalken tastet Reflexion vor dem Roboter ab. Jeder aktive Sensor trägt seine vorzeichenbehaftete Position zu einem gewichteten Mittel bei. Die Balkenmitte ist Fehler null; Messwerte links oder rechts der Mitte ergeben negativen oder positiven Fehler.
Der Regler kombiniert drei Anteile:
$$u(t) = K_p e(t) + K_i \int e(t)dt + K_d \frac{de(t)}{dt}$$
Die Korrektur $u(t)$ beschleunigt ein Rad und bremst das andere. P-Regelung reagiert auf den aktuellen Offset, I-Regelung korrigiert bleibende Verzerrung, D-Regelung dämpft schnelle Änderungen.
Algorithmus
- Jeden Sensor in festem Intervall abtasten.
- Gewichtete Linienposition berechnen und um die Mitte normieren.
- Letzte beobachtete Linienrichtung weiter nutzen, wenn alle Sensoren die Spur verlieren.
- Integral- und Differenzialanteil mit demselben festen Zeitschritt aktualisieren.
- Korrektur klemmen, linken und rechten Motorbefehl berechnen und Roboterpose integrieren.
Stimme die Proportionalverstärkung ab, bis der Roboter sanften Kurven folgt, füge D-Verstärkung hinzu, bis das Pendeln sich setzt, und nur so viel Integralverstärkung, dass ein wiederholbarer Offset verschwindet.
Quellcode
Der Browser-Simulator und ein Mikrocontroller nutzen dieselbe Regelform. Eine kompakte Schleife im Arduino-Stil sieht so aus:
float integral = 0.0f;
float previousError = 0.0f;
void controlStep(float dt) {
float error = readWeightedLinePosition();
integral = constrain(integral + error * dt, -2.0f, 2.0f);
float derivative = (error - previousError) / dt;
float correction = kp * error + ki * integral + kd * derivative;
setMotorSpeeds(baseSpeed - correction, baseSpeed + correction);
previousError = error;
}
Halte das echte Regelintervall stabil. Variable Verzögerung ändert Differenzial- und Integralanteil, auch wenn die Verstärkungen gleich bleiben.
Annahmen und Unterschiede zur Hardware
Dies ist ein Lehrmodell, kein Hardware-Nachbau. Die Strecke ist eine flache, kontrastreiche Binärmaske ohne Umgebungslichtschwankung — der Sensorbalken sieht perfektes Schwarz und Weiß. Auf echtem Klebeband ändern Raumlicht, Oberflächenglanz und Sensorhöhe die Messwerte, du musst kalibrieren wie in den Verdrahtungshinweisen. Das Timing ist ideal: Der Regler läuft in festem Intervall ohne delay()-Jitter, während eine physische Arduino-Schleife mit anderer Arbeit schwankt und dieser Jitter die PID-Antwort formt. Das Chassis ist kinematisch: Räder rutschen nie, Motoren antworten instantan, die Batterie bricht nie ein. Behandle hier gefundene Verstärkungen als nahen Startpunkt und stimme am echten Roboter nach Kalibrierung neu ab.
Schaltplan
Verbinde die Sensorausgänge mit analogfähigen Eingängen, führe Masse zwischen allen Modulen gemeinsam und treibe Motoren über eine H-Brücke statt aus Controller-Pins.
Prüfe die Motorversorgungs-Bemessung und füge lokale Stützkondensatoren nahe Controller und Treiber hinzu. Führe Motorstrom nie durch den Logikregler eines Entwicklungsboards.
Geführte Experimente
Jedes isoliert eine Variable — genau das ist auf echter Hardware schwer, wo sich alles zugleich ändert.
1. Kritische Verstärkung finden, dann halbieren
Setze Integral- und Differenzialverstärkung auf null und erhöhe die Proportionalverstärkung, bis der Roboter auf Geraden gleichmäßig pendelt — mit konstanter statt wachsender oder schrumpfender Amplitude. Halbiere diesen Wert.
Du hast nun einen Start-Kp aus Messung statt Schätzung, und er wird nah dran sein. Füge von dort D hinzu, bis das Pendeln ausdämpft.
2. Beweisen, dass Verstärkungen geschwindigkeitsabhängig sind
Stimme den Roboter ab, bis er bei niedriger Grundgeschwindigkeit sauber folgt. Erhöhe nun die Geschwindigkeit um die Hälfte und fahre dieselben Verstärkungen unverändert.
Er wird pendeln, Kurven schneiden oder die Linie verlieren. Am Regler hat sich nichts geändert — doch dieselbe Lenkkorrektur erzeugt nun mehr Kursänderung pro Streckeneinheit, die wirksame Verstärkung stieg also mit der Geschwindigkeit. Jede Abstimmung ist eine Abstimmung bei einer Geschwindigkeit — darum bremst ein Wettbewerbsroboter für Kurven statt überall mit einer Verstärkung zu fahren.
3. Beobachten, was die Sensoranzahl ermöglicht
Fahre dieselbe Strecke mit denselben Verstärkungen mit drei, fünf und acht Sensoren.
| Sensoren | Positionssignal | Wirkung auf Abstimmung |
|---|---|---|
| 3 | Grob, faktisch drei Bereiche | Folgt, lässt sich aber nicht straff abstimmen — der Fehler quantisiert |
| 5 | Glatt genug für proportionales Lenken | Der übliche Sweet Spot |
| 8 | Fein | Erlaubt höhere Verstärkungen und Tempo vor dem Pendeln |
Das interessante Ergebnis: Mehr Sensoren heben die Decke statt den Boden zu verbessern. Bei niedrigem Tempo genügen drei Sensoren. Die Extraauflösung zahlt sich erst bei den Geschwindigkeiten aus, wo das grobe Fehlersignal begrenzt.
4. Absichtlich in scharfer Kurve scheitern
Erhöhe die Geschwindigkeit, bis der Roboter in der engsten Kurve die Linie verliert. Beobachte, was er dann tut. Überlege dann, was der echte Roboter tun sollte: Geradeaus weiterzufahren ist die schlechteste Option, denn die Linie bog weg.
Das ist die Begründung, bei Spurverlust den letzten Fehler zu halten statt zu nullen — null heißt „mittig“ und kommandiert Vollgas geradeaus. Den letzten Fehler zu halten lässt den Roboter weiterdrehen, wie er schon drehte — dorthin, wo die Linie hinlief.
Was du beobachten solltest
| Symptom im Diagramm | Ursache | Lösung |
|---|---|---|
| Gleichmäßiges Pendeln auf Geraden | Kp zu hoch oder Kd zu niedrig |
Kp halbieren, dann Kd erhöhen |
| Wachsendes Pendeln | Kp über der kritischen Verstärkung |
Senken |
| Weites, langsames Kurvenschneiden | Zu schnell für den Sensorvorhalt | Langsamer oder Array nach vorn versetzen |
| Zackiger Stellaufwand | Kd auf verrauschter Position |
Filtern oder Kd senken |
| Folgt immer leicht außermittig | Ungleiche Kalibrierung je Sensor | Jeden Kanal gegen seinen eigenen Bereich normieren |
| Verliert die Linie, fährt geradeaus | Fehler bei Spurverlust genullt | Letzten Fehler halten |
Umsetzung auf Hardware
| Dieses Labor | Echter Roboter |
|---|---|
| Perfekt periodische Schleife | Jitter, außer du misst dt; ein delay() schaltet Kd faktisch ab |
| Ideale Kalibrierung | Muss jeden Lauf neu, auf der echten Fläche |
| Binäre Kontraststrecke | Glänzendes Klebeband, Staub und Umgebungs-Infrarot senken Kontrast |
| Kein Schlupf | Schlupf bei Tempo und zwei verschiedene Motortotzonen |
| Motoren antworten instantan | Beide Räder laufen bei verschiedenen Tastgraden an |
| Konstante Batterie | Spannung bricht ein, derselbe Tastgrad gibt also immer weniger Drehzahl |
Hier gefundene Verstärkungen übertragen sich als naher Startpunkt, das Abstimmverfahren vollständig. Stimme auf eigenem Klebeband neu ab — und erwarte die größte Einzelverbesserung auf Hardware nicht von den Verstärkungen, sondern von der Schleifenrate, denn ein erster Aufbau läuft oft mit 20–50 Hz und erreicht mehrere Hundert schlicht durch Entfernen blockierender Aufrufe. Der komplette Bau steht in Linienfolger-Roboter bauen.
Hardware-Checkliste
Bauteile
- Arduino Uno oder kompatibler Controller
- Drei bis neun IR-Reflexionssensoren
- Zwei Getriebe-DC-Motoren und Räder
- Dual-H-Brücken-Motortreiber
- Akkupack, Chassis und Stützrad
Den Graphen erkunden
Wo dieser Simulator verwendet wird
Die Projekte, Lernpfade und Tutorials, die auf diesem Labor aufbauen.
Weiterbauen
Ressourcen herunterladen
Nutze diese Referenzen auf der Seite, während du das Projekt durcharbeitest. Herunterladbare Projektpakete kommen erst hinzu, wenn ihr Quellcode und ihre Version veröffentlicht sind.
Häufige Fragen
Häufig gestellte Fragen
Warum pendelt der Roboter um die Linie?
Pendeln heißt meist: Proportionalverstärkung zu hoch, D-Dämpfung zu niedrig oder der Roboter fährt schneller, als es seine Sensoraktualisierung stützt. Senke zuerst die Geschwindigkeit, dann stimme P und D ab. Auf physischem Roboter ist ein langes delay() in der Schleife eine häufige versteckte Ursache: Die Totzeit macht den D-Anteil unwirksam, egal wie hoch du ihn setzt.
Wie viele Sensoren sollte ein Linienfolger nutzen?
Fünf Sensoren sind ein guter Start — sie zeigen Richtung und Betrag des Fehlers, und die gewichtete Positionsrechnung bleibt prüfbar. Drei Sensoren genügen bei langsamer Fahrt, Wettbewerbsroboter nutzen oft acht für feinere Positionsauflösung bei Tempo.
Warum verliert mein Linienfolger die Linie in scharfen Kurven?
Das Chassis fährt schneller, als der Sensorbalken die Kurve auflösen kann — die Linie verlässt das Array, bevor der Regler reagiert. Senke die Geschwindigkeit, verbreitere den Balken oder erhöhe die Sensorrate. Ein guter Regler nutzt zudem die letzte bekannte Linienrichtung weiter, wenn alle Sensoren die Spur verlieren, sodass er zur Linie zurückdreht statt geradeaus hinauszufahren.
Soll ich analoge oder digitale IR-Sensoren für Linienfolger nutzen?
Analoge Reflexionssensoren liefern einen kontinuierlichen Wert, mit dem du eine glatte gewichtete Linienposition berechnen und proportional lenken kannst. Digitale Sensoren melden nach interner Schwelle nur an oder aus — einfacher, aber mit gröberer Positionsinfo. Dieser Simulator modelliert den analogen Ansatz mit gewichteter Position.
Wie kalibriere ich das IR-Sensorarray?
Fahre die Sensoren vor dem Lauf über Linie und Untergrund und erfasse je Sensor Minimal- und Maximalwert; normiere Livemesswerte dann gegen diesen Bereich. Kalibrierung zählt, weil Sensorhöhe, Oberflächenreflexion und Umgebungslicht die Rohwerte ändern — ein unkalibriertes Array verzerrt die gewichtete Position.
Was sind gute Start-PID-Werte für einen Arduino-Linienfolger?
Behandle veröffentlichte Verstärkungen als Startpunkt, nicht als Kopierantwort: Motorverhalten, Sensorhöhe, Batteriespannung, Oberflächenreflexion und Schleifentiming ändern die Verstärkungen, die ein physischer Roboter braucht. Beginne nur proportional, erhöhe bis der Roboter sanfte Kurven mit leichtem Pendeln folgt, füge dann D zum Beruhigen hinzu und nur sehr wenig I, falls ein wiederholbarer Offset bleibt.
Weiterführende Literatur
Quellen
Maßgebliche Quellen, um tiefer einzusteigen als das begrenzte Lernmodell dieses Simulators.