Wahrnehmung -- was Sensoren wirklich liefern
Dritter Teil der Robotik-Serie. Nach der Act-Phase ist die Sense-Phase dran -- die, in der die meisten Illusionen sterben.
Aus der Datenblatt-Perspektive ist die Sache einfach: Der Ultraschallsensor misst Abstand, der Encoder misst Drehung, die IMU misst Lage. Steckt man die Teile zusammen, merkt man schnell, dass diese Sätze alle ein bisschen falsch sind. Ein Sensor misst nämlich nie die Größe, die im Programm gebraucht wird -- er misst einen physikalischen Effekt, der mit ihr zusammenhängt, und liefert dazu einen Zahlenwert mit Rauschen, Verzögerung und blinden Flecken.
Dieser Artikel geht deshalb weniger nach Bauteilen vor als nach der Frage: Was steht in dieser Zahl wirklich drin -- und was nicht?
🔧 Zum Ausprobieren: Bezugsquellen für alle hier besprochenen Sensoren -- eigener Shop wie Fremdanbieter -- stehen am Ende des Artikels.
Lern-Hinweis: Sensorik ist der Teil der Robotik, bei dem ich am meisten überrascht wurde. Die Messketten selbst sind vertrautes Terrain, die Frage, wie viel Weltwissen am Ende einer solchen Kette wirklich ankommt, war für mich neu.
Die Messkette -- vier Übersetzungen, vier Fehlerquellen
Zwischen der Welt und der Variablen im Programm liegen immer mehrere Übersetzungsschritte, und jeder davon verliert Information:
- Physikalischer Effekt. Die interessierende Größe wirkt auf etwas Messbares -- Schall wird reflektiert, ein Magnetfeld lenkt Ladungsträger ab, eine Feder-Masse-Struktur verbiegt sich.
- Elektrisches Signal. Der Effekt wird in Spannung, Zeit oder Impulsfolge übersetzt. Hier kommen Verstärkerrauschen, Offset und Temperaturgang dazu.
- Rohwert. Der Mikrocontroller macht daraus eine Zahl -- ADC-Schritte, Mikrosekunden, gezählte Flanken. Ab hier ist die Auflösung endgültig begrenzt.
- Interpretation. Erst eine Umrechnung im Code macht daraus "Abstand in cm". Sie steckt voller Annahmen: Schallgeschwindigkeit, Reflexionsgrad, Radumfang, Kalibrierkurve.
Jede Stufe der Kette übersetzt -- und jede verliert dabei etwas. Was am Ende als „Abstand = 42 cm" im Code steht, ist das Ergebnis von vier Annahmen hintereinander.
Die praktische Konsequenz: Der Fehler eines Sensors steckt selten im Bauteil, sondern meist in Schritt 4. Ein Ultraschallsensor, der bei 30 °C zu kurze Abstände meldet, ist nicht defekt -- im Code steht nur eine Schallgeschwindigkeit für 20 °C.
Für die Beurteilung eines Sensors lohnen ein paar Kenngrößen, die im Datenblatt oft nebeneinander stehen und gern verwechselt werden:
| Kenngröße | Was sie sagt | Warum sie zählt |
|---|---|---|
| Messbereich | von--bis, plus Totzone am unteren Ende | unterhalb der Totzone lügt der Sensor, statt zu schweigen |
| Auflösung | kleinste unterscheidbare Änderung | begrenzt, wie fein geregelt werden kann |
| Genauigkeit (engl. accuracy) | systematische Abweichung vom wahren Wert | lässt sich kalibrieren |
| Wiederholpräzision (engl. precision) | Streuung bei gleicher Situation | lässt sich nur filtern, nicht kalibrieren |
| Messrate / Latenz | wie oft, wie schnell | bestimmt mit, wie schnell die Regelschleife laufen darf |
| Blickfeld | Kegel, Punkt, Fläche | entscheidet, was der Sensor gar nicht sehen kann |
Genauigkeit und Präzision sind dabei wirklich zwei Dinge: Ein Sensor, der zehnmal hintereinander 31,0 cm misst, obwohl es 25 cm sind, ist präzise und ungenau -- den kann man geradeziehen. Einer, der zwischen 20 und 30 cm springt, während sich nichts bewegt, ist im Mittel genau und unpräzise -- da hilft nur filtern.
Ultraschall -- ein Abstand, aber keine Richtung
Der HC-SR04 ist der Standardsensor am Einsteigerroboter, und er ist ein gutes Beispiel dafür, wie viel Interpretation in einem einzigen Messwert steckt. Gemessen wird nicht Abstand, sondern Zeit: Der Sensor sendet einen Ultraschallburst und misst die Laufzeit \(t\) bis zum Echo. Mit der Schallgeschwindigkeit \(c\) (in Luft rund 343 m/s bei 20 °C) folgt der Abstand \(d\) aus
-- halbiert, weil der Schall Hin- und Rückweg zurücklegt. Die Schallgeschwindigkeit hängt allerdings von der Temperatur \(T\) ab, näherungsweise mit \(c \approx (331{,}3 + 0{,}606 \cdot T/^\circ\mathrm{C})\) m/s. Zwischen 0 °C und 30 °C sind das gut 5 % Unterschied -- bei 2 m Messabstand also rund 10 cm. Wer im Winter draußen misst und im Sommer kalibriert hat, sucht den Fehler garantiert im falschen Teil des Programms.
Interessanter ist aber, was der Sensor nicht sagt:
Drei Szenen, die der Sensor nicht unterscheiden kann. Er meldet immer nur eine Zahl: die Entfernung zum nächsten Reflektor irgendwo im Kegel.
- Keine Richtung. Der Schall geht als Kegel mit etwa 15° bis 30° Öffnungswinkel hinaus. Alles, was in diesem Kegel liegt, kann das Echo erzeugen. "30 cm" heißt: irgendwo auf einer Kugelschale im Kegel ist etwas. Ein Tischbein links und ein Karton geradeaus ergeben denselben Messwert.
- Nur der nächste Reflektor. Zurückgemeldet wird das erste Echo. Was dahinter liegt, existiert für den Sensor nicht.
- Schräge Flächen verschwinden. Trifft der Schall unter einem flachen Winkel auf eine glatte Wand, wird er weggespiegelt statt zurückgeworfen. Der Sensor meldet dann "frei" -- der gefährlichste Fehler, den ein Abstandssensor machen kann. Weiche Materialien (Vorhänge, Polster) schlucken den Schall und wirken ähnlich.
- Er braucht Zeit. Bei 4 m Reichweite ist das Echo rund 23 ms unterwegs, dazu kommt Nachhallzeit. Mehr als etwa 20 Messungen pro Sekunde sind nicht drin -- und wenn die Messung im Code blockierend wartet (
pulseIn), steht die gesamte Sense-Think-Act-Schleife so lange still.
Das ist kein Mangel des Bauteils, sondern die Natur der Sache. Der übliche Umgang damit: den Sensor auf einem Servo schwenken (mehrere Kegel statt einem), mehrere Sensoren versetzt montieren -- oder akzeptieren, dass der Roboter grob ausweicht statt präzise zu navigieren.
Infrarot -- billig, schnell und tückisch
Infrarotsensoren gibt es in zwei Bauarten, die man nicht verwechseln sollte, weil sie völlig verschiedene Dinge messen.
Die Reflexlichtschranke (z. B. TCRT5000, das Herz jedes Linienfolgers) sendet IR-Licht aus und misst, wie viel zurückkommt. Sie misst damit streng genommen Helligkeit, nicht Abstand und nicht Farbe. Der Rückgabewert hängt gleichzeitig ab vom Reflexionsgrad der Oberfläche, vom Abstand, vom Anstellwinkel und vom Umgebungslicht. Das ist genau der Grund, warum ein Linienfolger, der zu Hause perfekt fährt, im Wohnzimmer der Großeltern versagt: anderer Bodenbelag, andere Deckenlampe. Praktisch löst man das mit Kalibrierung beim Start (einmal über Linie und Untergrund fahren, Minimum und Maximum merken) statt mit fest verdrahteten Schwellwerten.
Der Triangulationssensor (Sharp GP2Y-Familie) ist die deutlich cleverere Bauart: Er wirft einen IR-Punkt und schaut mit einer kleinen Zeile, unter welchem Winkel der reflektierte Punkt eintrifft. Weil der Winkel und nicht die Helligkeit ausgewertet wird, ist er weitgehend unabhängig von der Oberflächenfarbe. Dafür hat er eine Eigenheit, die man kennen muss:
Die Falle: Unterhalb des Mindestabstands läuft die Kennlinie zurück. Dieselbe Ausgangsspannung bedeutet dann entweder „30 cm entfernt" oder „direkt vor der Nase" -- und die Umrechnung im Code entscheidet sich meist für die falsche Variante.
Die Kennlinie ist nicht monoton: Unterhalb des Mindestabstands (je nach Typ 4 bis 20 cm) sinkt die Ausgangsspannung wieder. Ein Hindernis direkt vor dem Sensor liefert damit denselben Wert wie eines in komfortabler Entfernung -- und die naive Umrechnung meldet "alles frei", während der Roboter schon fast anstößt. Abhilfe: den Sensor so montieren, dass der Mindestabstand baulich gar nicht unterschritten werden kann, oder einen Taster als Rückfallebene ergänzen.
Beiden IR-Bauarten gemeinsam: Sie sind schnell (Millisekunden statt Zehntelsekunden) und schmal im Blickfeld -- also fast das Gegenteil des Ultraschallsensors. Genau deshalb ergänzen sich die beiden gut.
Encoder -- die einzige Rückmeldung über die eigene Bewegung
Alle bisherigen Sensoren schauen nach außen. Der Encoder schaut nach innen: Er zählt, wie weit sich ein Rad gedreht hat. Damit ist er der Baustein, der aus der offenen Steuerung des letzten Artikels eine echte Regelung macht.
Üblich sind zwei Bauformen -- optisch (Schlitzscheibe plus Gabellichtschranke) oder magnetisch (Hall-Sensor plus Magnetring). Beide liefern dasselbe: eine Impulsfolge. Aus der Zahl der Impulse \(N\) pro Radumdrehung und dem Radradius \(r\) folgt der Weg \(\Delta s\) pro gezähltem Impuls:
Bei \(N = 20\) Impulsen (typische Schlitzscheibe) und \(r = 32{,}5\) mm sind das gut 10 mm pro Impuls -- die Wegauflösung des Roboters ist also rund 1 cm. Feiner geht es mit Encodern direkt auf der Motorwelle, vor dem Getriebe: Bei einer Untersetzung von 1:48 wird aus derselben Scheibe eine Auflösung von 0,2 mm.
Zwei Details, die den Unterschied machen:
- Ein einzelner Kanal kennt keine Richtung. Er zählt Impulse, egal wohin sich das Rad dreht. Für Richtungserkennung braucht es zwei um 90° versetzte Kanäle (Quadratur): Aus der Reihenfolge der Flanken folgt die Drehrichtung, und nebenbei vervierfacht sich die Auflösung, wenn man alle Flanken beider Kanäle zählt.
- Der Encoder misst das Rad, nicht das Fahrzeug. Dreht das Rad durch, meldet er brav Vorwärtsfahrt. Rutscht der Roboter über glatten Boden, meldet er gar nichts. Dieser Unterschied zwischen "gedreht" und "gefahren" ist die Wurzel des Odometrie-Problems in Teil 6.
Quadratur: Zwei versetzte Kanäle machen aus einem Zähler einen Zähler mit Vorzeichen. Bei jeder steigenden Flanke von A verrät der Pegel von B, in welche Richtung sich das Rad dreht.
IMU -- drei Sensoren, drei verschiedene Lügen
Eine IMU (engl. Inertial Measurement Unit, Inertialmesseinheit, z. B. MPU-6050) vereint zwei bis drei Sensoren in einem Gehäuse, und es lohnt sich, ihre Eigenheiten getrennt anzusehen, weil sie sich fast perfekt ergänzen:
| Teilsensor | Misst | Typischer Fehler |
|---|---|---|
| Beschleunigungsmesser | Beschleunigung inkl. Erdbeschleunigung \(g\) | reagiert auf jede Vibration; im Stand brauchbar, in Fahrt verrauscht |
| Drehratensensor (Gyroskop) | Winkelgeschwindigkeit \(\omega\) | kurzfristig sehr sauber, driftet beim Integrieren weg |
| Magnetometer | Erdmagnetfeld (Kompass) | wird von Motoren, Lautsprechern und Stahlmöbeln verbogen |
Der entscheidende Punkt: Keiner der drei misst direkt den Winkel, den man eigentlich will. Der Drehratensensor liefert die Winkelgeschwindigkeit \(\omega\); die Orientierung \(\theta\) folgt daraus nur durch Integration über die Zeit,
und weil jeder noch so kleine Offset mitintegriert wird, wandert das Ergebnis. Ein Gyroskop mit 1°/s Nullpunktfehler ist nach einer Minute um 60° daneben. Der Beschleunigungsmesser hingegen kennt über die Richtung der Erdbeschleunigung \(g\) eine absolute Referenz, die nicht driftet -- aber sie verschwindet im Rauschen, sobald der Roboter fährt.
Damit steht die Grundidee der Sensorfusion im Raum, und sie ist erstaunlich simpel: Man nimmt vom Gyroskop das schnelle Kurzzeitverhalten und vom Beschleunigungsmesser die langsame, driftfreie Referenz. In der einfachsten Form ist das ein Komplementärfilter:
mit dem Gewichtungsfaktor \(\alpha\) (typisch 0,95 bis 0,98), der Abtastzeit \(\Delta t\), dem Index \(k\) für den aktuellen Abtastschritt und dem aus der Erdbeschleunigung berechneten Winkel \(\theta_{\mathrm{acc}}\). Zwei Sensoren mit komplementären Schwächen ergeben zusammen etwas Brauchbares -- das ist im Kern schon der Gedanke, den später der Kalman-Filter formal sauber macht (Teil 6).
Rauschen -- filtern kostet immer Zeit
Ein realer Messwert schwankt, auch wenn sich nichts bewegt. Dagegen hilft Filtern, und die drei üblichen Verfahren haben deutlich verschiedene Charaktere:
- Gleitender Mittelwert über die letzten \(n\) Werte: glättet gut, ist einfach -- aber ein einzelner Ausreißer verschiebt das Ergebnis, und der Wert hinkt um etwa \(n/2\) Abtastungen hinterher.
- Medianfilter über die letzten (ungerade vielen) Werte: nimmt den mittleren Wert der sortierten Liste. Er ignoriert einzelne Ausreißer komplett -- genau das richtige Mittel gegen Ultraschall-Fehlmessungen, die typisch als vereinzelte Ausrutscher auftreten.
- Exponentieller Tiefpass (engl. EMA): \(y_k = \alpha\,x_k + (1-\alpha)\,y_{k-1}\) mit dem Messwert \(x_k\), dem gefilterten Wert \(y_k\) und dem Glättungsfaktor \(\alpha\) zwischen 0 und 1. Braucht nur einen gespeicherten Wert statt eines ganzen Puffers und ist damit der Standard auf kleinen Controllern.
Dieselben Rohdaten, drei Filter. Der Median bügelt die Ausreißer weg, ohne den Sprung stark zu verschleifen; der Tiefpass glättet am ruhigsten und kommt am spätesten an.
Wichtig ist die Einsicht dahinter: Jede Glättung erkauft man mit Verzögerung. Ein stark gefilterter Abstandswert ist ruhig und alt. Weil diese Verzögerung direkt in der Regelschleife landet, kann zu viel Filterung einen Regler zum Schwingen bringen -- eine der unangenehmeren Kopplungen zwischen Sense und Think, und ein Thema für den nächsten Teil.
Was der Roboter am Ende weiß
Damit lässt sich die Eingangsfrage beantworten. Ein Messwert ist kein Weltzustand, sondern eine Einschränkung: Er schließt viele Möglichkeiten aus und lässt viele übrig. "42 cm" heißt nicht "das Hindernis ist 42 cm entfernt", sondern "irgendwo in meinem Kegel gibt es einen Reflektor in etwa 42 cm Entfernung, sofern die Schallgeschwindigkeit stimmt und die Fläche nicht schräg steht".
Aus dieser Sicht folgen die drei Standardstrategien, die den Rest der Serie prägen:
- Mehrere Sensoren mit komplementären Schwächen kombinieren -- Ultraschall (breit, langsam, blind für Schräges) plus IR (schmal, schnell, farbabhängig) plus Taster (dumm, aber ehrlich).
- Über die Zeit integrieren statt einzelne Messwerte zu glauben -- filtern, mitteln, und später: eine Karte aufbauen.
- Bewegung nutzen. Ein zweiter Messwert von einer anderen Position sagt mehr als zwei Messwerte von derselben. Genau das macht Lokalisierung überhaupt erst möglich.
Was bleibt hängen
- Zwischen Welt und Variable liegen vier Übersetzungen. Die meisten "Sensorfehler" entstehen in der letzten -- in den Annahmen der Umrechnung.
- Genauigkeit lässt sich kalibrieren, Präzision nur filtern. Zwei Probleme, zwei Werkzeuge.
- Ultraschall liefert eine Entfernung ohne Richtung, ist blind für schräge und weiche Flächen und begrenzt mit ~20 Messungen pro Sekunde die Zykluszeit.
- IR ist schnell und schmal: die Reflexlichtschranke misst Helligkeit (kalibrieren!), der Triangulationssensor hat unterhalb des Mindestabstands eine doppeldeutige Kennlinie.
- Encoder sind die einzige Rückmeldung über die eigene Bewegung -- aber sie messen das Rad, nicht den Boden.
- IMU-Teilsensoren ergänzen sich: Gyroskop kurzfristig gut und driftend, Beschleunigungsmesser langfristig richtig und verrauscht. Der Komplementärfilter ist Sensorfusion in zwei Zeilen.
- Filtern kostet Latenz -- und Latenz landet direkt in der Regelschleife.
Bezugsquellen
Die Sensoren aus diesem Artikel zum Nachbauen -- jeweils mit unserem eigenen Shop und mindestens einer unabhängigen Quelle:
- Ultraschall: Grove Ultraschall-Ranger (Werbung) · Reichelt: HC-SR04 · Seeed-Wiki zum Ranger
- Radencoder (magnetisch, für Micro-Getriebemotoren): blueberrye.io (Werbung) · Pololu #2598
- IR-Reflex / Proximity (38 kHz moduliert, unempfindlich gegen Fremdlicht): blueberrye.io (Werbung) · Pololu #2579
- Sharp-Triangulation: blueberrye.io (Werbung) · Pololu #1132 — Achtung, das ist die digitale Variante GP2Y0D805Z0F mit fester 5-cm-Schwelle. Die doppeldeutige Analogkennlinie aus dem Bild oben gehört zur GP2Y0A-Familie; wer die sehen will, braucht einen analogen Typ.
- Time-of-Flight als moderne Alternative zum Ultraschall: VL6180X (Werbung) · Pololu #2489
- IMU (6 Achsen, Beschleunigung + Drehrate): Grove BMI088 (Werbung) · Reichelt: MPU-6050 — der MPU-6050 ist der Klassiker fürs Steckbrett, der BMI088 die deutlich driftärmere Wahl.
Als Nächstes kommt die Think-Phase: Wie wird aus einem Messwert eine Stellgröße? Der Weg führt vom harten Schwellwert (Bang-Bang) über den P-Regler bis zum PID -- und dorthin, wo die Verzögerung aus diesem Artikel zum echten Problem wird. (folgt)
Inhalt
- Wahrnehmung -- was Sensoren wirklich liefern
- Die Messkette -- vier Übersetzungen, vier Fehlerquellen
- Ultraschall -- ein Abstand, aber keine Richtung
- Infrarot -- billig, schnell und tückisch
- Encoder -- die einzige Rückmeldung über die eigene Bewegung
- IMU -- drei Sensoren, drei verschiedene Lügen
- Rauschen -- filtern kostet immer Zeit
- Was der Roboter am Ende weiß
- Was bleibt hängen
- Bezugsquellen