Positionsschätzung · Verständlich erklärt

Der Kalman-Filter verständlich erklärt

Ein Lieferwagen weiß nicht genau, wo er ist: Das Satellitensignal springt, und die eigene Rechnung aus Tempo und Fahrzeit driftet mit der Zeit. Ein Kalman-Filter mischt beides und lässt die jeweils verlässlichere Quelle stärker zählen. Diese Seite erklärt das erst ohne Formeln, dann für Fachleute mit Modell, Formeln, Messwerten und Grenzen. Dazu gibt es eine Demo, ein Programm zum Ausprobieren im Browser.

Zuletzt aktualisiert:

Teil 1 · Für Einsteiger

Ein Wort unbekannt? Das Begriffsverzeichnis erklärt es in wenigen Sätzen.

Zwei unsichere Quellen für einen Ort

Stellen Sie sich einen Lieferwagen auf einer Landstraße vor. Das Satellitensignal (GPS) zeigt jede Sekunde einen Punkt auf der Karte. Der Punkt stimmt nie ganz: Er springt mal nach links, mal nach rechts, obwohl der Wagen geradeaus fährt. Solche zufälligen Schwankungen einer Messung heißen Rauschen.

Es gibt eine zweite Quelle, Ihre eigene Rechnung. Sie wissen, wo der Wagen vor einer Sekunde war und wie schnell er fuhr. Daraus folgt, wo er jetzt ungefähr sein müsste. Auch diese Vorhersage ist unsicher, denn der Fahrer kann bremsen oder Gas geben, und solche Fehler summieren sich von Sekunde zu Sekunde auf.

Ein Kalman-Filter ist ein Rechenverfahren, das beide Quellen zu einer Schätzung mischt. Er fragt jedes Mal, welche Quelle gerade verlässlicher ist, und lässt sie stärker zählen. In der Demo ist der Fehler der Schätzung kleiner als der des rohen GPS-Punkts; die Werte stehen im Fachteil.

Wie das Mischen funktioniert

Der Filter wiederholt zwei Schritte, Sekunde für Sekunde. Zuerst die Vorhersage: Aus Ort und Tempo der letzten Sekunde folgt, wo der Wagen jetzt sein müsste. Dabei wächst die Unsicherheit: der Bereich, in dem der Wagen mit hoher Wahrscheinlichkeit liegt. Er wird größer, weil der Wagen beschleunigen oder bremsen kann. Dann die Korrektur: Kommt ein GPS-Punkt, wird die Vorhersage ein Stück zum Punkt hin verschoben, und der Bereich schrumpft wieder.

Wie weit sie verschoben wird, hängt vom Verhältnis der beiden Unsicherheiten ab. Ist die Vorhersage unsicher und der Punkt genau, zählt der Punkt mehr. Ist die Vorhersage sicher und der Punkt wacklig, zählt die Vorhersage mehr. Dieses Gewicht rechnet der Filter in jeder Sekunde neu aus.

Fällt das GPS aus, etwa im Tunnel, gibt es nichts zu korrigieren. Der Filter rechnet dann nur mit der Vorhersage weiter, und sein Bereich wächst Sekunde für Sekunde. Er nennt also nicht nur einen Ort, sondern auch, wie weit man ihm glauben darf.

Was die Mischung bringt und was sie voraussetzt

Misst zusätzlich ein Sensor am Rad das Tempo, kennt der Filter eine weitere Information. In der Demo verringert schon das Mischen von GPS und Vorhersage den Fehler gegenüber dem rohen GPS-Punkt; mit dem Radsensor wird er noch kleiner. Beide Wirkungen hängen zusammen und lassen sich nicht sauber trennen. Im Tunnel trägt das gemessene Tempo die Position weiter.

Das Mischen klappt nur, wenn der Filter die Genauigkeit beider Quellen richtig einschätzt. Hält er die Vorhersage für sicherer oder die Messung für genauer, als sie ist, nennt er einen zu kleinen Bereich, und in der Demo liegt die Wahrheit dann häufiger außerhalb als angegeben. Hält er die Fahrt für unruhiger, als sie ist, bleibt seine Angabe ehrlich, aber die Schätzung wird ungenauer. Die Demo lässt Sie das einstellen.

Was Sie mitnehmen

Liefert Ihnen ein Anbieter eine Fahrzeugposition oder eine Ankunftszeit, fragen Sie: Nutzt das System neben dem GPS auch die bekannte Fahrbewegung und gewichtet beide nach ihrer Genauigkeit? Und sagt es, in welchem Bereich die Position liegen kann? Ein Hinweis im Betrieb: Springt die angezeigte Position von Sekunde zu Sekunde hin und her, obwohl das Fahrzeug gleichmäßig fährt, zeigt das System vermutlich den rohen Messpunkt. Das gilt, solange das Fahrzeug nicht abrupt bremst oder abbiegt und das Signal nur schwankt, statt um viele Meter auszureißen.

Wie ernst ist die Demo zu nehmen?

Die Demo ist stark vereinfacht: Die Fahrt entsteht genau nach den Regeln, die der Filter kennt, es gibt keine echten GPS-Spuren, und das Rauschen hat eine bekannte Größe. Sie zeigt, was das Verfahren unter richtigen Annahmen leistet, nicht wie es auf einer echten Straße abschneidet.

Hinweis: Alle Demos rechnen mit synthetischen oder frei verfügbaren Beispieldaten und laufen auf einem externen Anbieter (Datenschutz). Bitte geben Sie darin keine vertraulichen oder personenbezogenen Daten ein. Die Ergebnisse gelten für die jeweilige Demo-Instanz und lassen sich nicht ungeprüft auf reale Fälle übertragen; für darauf gestützte Entscheidungen übernehme ich keine Gewähr.

Teil 2 · Für Fachleute

Modell und Annahmen

Dieser Teil ist eigenständig lesbar. Er fasst die formale Beschreibung der Demo zusammen; die vollständige Fassung steht im Expander „📐 Mathematische Formulierung“ der Demo.

  • Zustand und Dynamik: \(x_k = (s_k, v_k)^\top\) aus Position und Geschwindigkeit, konstante Geschwindigkeit mit zufälliger Beschleunigung, Abstand \(\Delta t\), Prozessrauschen \(w_k \sim \mathcal N(0, Q)\) mit \(Q\) proportional zu \(q^2\).
  • Messungen: GPS misst die Position, \(z_k = s_k + \varepsilon_k\) mit \(\varepsilon_k \sim \mathcal N(0, \sigma_z^2)\), im Tunnel gar nicht; der Radsensor misst die Geschwindigkeit, \(y_k = v_k + \eta_k\) mit \(\eta_k \sim \mathcal N(0, \sigma_w^2)\). Beide werden nacheinander als skalare Messungen eingearbeitet (Joseph-Form); der Kern steht in kal_algorithm.py.
  • Die Wahrheit ist das Modell: Die Fahrt wird mit genau diesem Modell erzeugt. Die Demo prüft das Verfahren also unter richtigen Annahmen und zeigt dann, was passiert, wenn der Filter falsch eingestellt ist (Regler „Annahme zur Fahrunruhe“ und „Annahme zur Messvarianz“).
  • Experimente: Vier; die ersten drei rechnen auf Knopfdruck über je 40 feste Fahrten, das vierte (feste Verstärkung, Brücke zur exponentiellen Glättung) läuft sofort.

Die Formeln

Die Vorhersage schreibt die Schätzung mit der Dynamik fort und lässt die Kovarianz um das Prozessrauschen wachsen:

\[\hat x_{k|k-1} = F\hat x_{k-1}\]

\[P_{k|k-1} = F P_{k-1} F^\top + Q\]

Die Korrektur arbeitet je skalare Messung \(z = h^\top x + \varepsilon\) mit Varianz \(r\) und mischt Vorhersage und Messung über die Verstärkung \(K\):

\[S = h^\top P h + r,\quad K = P h / S,\quad \hat x \leftarrow \hat x + K(z - h^\top\hat x),\quad P \leftarrow (I - Kh^\top)P(I - Kh^\top)^\top + K r K^\top.\]

Die letzte Form (Joseph-Form) hält \(P\) symmetrisch und positiv. Das Gewicht der Messung \(K\) ist groß, wenn die Vorhersage unsicher (\(h^\top P h\) groß) und die Messung genau (\(r\) klein) ist, und klein im umgekehrten Fall. Das ist die Lesart „nach Verlässlichkeit mischen“; sie folgt aus der Formel und ist keine Aussage der README.

Ob der Filter ehrlich ist, misst das normierte Fehlerquadrat. Es hat bei ehrlichem Filter den Erwartungswert 2 (Zustandsdimension):

\[\mathrm{NEES}_k = (x_k - \hat x_k)^\top P_k^{-1}(x_k - \hat x_k)\]

Bei konstanten \(F, Q, r\) konvergiert die Kovarianz-Rekursion (Riccati-Gleichung) gegen einen festen Wert, und \(K_\infty\) wird ein festes Gewicht. Im Lokales-Niveau-Modell \(x_{k+1} = x_k + w_k\), \(z_k = x_k + \varepsilon_k\) mit \(q = \operatorname{Var}(w)/\operatorname{Var}(\varepsilon)\) folgt die einfache exponentielle Glättung mit dem Glättungsparameter

\[\alpha = (\sqrt{q^2 + 4q} - q)/2\]

Befunde

Alle Zahlen gelten für die Standardeinstellung der Demo (GPS 10 m, Fahrunruhe 0,3 m/s², Tunnel 20 s) über die 40 festen Fahrten; Abweichungen sind in der Zeile genannt. Nach dem Quelltext (kal_evaluation.py) sind Positionsfehler und Tunnelwerte Mediane, NEES und Abdeckung Mittelwerte über diese Fahrten; die README nennt pauschal „Median“. Die Demo rechnet jede Zahl in tests/test_claims.py nach.

FrageBefund
Was bringt der Filter gegen den Rohwert?Positionsfehler (RMSE): Rohwert 9,7 m, Filter nur mit GPS 4,9 m, mit GPS und Radsensor 1,6 m. Das Glätten allein halbiert den Fehler ungefähr; die zusätzliche Information des Radsensors senkt ihn danach weiter. Welcher Teil „der größere“ ist, hängt vom Maß (Meter oder Faktor) und von der Reihenfolge ab.
Ehrlichkeit bei richtigem Modell?Mittlere NEES über 150 Fahrten (Orakel-Test) 2,0 (Soll 2). Einzelne Fahrten streuen stark; die 40 festen ergeben 1,8.
Filter glaubt zehnmal weniger Prozessrauschen?Mittlere NEES 61, nur 80 % der Zeit liegt die Wahrheit im 95-%-Band.
Filter glaubt zehnmal weniger Messrauschen?Mittlere NEES 6,5, nur 59 % im Band.
Und zu große Annahmen?Ehrlich bleibt er (mittlere NEES 1,5), kostet aber Genauigkeit: Positionsfehler 2,3 m statt 1,6 m bei zehnmal zu großem Q. Für ein zu großes R nennt die README keine Zahl.
40 s Tunnel ohne RadsensorAm Tunnelende ist die Position im Median 49 m daneben, die angegebene Unsicherheit (Median, 1 Sigma) beträgt 57 m. Das Band wächst also mit dem Fehler; einen Test auf Ehrlichkeit (Abdeckung) nennt die README für den Tunnel nicht.
40 s Tunnel mit RadsensorAm Tunnelende 1,4 m Fehler (Median) bei 2,7 m angegebener Unsicherheit: die Geschwindigkeit trägt die Position.
Stationäre Verstärkung (Standard)Position 0,0315, Geschwindigkeit 0,0015. Im Lokales-Niveau-Modell ist α = (√(q²+4q) − q)/2: q = 0,01 → 0,0951, 0,1 → 0,2702, 1 → 0,6180.
Ankunftszeit bei 100 sStandardfahrt (Filter mit GPS und Radsensor), Zufalls-Seed 35: aus GPS-Rohwerten um 2,1 s daneben, aus dem Filter um 0,02 s. Eine einzelne Fahrt, keine Aussage über die Streuung.

Grenzen

  • Die Wahrheit ist das Modell: Die Fahrt wird mit dem Modell des Filters erzeugt. Das zeigt, was das Verfahren unter richtigen Annahmen leistet, nicht, wie es auf echten GPS-Spuren abschneidet (kein echter Datensatz).
  • Zwei Effekte sind vermischt, wo der Radsensor mitläuft: Der Gewinn von 9,7 auf 1,6 m stammt aus Glätten über die Zeit und Sensorfusion zugleich; die getrennte Linie „nur GPS“ zeigt den ersten Teil. Dass der Radsensor den größeren Teil beiträgt, gilt nur im Verhältnis (Faktor), nicht in Metern.
  • Eine einzelne Fahrt ist kein Befund: NEES und Abdeckung einer Fahrt schwanken stark; belastbar sind nur die Mittel und Mediane über die 40 festen Fahrten.
  • Die Standardspur ist gutmütig: Ihre NEES liegt unter 2, sie wirkt „zu vorsichtig“. Das ist Zufall dieser Spur, kein Befund; die Orakel-Prüfung über 150 Fahrten ergibt 2,0.
  • Ankunftszeit: Sie ist nur gerechnet, wo die Geschwindigkeit über 1 m/s liegt; das Ziel ist eine feste Strecke, kein Straßennetz.
  • Rauschen ist gaußsch, linear, bekannt: Ausreißer, Kurven, mehrere Hypothesen und mehrere Fahrzeuge sind nicht abgedeckt (Tabelle „Wo die Annahmen enden“ in der App). Eine automatische Einstellung von Q und R aus den Daten gibt es nicht, weil die Demo gerade zeigt, was bei falscher Einstellung passiert.

Quellen

  • Kalman, R. E. (1960): A New Approach to Linear Filtering and Prediction Problems. Transactions of the ASME – Journal of Basic Engineering 82 (Series D), 35–45.
  • Bar-Shalom, Y., Li, X. R., Kirubarajan, T. (2001): Estimation with Applications to Tracking and Navigation. Wiley (Standardwerk zur Zustandsschätzung).
  • Quelltext, Messreihen und Tests der Demo: github.com/sebastian-hanisch/kalman-filter-demo.

Die genannten Werke wurden für diese Seite nicht nachgeschlagen; die Literaturhinweise stammen aus der Demo (Expander „Mathematische Formulierung“). Die Lesart der Verstärkung als Gewicht nach Verlässlichkeit ist eine Herleitung aus der Korrekturformel, kein Zitat aus der README.