Contents — find the section you need
Change parameters and verify
Open the panel, then press Run to load Python. You can stop execution and reset parameters. Results are computed on this device. No Python installation is required.
Local execution steps below are optional for reproducing the source results; they are not required for the browser experiment.
The experiment controls are in English.
Die Kalman-Optimierung drückt die Unsicherheit eines Bewegungsmodells und seiner Beobachtungen aus. Dieses Experiment schätzt Position und Geschwindigkeit und vergleicht anschließend die Vorhersage bei fehlenden Daten, die Reaktion auf Ausreißer und die durch übermäßiges Vertrauen verursachte Ablehnung. Alle Eingangsdaten sind synthetisch; die Zahlenwerte geben keine Hardware-Genauigkeit an.
Modell und Einheiten
Der Zustand enthält Position [m] und Geschwindigkeit [m/s]. Nur die Position wird alle 0,1 s beobachtet:
Die Standardabweichung der Beobachtungen beträgt 0,7 m, was R = 0,49 m² ergibt. Die Prozesskovarianz ist q ggᵀ mit g = (dt²/2, dt), was eine unabhängige Beschleunigungsstörung pro Schritt darstellt. Hier hat q = 0,4 die Einheit (m/s²)²; es handelt sich nicht um eine kontinuierliche spektrale Dichte von weißem Rauschen. Übertragen Sie diesen Wert nicht ohne Überprüfung seiner Bedeutung auf eine andere Diskretisierung. Die Herleitungen für Vorhersage und Aktualisierung finden Sie in der Einführung zum Kalman-Filter.
Die Theorie ist in Simo Särkkä (2013), Bayesian Filtering and Smoothing, Abschnitt 4.3, beschrieben. Trajektorie, Gate und Vergleichsbedingungen entsprechen unserem eigenen Versuchsaufbau.
Vier Konfigurationen, identische Eingabe
Speichern Sie das Experiment-Skript in einem leeren Ausgabeverzeichnis und führen Sie es aus:
python3 engineering_labs.py
Die Ausführung wurde mit Python 3.12.3, NumPy 1.26.4 und Matplotlib 3.6.3 getestet. Die Datei erzeugt auch die anderen verlinkten technischen Experimente. Sie verwendet den Startwert 42 und 300 Stichproben. Die tatsächliche Geschwindigkeit ändert sich nach 12 s von 1 auf 1,4 m/s. Dreißig Beobachtungen zwischen 7,0 und 9,9 s fehlen, und der Beobachtung bei 16 s werden 12 m hinzugefügt. Die Anfangsposition und -geschwindigkeit betragen 0 m bzw. 1 m/s; die anfängliche Kovarianz hat die Diagonaleinträge 1 m² und 1 (m/s)². Jede Konfiguration erhält exakt dieselben Beobachtungen.
Normalisierung des Residuums
Sei e das Beobachtungsresiduum vor der Korrektur und S seine vorhergesagte Varianz. Das Gate verwirft eine Beobachtung, wenn:
Dieser Schwellenwert gilt für dieses skalare normalisierte Residuum und nicht willkürlich für mehrdimensionale Beobachtungen. Fehlende oder verworfene Messungen lösen eine Vorhersage ohne Korrektur aus. Die Implementierung verwendet die Joseph-Kovarianzaktualisierung und prüft auf positive Semidefinitheit. Die Unsicherheit wächst bei fehlenden Daten, daher unterscheidet sich dies von einer festen Verwerfungsdistanz in Metern.
Ergebnisse zeigen Überschätzung
| Konfiguration | Positions-RMSE [m] | Verworfen |
|---|---|---|
| q=0,4, R=0,49, kein Gate | 0,262 | 0 |
| q=0,4, R=0,49, Gate | 0,178 | 2 |
| q=0,002, R=0,49, Gate | 0,393 | 4 |
| q=0,4, R=0,0049, Gate | 11,251 | 237 |
Der vertikale Bereich ist zum Vergleich auf −3 bis 4 m begrenzt. Der Ausreißer bei 12 m und große Fehler mit kleinem R reichen darüber hinaus. Prüfen Sie die gated CSV, small-R CSV und complete summary auf nicht abgeschnittene Werte. Fehlende Werte in CSV-Dateien werden als NaN (NaN) behandelt und nicht als Ausschlusskriterien gewertet.
Das Gate verwirft zwei Beobachtungen, obwohl nur ein künstlicher Ausreißer eingefügt wurde. Ein Schwellenwert identifiziert nicht ausschließlich absichtlich verfälschte Stichproben. Eine Unterschätzung der Beobachtungsvarianz um den Faktor 100 führt zu 237 Ausschlusskriterien: Die normale Streuung ist mit der Konfidenz des Filters nicht mehr vereinbar. Fehlende Korrekturen verhindern dann die Verfolgung der Geschwindigkeitsänderung, wodurch die Residuen noch größer werden. Das Hinzufügen eines Gates allein erhöht die Robustheit nicht.
Ihre eigenen Protokolle
Prüfen Sie zuerst Zeitstempel, Einheiten und Frames. Schätzen Sie die Beobachtungsvarianz in stationären Intervallen und untersuchen Sie anschließend die Fehler des Bewegungsmodells und die Residuen während der Bewegung. Führen Sie das Gating zuletzt ein und berichten Sie über die Rate fehlender Daten, die Ausschlussrate und die Unsicherheit zusammen mit dem RMSE. Reale Hardware benötigt eine unabhängige Referenz, um vergleichbare Fehler zu berechnen.
Ein kleiner Q-Wert kann eine Kurve glätten, aber gleichzeitig die Verzögerung erhöhen. Ein höherer Q-Wert ist jedoch nicht generell besser. Diese Rangfolge gilt nur für diese Trajektorie, Initialisierung, dieses Rauschen und dieses Auswertungsfenster.
Folgeprüfung
Die Spalte „sigma_m“ enthält die geschätzte Standardabweichung der Position. Stellen Sie die Schätzung plus/minus das Zweifache von Sigma grafisch dar und vergleichen Sie das Intervall fehlender Daten mit der Geschwindigkeitsänderung. Dadurch lässt sich der tatsächliche Fehler von der Selbsteinschätzung des Schätzers trennen. Fahren Sie mit der Fehlersuche in der Sensorfusion fort (siehe sensor-fusion debugging), um Timing und TF zu diagnostizieren, bevor Sie die Kovarianz ändern.
Führen Sie die gleiche Berechnung lokal durch
Extrahieren Sie die vollständige ausführbare Quellcode-ZIP-Datei oder speichern Sie den Einstiegspunkt des Experiments, die generierten Kernel und den ursprünglichen PID-Quellcode in einem Ordner. PID verwendet die Python-Standardbibliothek; Kalman und ICP benötigen NumPy. Die ursprünglichen Befehle zur Grafikerstellung bleiben verfügbar.
python3 -m pip install numpy==1.26.4
python3 experiment.py kalman --parameters '{"q":0.4,"r":0.49,"gate":false}' > result.json
Schalten Sie das Gate um, um die Ausreißerantwort zu vergleichen. Setzen Sie dann q auf 0,002 oder r auf 0,0049 und vergleichen Sie RMSE und die Anzahl der abgelehnten Daten. Die Beobachtungen sind in allen Durchläufen aus der gespeicherten CSV-Datei unverändert.
Code, data and reproduction
The ZIP contains the same computation code as the browser, synthetic data and comparison cases. These are not physical measurements.
Download reproduction package · Instructions (EN/JA) · Files and experiment conditions (JSON)
Extract the ZIP into a new directory, then run:
python3 reproduce.py --experiment kalman
This Lab compares 4 cases. PID uses Python’s standard library; Kalman/ICP require NumPy. See the instructions for dependencies and tested versions.
Kommentare
Bitte zuerst anmelden.
Noch keine Einträge.