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.
La sintonizzazione di Kalman esprime l'incertezza in un modello di movimento e nelle sue osservazioni. Questo esperimento stima la posizione e la velocità, quindi confronta la previsione in presenza di dati mancanti, le reazioni a un valore anomalo e il rifiuto causato da eccessiva sicurezza. Tutti gli input sono sintetici; i valori non rappresentano dichiarazioni di accuratezza hardware.
Modello e unità
Lo stato contiene posizione [m] e velocità [m/s]. Viene osservata solo la posizione, ogni 0,1 s:
La deviazione standard dell'osservazione è di 0,7 m, il che dà R=0,49 m². La covarianza del processo è q ggᵀ con g=(dt²/2, dt), che rappresenta una perturbazione di accelerazione indipendente per ogni passo. Qui q=0,4 ha unità (m/s²)²; non è una densità spettrale di rumore bianco continua. Non trasferire questo valore a un'altra discretizzazione senza verificarne il significato. Per le derivazioni relative alla previsione e all'aggiornamento, consultare l'introduzione al filtro di Kalman.
Per la teoria, si veda Simo Särkkä (2013), Filtraggio e smoothing bayesiano, sezione 4.3. La traiettoria, il gate e le condizioni di confronto qui descritte sono frutto del nostro progetto sperimentale.
Quattro configurazioni, input identico
Salvare lo script dell'esperimento in una directory di output vuota ed eseguirlo:
python3 engineering_labs.py
L'esecuzione è stata verificata con Python 3.12.3, NumPy 1.26.4 e Matplotlib 3.6.3. Il file genera anche gli altri esperimenti ingegneristici collegati. Utilizza un seed di 42 e 300 campioni. La velocità reale varia da 1 a 1,4 m/s a 12 s. Trenta osservazioni, comprese tra 7,0 e 9,9 s, risultano mancanti, e all'osservazione a 16 s vengono aggiunti 12 m. Posizione e velocità iniziali sono rispettivamente 0 m e 1 m/s; la matrice di covarianza iniziale presenta elementi diagonali pari a 1 m² e 1 (m/s)². Ogni configurazione riceve esattamente le stesse osservazioni.
Normalizzazione del residuo
Sia e il residuo dell'osservazione prima della correzione e S la sua varianza prevista. Il gate rifiuta un'osservazione quando:
Questa soglia si applica al residuo normalizzato scalare, non arbitrariamente alle osservazioni multidimensionali. Le misurazioni mancanti o rifiutate attivano la previsione senza correzione. L'implementazione utilizza l'aggiornamento della covarianza di Joseph e verifica la semidefinità positiva. L'incertezza aumenta in presenza di dati mancanti, quindi questo approccio differisce da una distanza di rifiuto fissa in metri.
I risultati rivelano un eccesso di sicurezza
| Configurazione | RMSE della posizione [m] | Rifiutate |
|---|---|---|
| q=0,4, R=0,49, senza gate | 0,262 | 0 |
| q=0,4, R=0,49, con gate | 0,178 | 2 |
| q=0,002, R=0,49, con gate | 0,393 | 4 |
| q=0,4, R=0,0049, con gate | 11,251 | 237 |
Errori di posizione KF sintetici in metri su secondi, con osservazioni mancanti evidenziate.
L'intervallo verticale è limitato da -3 a 4 m per confronto. Il valore anomalo di 12 m e gli errori elevati con R piccolo si estendono oltre questo intervallo. Esaminare i file CSV con gate (/uploads/labs/expansion/kalman_gated.csv), CSV con R ridotto (/uploads/labs/expansion/kalman_small_R.csv) e il riepilogo completo (/uploads/labs/expansion/engineering-results.json) per individuare valori non troncati. Le osservazioni mancanti nei file CSV sono NaN e non vengono conteggiate come scarti.
Il gate scarta due osservazioni, sebbene sia stato iniettato un solo outlier artificiale. Una soglia non identifica solo i campioni deliberatamente corrotti. Sottostimare la varianza delle osservazioni di un fattore 100 causa 237 scarti: la dispersione normale diventa incompatibile con la confidenza del filtro. Le correzioni perse impediscono quindi di tracciare la variazione di velocità, rendendo i residui ancora più grandi. L'aggiunta di un gate da sola non crea robustezza.
Passaggio ai propri log
Verificare prima i timestamp, le unità e i frame. Stimare la varianza delle osservazioni negli intervalli stazionari, quindi esaminare gli errori del modello di movimento e i residui durante il movimento. Introduci il gating per ultimo, riportando il tasso di dati mancanti, il tasso di rifiuto e l'incertezza insieme all'RMSE. L'hardware reale necessita di un riferimento indipendente per calcolare errori comparabili.
Un valore di Q piccolo può rendere una curva più uniforme, ma aumenta il ritardo. Anche aumentare Q non è sempre un vantaggio universale. Queste classifiche si applicano solo a questa traiettoria, inizializzazione, rumore e finestra di valutazione.
Verifica di follow-up
La colonna sigma_m rappresenta la deviazione standard stimata della posizione. Traccia il grafico della stima più/meno due volte sigma e confronta l'intervallo dei dati mancanti con la variazione di velocità. Questo separa l'errore effettivo dall'autovalutazione dello stimatore. Continua con il debugging della fusione dei sensori per diagnosticare i problemi di temporizzazione e TF prima di modificare la covarianza.
Esegui lo stesso calcolo in locale
Estrai il file ZIP completo del codice sorgente eseguibile, oppure salva il punto di ingresso dell'esperimento, i kernel generati e il codice sorgente PID originale in una cartella. Il PID utilizza la libreria standard di Python; Kalman e ICP richiedono NumPy. I comandi originali per la generazione delle figure rimangono disponibili.
python3 -m pip install numpy==1.26.4
python3 experiment.py kalman --parameters '{"q":0.4,"r":0.49,"gate":false}' > result.json
Attiva/disattiva il gate per confrontare la risposta outlier, quindi imposta q a 0,002 o r a 0,0049 e confronta RMSE e conteggio di rifiuto. Le osservazioni sono fisse rispetto al file CSV salvato tra le diverse esecuzioni.
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.
Commenti
Accedi per continuare.
Nessun dato disponibile.