4 Punkte von GN⁺ 20 일 전 | 1 Kommentare | Auf WhatsApp teilen
  • 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
  • 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

 
GN⁺ 20 일 전
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.

    • Ich habe es kurz überflogen, und es wirkte, als würde die Prozessrauschmatrix Q plötzlich aus dem Nichts auftauchen. Im Buch wird es dazu vermutlich eine Erklärung geben, aber eine kurze Begründung, warum sie diese Werte hat, wäre hilfreich.
    • Insgesamt war es klar. Nur am Anfang war die Unterscheidung zwischen dem Systemmodell und dem Kalman-Filter selbst etwas unscharf. Bis zu dem Teil, in dem die Zustandsmatrix aufgebaut wird, dachte ich, es sei noch die Modellerklärung, und dann ging es direkt in die Filtergleichungen über, was etwas verwirrend war.
    • Das Barrierefreiheitsmenü hat mir wirklich gefallen. Es war sehr einfach, die Lesbarkeit der Seite anzupassen.
    • Ich hatte vor etwa 6 Monaten versucht, einen Kalman-Filter selbst zu implementieren, bin aber unterwegs steckengeblieben, weil sich die Struktur je nach Anwendungsdomäne ziemlich stark unterscheidet. Ich freue mich darauf, dass dieses Material mir sehr dabei helfen könnte, es diesmal bis zum Ende durchzuziehen.
    • Die Formulierung „optimaler Algorithmus“ am Anfang des Tutorials wirkte etwas abstrakt. Es wäre gut, ihre Bedeutung kurz zu erklären, bevor es in die Mathematik geht.
  • Mein intuitiver Leitfaden dazu wäre folgender:

    1. Verstehe die gewichtete Methode der kleinsten Quadrate und lerne, wie man mit neuen Messwerten und ihrer Unsicherheit eine bestehende Schätzung aktualisiert.
    2. Wenn man annimmt, dass sich der tatsächliche Mittelwert nicht ändert, funktioniert dieser Ansatz gut.
    3. Wenn sich der Mittelwert aber ändert, verwendet der Kalman-Filter ein Modell, das diese Änderung vorhersagt.
    4. Nach der Vorhersage landet man wieder bei einem Problem wie in (1).
      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.

    • Ich mag die visuelle Erklärweise dieses Artikels auch. Mein Tutorial hat jedoch das Ziel, anhand eines schrittweisen Radar-Beispiels sowohl Intuition als auch Fallstricke zu vermitteln.
    • Aber selbst solche „einfachen Erklärungen“ fühlen sich in der Praxis manchmal noch zu kompliziert an. Ein Kalman-Filter ist im Wesentlichen eine Art Schätzer (estimator).
      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:

    1. das Systemmodell
    2. den internen Zustand
    3. die Definition optimaler Schätzung
    4. das Konzept der Kovarianz
      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.
    • Danke für das Feedback. Ich denke über einen zweiten Band nach, der fortgeschrittenere Themen behandelt. Dabei möchte ich aber klar machen, dass EKF und UKF nur Näherungen sind und keine vollständig optimale Lösung.
  • 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.

    • In meinem Buch gibt es ein Kapitel, das das Konzept der Sensorfusion (sensor fusion) einführt. Wenn du tiefer einsteigen willst, empfehle ich die Bücher von Bar-Shalom oder Blackman.
    • Tatsächlich ist das Wesen des Kalman-Filters die Zustandsschätzung (state estimation). Sensorfusion ist nur eine Anwendung davon; wenn man beides gleichsetzt, führt das zu Missverständnissen.
  • 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.

    • Ein interessanter Gedanke. Man könnte menschliche Beobachtungen als Sensoren mit Rauschen betrachten. Der Standard-Kalman-Filter setzt allerdings unverzerrtes gaußsches Rauschen voraus, und bei Menschen ist fraglich, ob diese Annahme gilt.
  • 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.

    • Gute Frage. Die zentralen Inhalte zum Kalman-Filter sind kostenlos öffentlich verfügbar. Das Buch behandelt zusätzlich Tuning, Designüberlegungen und weitere Beispiele.
    • Das Buch von Roger Labbe und die Jupyter-Notebooks sind wirklich hervorragend. Sie helfen nicht nur beim Kalman-Filter, sondern auch sehr dabei, allgemeine Ansätze für Schätzprobleme zu verstehen.
    • Ich habe auch viele andere Materialien gesehen, aber dieses Buch ist wegen seiner außerordentlich ausführlichen Detailerklärungen empfehlenswert. Das kostenlose Tutorial gibt es auch hier.
    • Das verlinkte Material ist ein klassischer Meisterwerk.
    • Es gibt nicht viele gute Materialien. Von dem, was ich gesehen habe, kann man die wirklich gut gemachten an einer Hand abzählen. Dieses Material vermittelt spürbar den Versuch, den Kalman-Filter auf eine neue Weise verständlich zu machen.