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.

Open experiment panel in a new tab

Download reproduction source

La sintonización de Kalman expresa la incertidumbre en un modelo de movimiento y sus observaciones. Este experimento estima la posición y la velocidad, y luego compara la predicción con datos faltantes, las reacciones a un valor atípico y el rechazo causado por exceso de confianza. Todas las entradas son sintéticas; los números no representan afirmaciones sobre la precisión del hardware.

Modelo y unidades

El estado contiene la posición [m] y la velocidad [m/s]. Solo se observa la posición, cada 0,1 s:

x_k=F x_{k-1}+w_k,\qquad F=\begin{bmatrix}1&0.1\\0&1\end{bmatrix},\qquad z_k=H x_k+v_k,\quad H=\begin{bmatrix}1&0\end{bmatrix}

La desviación estándar de la observación es de 0,7 m, lo que da R = 0,49 m². La covarianza del proceso es q ggᵀ con g = (dt²/2, dt), que representa una perturbación de aceleración independiente por paso. Aquí, q = 0,4 tiene unidades de (m/s²)²; no es una densidad espectral de ruido blanco continuo. No transfiera este valor a otra discretización sin verificar su significado. Consulte la Introducción al filtro de Kalman para ver las derivaciones de predicción y actualización.

Para la teoría, consulte Simo Särkkä (2013), Filtrado y suavizado bayesiano, sección 4.3. La trayectoria, la puerta y las condiciones de comparación aquí descritas corresponden a nuestro propio diseño experimental.

Cuatro configuraciones, entrada idéntica

Guarde el script del experimento en un directorio de salida vacío y ejecútelo:

python3 engineering_labs.py

La ejecución se verificó con Python 3.12.3, NumPy 1.26.4 y Matplotlib 3.6.3. El archivo también genera los demás experimentos de ingeniería vinculados. Utiliza la semilla 42 y 300 muestras. La velocidad real cambia de 1 a 1,4 m/s a los 12 s. Faltan treinta observaciones entre 7,0 y 9,9 s, y se añaden 12 m a la observación de 16 s. La posición/velocidad inicial son 0 m y 1 m/s; la covarianza inicial tiene entradas diagonales de 1 m² y 1 (m/s)². Cada configuración recibe exactamente las mismas observaciones.

Normalizar el residuo

Sea e el residuo de la observación antes de la corrección y S su varianza predicha. La puerta rechaza una observación cuando:

e=z-H\hat{x}^{-},\qquad S=HP^{-}H^T+R,\qquad e^2/S>9

Este umbral se aplica a este residuo escalar normalizado, no arbitrariamente a observaciones multidimensionales. Las mediciones faltantes o rechazadas activan la predicción sin corrección. La implementación utiliza la actualización de covarianza de Joseph y comprueba la semidefinición positiva. La incertidumbre aumenta durante la falta de datos, por lo que esto difiere de una distancia de rechazo fija en metros.

Los resultados revelan exceso de confianza

Configuración RMSE de posición [m] Rechazadas
q=0.4, R=0.49, sin compuerta 0.262 0
q=0.4, R=0.49, con compuerta 0.178 2
q=0.002, R=0.49, con compuerta 0.393 4
q=0.4, R=0.0049, con compuerta 11.251 237
Diagram 1 · Use the button to switch views
Errores de posición sintéticos del filtro de Kalman en metros por segundo, con observaciones faltantes sombreadas.

El rango vertical se limita de -3 a 4 m para comparación. El valor atípico de 12 m y los grandes errores con R pequeño se extienden más allá de este rango. Inspeccione los archivos CSV filtrado, CSV de R pequeño y resumen completo para detectar valores sin recortar. Las observaciones faltantes en el CSV se muestran como NaN y no se consideran rechazos.

El filtro rechaza dos observaciones, aunque solo se inyectó un valor atípico artificial. Un umbral no identifica únicamente las muestras deliberadamente corruptas. Subestimar la varianza de la observación por un factor de 100 provoca 237 rechazos: la dispersión normal se vuelve incompatible con la confianza del filtro. Las correcciones perdidas impiden el seguimiento del cambio de velocidad, lo que aumenta aún más los residuos. Agregar un filtro por sí solo no genera robustez.

Pasando a sus propios registros

Primero, verifique las marcas de tiempo, las unidades y los fotogramas. Estime la varianza de la observación en intervalos estacionarios y, a continuación, examine los errores del modelo de movimiento y los residuos durante el movimiento. Introduzca el filtrado al final, informando la tasa de datos faltantes, la tasa de rechazo y la incertidumbre junto con el RMSE. El hardware real necesita una referencia independiente para calcular errores comparables.

Un valor pequeño de Q puede suavizar la curva, aunque aumente el retardo. Sin embargo, aumentar Q no siempre resulta mejor. Estas clasificaciones se aplican únicamente a esta trayectoria, inicialización, ruido y ventana de evaluación.

Verificación de seguimiento

La columna sigma_m representa la desviación estándar de la posición estimada. Grafique la estimación más/menos el doble de sigma y compare el intervalo de datos faltantes con el cambio de velocidad. Esto permite diferenciar el error real de la autoevaluación del estimador. Continúe con la depuración de fusión de sensores para diagnosticar problemas de sincronización y TF antes de modificar la covarianza.

Ejecutar el mismo cálculo localmente

Extraiga el archivo ZIP de código fuente ejecutable completo, o guarde el punto de entrada del experimento, los núcleos generados y el código fuente PID original en una carpeta. PID utiliza la biblioteca estándar de Python; Kalman e ICP requieren NumPy. Los comandos originales para la generación de figuras siguen estando disponibles.

python3 -m pip install numpy==1.26.4
python3 experiment.py kalman --parameters '{"q":0.4,"r":0.49,"gate":false}' > result.json

Active la puerta para comparar la respuesta atípica, luego establezca q en 0,002 o r en 0,0049 y compare el RMSE y el número de rechazos. Las observaciones se mantienen fijas a partir del archivo CSV guardado en todas las ejecuciones.

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.

Related reading

Check timing, TF and units before tuning.Por qué falla la fusión de sensores: sincronización, tramas y calibración extrínsecaExplore another aspect of this fieldLab de MPC: volver a resolver una secuencia de curvatura dentro del horizonte y los límites de direcciónExplore another aspect of this fieldLab de comparación de seguimiento de trayectoria: ejecute PP, APP, RPP, Stanley y MPC en las mismas condiciones