Comprendre le filtre de Kalman avec un exemple simple de radar
(kalmanfilter.net)- Le filtre de Kalman est un algorithme optimal d’estimation d’état qui estime l’état d’un système et prédit son évolution future dans un environnement bruité
- En prenant l’exemple d’un radar de suivi d’avion, l’article explique comment améliorer la précision en répétant les étapes de prédiction et de mise à jour à partir de mesures de distance et de vitesse
- À chaque étape, il calcule le vecteur d’état, la matrice de covariance et le gain de Kalman (Kalman Gain) afin de combiner de façon pondérée les mesures et les prédictions
- En tenant compte à la fois de l’incertitude de mesure et de l’incertitude du modèle, il montre numériquement que l’erreur d’estimation (incertitude) diminue avec le temps
- Grâce à un exemple numérique intuitif et à des calculs détaillés étape par étape, il fournit une base de compréhension permettant de concevoir et d’implémenter soi-même un filtre
Introduction au filtre de Kalman
-
Le Kalman Filter est un algorithme d’estimation d’état qui permet d’estimer et de prédire l’état d’un système dans un environnement où existent des incertitudes, comme le bruit de mesure ou des facteurs externes
- Il est utilisé comme outil clé dans de nombreux domaines, comme le suivi d’objets, la navigation, la robotique ou le contrôle
- Par exemple, il permet de réduire le bruit dans la trajectoire d’une souris pour obtenir un mouvement plus fluide, de détecter des tendances dans les données financières ou encore d’être utilisé pour les prévisions météo
- L’article souligne que de nombreux supports pédagogiques insistent surtout sur les dérivations mathématiques et manquent d’exemples concrets ; ce document propose donc une explication intuitive centrée sur des exemples numériques
- Il traite aussi de cas où un filtre mal conçu échoue à suivre correctement l’objet, puis présente des méthodes pour le corriger
- L’objectif est de permettre au lecteur d’acquérir une compréhension suffisante pour concevoir et implémenter lui-même un filtre de Kalman
Parcours d’apprentissage
- Vue d’ensemble en une page : présente brièvement les concepts clés et les principales formules, en ne demandant que des bases en statistiques et en algèbre linéaire
- Tutoriel web gratuit : tutoriel en ligne qui construit l’intuition à l’aide d’exemples numériques étape par étape, sans prérequis
- Kalman Filter from the Ground Up (livre) : 14 exemples numériques complets, filtres non linéaires (Extended/Unscented) et fusion de capteurs, avec du code Python et MATLAB
Pourquoi la prédiction est nécessaire
- La nécessité de l’estimation d’état et de la prédiction est expliquée à travers l’exemple d’un radar de suivi d’avion
- L’état du système est la position de l’avion (distance (r)), et le radar calcule cette distance à partir du temps de retour de l’impulsion réfléchie
- La vitesse (v) peut être mesurée via l’effet Doppler
- La prédiction de la position après un intervalle de temps donné (\Delta t) est réalisée à l’aide d’un modèle dynamique
- Exemple : (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)
- Dans le monde réel, il existe du bruit de mesure (Measurement Noise) et de l’incertitude dans le modèle (Process Noise)
- Même si plusieurs radars mesurent en même temps, les résultats diffèrent légèrement
- Des facteurs externes comme le vent peuvent invalider l’hypothèse d’une vitesse constante
- Le filtre de Kalman effectue à la fois l’estimation de l’état courant et la prédiction de l’état futur, tout en fournissant l’incertitude (variance) associée à chaque estimation
- C’est un algorithme optimal qui minimise l’incertitude de l’estimation d’état
Exemple de filtre de Kalman
-
Un radar unidimensionnel mesure la distance (r) et la vitesse (v) d’un avion
- Vecteur d’état (\boldsymbol{x} = [r, v]^T)
- Le système est représenté à l’aide de vecteurs et de matrices
-
Itération 0 — Initialisation et prédiction
-
Initialisation
- Le filtre est initialisé avec la première mesure (\boldsymbol{z}_0 = [10{,}000, 200]^T)
- Incertitude de mesure (écart-type) : distance 4m, vitesse 0.5m/s (\boldsymbol{R}_0 = \begin{bmatrix}16 & 0 \ 0 & 0.25\end{bmatrix})
- Estimation initiale de l’état (\hat{\boldsymbol{x}}_{0,0} = \boldsymbol{z}_0)
- Covariance initiale (\boldsymbol{P}_{0,0} = \boldsymbol{R}_0)
-
Étape de prédiction
- Intervalle de temps (\Delta t = 5s)
- Matrice de transition d’état (\boldsymbol{F} = \begin{bmatrix}1 & 5 \ 0 & 1\end{bmatrix})
- État prédit (\hat{\boldsymbol{x}}{1,0} = \boldsymbol{F}\hat{\boldsymbol{x}}{0,0} = [11{,}000, 200]^T)
- Prédiction de la covariance (hors bruit de processus) : (\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})
- Ajout du bruit de processus ((\sigma_a = 0.2m/s^2)) : (\boldsymbol{Q} = \begin{bmatrix}6.25 & 2.5 \ 2.5 & 1\end{bmatrix})
- Covariance prédite finale : (\boldsymbol{P}_{1,0} = \begin{bmatrix}28.5 & 3.75 \ 3.75 & 1.25\end{bmatrix})
-
Résumé de l’itération 0
- Initialisation de l’état et de la covariance à partir de la première mesure
- Utilisation du modèle de transition d’état pour prédire l’état suivant et son incertitude
- Formules de prédiction
- Prédiction de l’état : (\hat{\boldsymbol{x}}{n+1,n} = \boldsymbol{F}\hat{\boldsymbol{x}}{n,n} + \boldsymbol{G}\boldsymbol{u}_n)
- Prédiction de la covariance : (\boldsymbol{P}{n+1,n} = \boldsymbol{F}\boldsymbol{P}{n,n}\boldsymbol{F}^T + \boldsymbol{Q})
-
Itération 1 — Mise à jour et prédiction
-
Mise à jour du filtre
- Deuxième mesure : (\boldsymbol{z}_1 = [11{,}020, 202]^T)
- Hausse de l’incertitude de mesure (écart-type : distance 6m, vitesse 1.5m/s) (\boldsymbol{R}_1 = \begin{bmatrix}36 & 0 \ 0 & 2.25\end{bmatrix})
- Comparée à la covariance prédite (\boldsymbol{P}_{1,0}), l’incertitude de prédiction est plus faible
- Le filtre de Kalman combine la mesure et la prédiction sous la forme d’une moyenne pondérée
- Poids (K_1) : Kalman Gain
- Formule de mise à jour de l’état : (\hat{\boldsymbol{x}}{1,1} = \hat{\boldsymbol{x}}{1,0} + \boldsymbol{K}_1(\boldsymbol{z}1 - \boldsymbol{H}\hat{\boldsymbol{x}}{1,0}))
- Matrice d’observation (\boldsymbol{H} = \boldsymbol{I})
- Calcul du gain de Kalman : (\boldsymbol{K}1 = \boldsymbol{P}{1,0}\boldsymbol{H}^T(\boldsymbol{H}\boldsymbol{P}_{1,0}\boldsymbol{H}^T + \boldsymbol{R}_1)^{-1}) Résultat : (\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)
- Terme de correction : (\boldsymbol{K}_1[20, 2]^T = [9.37, 1.43]^T)
- État mis à jour : (\hat{\boldsymbol{x}}_{1,1} = [11{,}009.37, 201.43]^T)
-
Mise à jour de la covariance
- Utilisation d’une forme simplifiée : (\boldsymbol{P}_{1,1} = (\boldsymbol{I} - \boldsymbol{K}1)\boldsymbol{P}{1,0})
- Résultat : (\boldsymbol{P}_{1,1} = \begin{bmatrix}14.57 & 1.43 \ 1.43 & 0.71\end{bmatrix})
- Après la mise à jour, l’incertitude est plus faible que l’incertitude de la prédiction et que celle de la mesure → combiner mesure et prédiction réduit toujours l’incertitude
-
Étape de prédiction
- Prédiction à l’instant suivant (t_2)
- Prédiction de l’état : (\hat{\boldsymbol{x}}{2,1} = \boldsymbol{F}\hat{\boldsymbol{x}}{1,1} = [12{,}016.5, 201.43]^T)
- Prédiction de la covariance : (\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})
- En l’absence de nouvelle mesure, l’incertitude recommence à augmenter avec le temps
- Prédiction à l’instant suivant (t_2)
-
Résumé de l’itération 1
- Étape de mise à jour : combinaison de la prédiction et de la mesure via le gain de Kalman
- Étape de prédiction : propagation de l’état mis à jour vers l’instant suivant
- Principales formules
- Mise à jour de l’état : (\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}))
- Mise à jour de la covariance (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)
- Gain de Kalman : (\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})
Résumé de l’exemple
- Les trois étapes du filtre de Kalman : initialisation → prédiction → mise à jour
- Ensuite, on répète la boucle prédiction-mise à jour
- À chaque nouvelle mesure, l’incertitude diminue et l’estimation de l’état du système devient progressivement plus précise
- Ressources complémentaires
- Tutoriel en ligne gratuit : tutorial proposant des exemples numériques étape par étape
- Livre Kalman Filter from the Ground Up : filtres linéaires et non linéaires, guide d’implémentation, code Python/MATLAB inclus
1 commentaires
Avis sur Hacker News
C’est l’auteur. J’ai récemment mis à jour la page d’accueil de mon tutoriel sur le Kalman Filter. J’y ai ajouté un exemple simple de suivi radar, conçu pour être compréhensible même par quelqu’un qui ne connaît que les bases des statistiques et de l’algèbre linéaire
J’ai essayé de limiter au maximum les dérivations mathématiques, tout en montrant de façon intuitive le bruit des mesures, le modèle de prédiction et le processus de combinaison du filtre. J’aimerais beaucoup avoir des retours sur le niveau mathématique et la clarté des explications
Voici ce que je considère comme un guide intuitif
Au fond, l’essentiel repose sur la méthode des moindres carrés, et sous certaines hypothèses, on peut démontrer qu’elle est optimale
L’article « How a Kalman Filter Works in Pictures » était vraiment excellent
Par exemple, un filtre passe-bas est aussi une forme d’estimateur, mais le filtre de Kalman y ajoute un modèle de processus et un calcul de covariance pour s’ajuster dynamiquement.
Il prend en compte les relations entre variables corrélées, comme la position et la vitesse, si bien qu’une seule mesure peut aussi influencer l’estimation d’autres variables.
En revanche, comme il repose sur l’algèbre linéaire, il faut supposer un bruit gaussien, et pour les problèmes non linéaires il faut des variantes comme l’EKF ou l’UKF
Pour comprendre le filtre de Kalman, il faut connaître les quatre points suivants
Le filtre est une solution mathématique permettant d’estimer de façon optimale l’état interne et la covariance d’un système à partir de mesures.
Je pense que le livre d’Alex Becker est une excellente introduction au sujet. Il est riche en exemples et aide bien à construire l’intuition
Quand on apprend le filtre de Kalman, c’est beaucoup plus intuitif lorsqu’il y a au moins deux entrées avec des caractéristiques de bruit différentes. Pourtant, la plupart des tutoriels ne traitent qu’une seule entrée
Le filtre de Kalman est aussi largement utilisé en pratique. Par exemple, Sendspin s’en sert pour la synchronisation des haut-parleurs
On peut consulter une démo en direct et la documentation d’implémentation
Je me demande si le concept du filtre de Kalman pourrait aussi s’appliquer à des témoignages humains
On peut aussi trouver une explication simple sur thekalmanfilter.com
Cet article m’a donné l’impression d’être une pub pour un livre cher. Il existe déjà beaucoup de ressources gratuites, par exemple Kalman and Bayesian Filters in Python et d’autres. Je me demande quel est l’intérêt spécifique de ce livre