Interaktiver SimulatorEinsteiger

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
Technisches Schema: Linienfolger-Simulator: Roboter im Browser abstimmenSENSOR ERROR

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.

Browser native
A top-down line-follower robot simulator. Use the controls below to run the simulation or read the complete algorithm and theory after this lab.

Bright nodes are sensors currently detecting the track. The lavender heading line shows steering output. Drawing pauses the robot automatically.

Simulation

Paused. Press Start or Step to begin.

Robot geometry
PID calibration
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.

Balkendiagramm fünf Reflexionssensoren über dem Roboterbalken. Die Linie liegt rechts der Mitte, die rechten Sensoren lesen also am stärksten. Eine gestrichelte Linie markiert die Balkenmitte (Fehler null), eine durchgezogene die reflexionsgewichtete Position bei plus 0,69, den berechneten Lenkfehler.
Der gewichtete Mittelwert der Sensormesswerte ergibt eine glatte Linienposition: Hier liegt die Linie rechts der Mitte, der Fehler ist also positiv, und der Regler lenkt zurück auf null. SVG herunterladen

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

  1. Jeden Sensor in festem Intervall abtasten.
  2. Gewichtete Linienposition berechnen und um die Mitte normieren.
  3. Letzte beobachtete Linienrichtung weiter nutzen, wenn alle Sensoren die Spur verlieren.
  4. Integral- und Differenzialanteil mit demselben festen Zeitschritt aktualisieren.
  5. 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.

Blockdiagramm der Linienfolger-Verdrahtung. Ein IR-Sensorarray speist Analogeingänge eines Arduino, der Arduino sendet PWM- und Richtungssignale an einen Motortreiber, und der Motortreiber versorgt die Motoren. Eine separate Batterie mit Regler versorgt den Arduino.
Signal fließt von links nach rechts; Motorstrom kommt aus separater geregelter Versorgung, nie durch den Logikregler des Controllers. SVG herunterladen

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.