Kalman-Filter anhand eines einfachen Radar-Beispiels verstehen
(kalmanfilter.net)- Der Kalman-Filter ist ein optimaler Zustandsschätzalgorithmus, der den Zustand eines Systems in verrauschten Umgebungen schätzt und die Zukunft vorhersagt
- Am Beispiel eines Flugzeug-Tracking-Radars wird erklärt, wie durch die Nutzung von Messwerten für Entfernung und Geschwindigkeit die Genauigkeit durch wiederholte Vorhersage- und Update-Schritte erhöht wird
- In jedem Schritt werden Zustandsvektor, Kovarianzmatrix und Kalman-Gewinn (Kalman Gain) berechnet, um Messwerte und Vorhersagen gewichtet zu kombinieren
- Unter gleichzeitiger Berücksichtigung von Messunsicherheit und Modellunsicherheit wird numerisch gezeigt, dass der Schätzfehler (die Unsicherheit) im Laufe der Zeit abnimmt
- Durch ein intuitives Zahlenbeispiel und schrittweise Berechnungen wird ein verständnisbasierter Zugang vermittelt, mit dem man den Filter selbst entwerfen und implementieren kann
Einführung in den Kalman-Filter
-
Der Kalman-Filter ist ein Zustandsschätzalgorithmus, der den Zustand eines Systems in Umgebungen mit Unsicherheiten wie Messrauschen oder externen Einflüssen schätzt und vorhersagt
- Er wird als zentrales Werkzeug in vielen Bereichen eingesetzt, etwa bei Objektverfolgung, Navigation, Robotik und Regelung
- Zum Beispiel kann er verwendet werden, um Rauschen in Mausbewegungen zu reduzieren und so flüssigere Bewegungen zu erhalten, Trends in Finanzdaten zu erkennen oder Wettervorhersagen zu unterstützen
- Es wird darauf hingewiesen, dass viele Lehrmaterialien sich stark auf mathematische Herleitungen konzentrieren und praktische Beispiele fehlen; dieses Material bietet daher eine intuitive Erklärung mit Fokus auf Zahlenbeispiele
- Auch Fälle, in denen ein falsch entworfener Filter beim Tracking versagt, werden behandelt, ebenso wie Methoden zu deren Korrektur
- Ziel ist es, ein Verständnis aufzubauen, mit dem Leserinnen und Leser den Kalman-Filter selbst entwerfen und implementieren können
Lernpfad
- Einseitige Übersicht: Führt die Kernkonzepte und wichtigsten Formeln knapp ein und setzt nur Grundkenntnisse in Statistik und linearer Algebra voraus
- Kostenloses Web-Tutorial: Ein Online-Tutorial mit schrittweisen Zahlenbeispielen zum Aufbau von Intuition, ohne erforderliche Vorkenntnisse
- Kalman Filter from the Ground Up (Buch): 14 vollständige Zahlenbeispiele, nichtlineare Filter (Extended/Unscented) und Sensorfusion, inklusive Python- und MATLAB-Code
Warum Vorhersage nötig ist
- Anhand des Beispiels eines Flugzeug-Tracking-Radars wird die Notwendigkeit von Zustandsschätzung und Vorhersage erklärt
- Der Systemzustand ist die Position des Flugzeugs (Entfernung (r)); das Radar berechnet die Entfernung durch Messung der Reflexionszeit eines Pulses
- Die Geschwindigkeit (v) kann über den Doppler-Effekt gemessen werden
- Die Vorhersage der Position nach einem festen Zeitintervall (\Delta t) erfolgt über ein dynamisches Modell
- Beispiel: (r_{t_1} = r_{t_0} + v \cdot \Delta t)
- (\Delta t = 5s), (r_{t_0}=10,000m), (v=200m/s) → (r_{t_1}=11,000m)
- In realen Umgebungen gibt es Messrauschen (Measurement Noise) und Modellunsicherheit (Process Noise)
- Selbst wenn mehrere Radare gleichzeitig messen, unterscheiden sich die Ergebnisse leicht
- Durch äußere Einflüsse wie Wind kann die Annahme konstanter Geschwindigkeit verletzt werden
- Der Kalman-Filter führt gleichzeitig aktuelle Zustandsschätzung und Vorhersage zukünftiger Zustände durch und liefert zusammen mit jeder Schätzung auch deren Unsicherheit (Varianz)
- Ein optimaler Algorithmus, der die Unsicherheit der Zustandsschätzung minimiert
Kalman-Filter-Beispiel
-
Ein eindimensionales Radar misst die Entfernung (r) und Geschwindigkeit (v) eines Flugzeugs
- Zustandsvektor (\boldsymbol{x} = [r, v]^T)
- Das System wird mithilfe von Vektoren und Matrizen beschrieben
-
Iteration 0 — Initialisierung und Vorhersage
-
Initialisierung
- Der Filter wird mit dem ersten Messwert initialisiert (\boldsymbol{z}_0 = [10{,}000, 200]^T)
- Messunsicherheit (Standardabweichung): Entfernung 4m, Geschwindigkeit 0.5m/s (\boldsymbol{R}_0 = \begin{bmatrix}16 & 0 \ 0 & 0.25\end{bmatrix})
- Anfangsschätzung des Zustands (\hat{\boldsymbol{x}}_{0,0} = \boldsymbol{z}_0)
- Anfangskovarianz (\boldsymbol{P}_{0,0} = \boldsymbol{R}_0)
-
Vorhersageschritt
- Zeitintervall (\Delta t = 5s)
- Zustandsübergangsmatrix (\boldsymbol{F} = \begin{bmatrix}1 & 5 \ 0 & 1\end{bmatrix})
- Vorhergesagter Zustand (\hat{\boldsymbol{x}}{1,0} = \boldsymbol{F}\hat{\boldsymbol{x}}{0,0} = [11{,}000, 200]^T)
- Kovarianzvorhersage (ohne Process Noise): (\boldsymbol{P}{1,0} = \boldsymbol{F}\boldsymbol{P}{0,0}\boldsymbol{F}^T = \begin{bmatrix}22.25 & 1.25 \ 1.25 & 0.25\end{bmatrix})
- Hinzufügen von Process Noise ((\sigma_a = 0.2m/s^2)): (\boldsymbol{Q} = \begin{bmatrix}6.25 & 2.5 \ 2.5 & 1\end{bmatrix})
- Endgültige vorhergesagte Kovarianz: (\boldsymbol{P}_{1,0} = \begin{bmatrix}28.5 & 3.75 \ 3.75 & 1.25\end{bmatrix})
-
Zusammenfassung von Iteration 0
- Mit der ersten Messung werden Zustand und Kovarianz initialisiert
- Mithilfe des Zustandsübergangsmodells werden der nächste Zustand und seine Unsicherheit vorhergesagt
- Vorhersageformeln
- Zustandsvorhersage: (\hat{\boldsymbol{x}}{n+1,n} = \boldsymbol{F}\hat{\boldsymbol{x}}{n,n} + \boldsymbol{G}\boldsymbol{u}_n)
- Kovarianzvorhersage: (\boldsymbol{P}{n+1,n} = \boldsymbol{F}\boldsymbol{P}{n,n}\boldsymbol{F}^T + \boldsymbol{Q})
-
Iteration 1 — Update und Vorhersage
-
Filter-Update
- Zweite Messung: (\boldsymbol{z}_1 = [11{,}020, 202]^T)
- Erhöhte Messunsicherheit (Standardabweichung: Entfernung 6m, Geschwindigkeit 1.5m/s) (\boldsymbol{R}_1 = \begin{bmatrix}36 & 0 \ 0 & 2.25\end{bmatrix})
- Im Vergleich zur vorhergesagten Kovarianz (\boldsymbol{P}_{1,0}) ist die Vorhersageunsicherheit kleiner
- Der Kalman-Filter kombiniert Messung und Vorhersage als gewichteten Mittelwert
- Gewichtung (K_1): Kalman Gain
- Formel zur Zustandsaktualisierung: (\hat{\boldsymbol{x}}{1,1} = \hat{\boldsymbol{x}}{1,0} + \boldsymbol{K}_1(\boldsymbol{z}1 - \boldsymbol{H}\hat{\boldsymbol{x}}{1,0}))
- Beobachtungsmatrix (\boldsymbol{H} = \boldsymbol{I})
- Berechnung des Kalman Gain: (\boldsymbol{K}1 = \boldsymbol{P}{1,0}\boldsymbol{H}^T(\boldsymbol{H}\boldsymbol{P}_{1,0}\boldsymbol{H}^T + \boldsymbol{R}_1)^{-1}) Ergebnis: (\boldsymbol{K}_1 = \begin{bmatrix}0.4048 & 0.6377 \ 0.0399 & 0.3144\end{bmatrix})
- Innovation: (\boldsymbol{z}1 - \hat{\boldsymbol{x}}{1,0} = [20, 2]^T)
- Korrekturwert: (\boldsymbol{K}_1[20, 2]^T = [9.37, 1.43]^T)
- Aktualisierter Zustand: (\hat{\boldsymbol{x}}_{1,1} = [11{,}009.37, 201.43]^T)
-
Kovarianz-Update
- Es wird die vereinfachte Form verwendet: (\boldsymbol{P}_{1,1} = (\boldsymbol{I} - \boldsymbol{K}1)\boldsymbol{P}{1,0})
- Ergebnis: (\boldsymbol{P}_{1,1} = \begin{bmatrix}14.57 & 1.43 \ 1.43 & 0.71\end{bmatrix})
- Nach dem Update ist die Unsicherheit kleiner als sowohl die Vorhersage- als auch die Messunsicherheit → Wenn Messung und Vorhersage kombiniert werden, nimmt die Unsicherheit immer ab
-
Vorhersageschritt
- Vorhersage für den nächsten Zeitpunkt (t_2)
- Zustandsvorhersage: (\hat{\boldsymbol{x}}{2,1} = \boldsymbol{F}\hat{\boldsymbol{x}}{1,1} = [12{,}016.5, 201.43]^T)
- Kovarianzvorhersage: (\boldsymbol{P}{2,1} = \boldsymbol{F}\boldsymbol{P}{1,1}\boldsymbol{F}^T + \boldsymbol{Q} = \begin{bmatrix}52.86 & 7.47 \ 7.47 & 1.71\end{bmatrix})
- Wenn mit der Zeit keine Messung erfolgt, steigt die Unsicherheit wieder an
- Vorhersage für den nächsten Zeitpunkt (t_2)
-
Zusammenfassung von Iteration 1
- Update-Schritt: Vorhersage und Messung werden über den Kalman Gain kombiniert
- Vorhersageschritt: Der aktualisierte Zustand wird an den nächsten Zeitpunkt weitergegeben
- Wichtige Formeln
- Zustandsaktualisierung: (\hat{\boldsymbol{x}}{n,n} = \hat{\boldsymbol{x}}{n,n-1} + \boldsymbol{K}_n(\boldsymbol{z}n - \boldsymbol{H}\hat{\boldsymbol{x}}{n,n-1}))
- Kovarianz-Update (Joseph-Form): (\boldsymbol{P}_{n,n} = (\boldsymbol{I} - \boldsymbol{K}n\boldsymbol{H})\boldsymbol{P}{n,n-1}(\boldsymbol{I} - \boldsymbol{K}_n\boldsymbol{H})^T + \boldsymbol{K}_n\boldsymbol{R}_n\boldsymbol{K}_n^T)
- Kalman Gain: (\boldsymbol{K}n = \boldsymbol{P}{n,n-1}\boldsymbol{H}^T(\boldsymbol{H}\boldsymbol{P}_{n,n-1}\boldsymbol{H}^T + \boldsymbol{R}_n)^{-1})
Zusammenfassung des Beispiels
- Die drei Schritte des Kalman-Filters: Initialisierung → Vorhersage → Update
- Anschließend wird die Vorhersage-Update-Schleife wiederholt ausgeführt
- Mit jeder neuen Messung nimmt die Unsicherheit ab, und die Schätzung des Systemzustands wird immer präziser
- Weiterführende Lernmaterialien
- Kostenloses Online-Tutorial: bietet schrittweise Zahlenbeispiele
- Buch Kalman Filter from the Ground Up: enthält lineare und nichtlineare Filter, Implementierungshinweise sowie Python-/MATLAB-Code
1 Kommentare
Hacker-News-Kommentare
Ich bin der Autor. Ich habe vor Kurzem die Homepage meines Kalman-Filter-Tutorials aktualisiert. Ich habe ein einfaches Radar-Tracking-Beispiel hinzugefügt, damit es auch für Leute verständlich ist, die nur Grundkenntnisse in Statistik und linearer Algebra haben.
Ich habe versucht, die Herleitung der Formeln auf ein Minimum zu reduzieren und gleichzeitig Rauschen in den Messungen, das Vorhersagemodell und die Kombination im Filter intuitiv zu zeigen. Ich würde gern Feedback zum mathematischen Niveau und zur Klarheit der Erklärung hören.
Mein intuitiver Leitfaden dazu wäre folgender:
Im Kern geht es also um die Methode der kleinsten Quadrate, und unter bestimmten Annahmen kann man beweisen, dass sie optimal ist.
Der Artikel „How a Kalman Filter Works in Pictures” war wirklich großartig.
Ein Tiefpassfilter ist zum Beispiel ebenfalls eine Art Schätzer; der Kalman-Filter erweitert das aber um ein Prozessmodell und Kovarianzberechnungen, sodass er sich dynamisch anpasst.
Er berücksichtigt die Beziehungen zwischen korrelierten Variablen wie Position und Geschwindigkeit, sodass eine einzelne Messung auch die Schätzung anderer Variablen beeinflusst.
Da er jedoch auf linearer Algebra basiert, muss gaußsches Rauschen angenommen werden, und für nichtlineare Probleme braucht man Varianten wie EKF oder UKF.
Um den Kalman-Filter zu verstehen, muss man die folgenden vier Dinge kennen:
Der Filter ist eine mathematische Lösung zur optimalen Schätzung des internen Zustands und der Kovarianz eines Systems auf Basis von Messwerten.
Ich halte das Buch von Alex Becker für eine hervorragende Einführung in dieses Thema. Es ist reich an Beispielen und hilft sehr dabei, Intuition aufzubauen.
Beim Lernen des Kalman-Filters wird es viel intuitiver, wenn es zwei oder mehr Eingaben mit unterschiedlichen Rauscheigenschaften gibt. Aber die meisten Tutorials behandeln nur eine einzelne Eingabe.
Kalman-Filter werden auch in der Praxis viel eingesetzt. Bei Sendspin werden sie zum Beispiel zur Lautsprechersynchronisation verwendet.
Siehe Live-Demo und Implementierungsdokumentation.
Ich frage mich, ob sich das Konzept des Kalman-Filters auch auf menschliche Zeugenaussagen anwenden lässt.
Auch auf thekalmanfilter.com gibt es eine einfache Erklärung.
Dieser Artikel wirkte auf mich wie Werbung für ein teures Buch. Es gibt bereits viele kostenlose Materialien, zum Beispiel Kalman and Bayesian Filters in Python. Ich frage mich, was der besondere Vorteil dieses Buchs ist.