Le filtre de Kalman : une explication interactive
Prédiction d'état, gain optimal, équations clés — avec des simulations interactives pour construire l'intuition.
Pour recruteurs (lecture rapide)
Le filtre de Kalman est un estimateur récursif optimal (au sens MSE) pour les systèmes linéaires bruités. Je l'utilise comme outil de modélisation pour comprendre :
- Fusion de sources d'information : comment combiner un modèle dynamique avec des capteurs imparfaits.
- Propagation d'incertitude : matrices de covariance, bruit de processus \(Q\), bruit de mesure \(R\).
- Optimisation bayésienne : le gain de Kalman est la solution analytique à un problème de pondération par variance.
- Extensions non-linéaires : EKF (Extended), UKF (Unscented), filtres particulaires.
Pourquoi le filtre de Kalman ?
Imaginez un radar qui suit un avion. La position mesurée est bruitée — dix radars différents donneraient dix valeurs légèrement différentes. En même temps, vous savez que l'avion vole à vitesse approximativement constante : vous avez un modèle de son comportement.
Le filtre de Kalman répond à une question simple : comment combiner optimalement une mesure bruitée et une prédiction imparfaite ? La réponse est une moyenne pondérée où les poids dépendent des niveaux de confiance respectifs — et c'est exactement le gain de Kalman.
Au-delà du radar, on retrouve le filtre de Kalman dans la navigation GPS/IMU, le contrôle de robots, l'analyse financière (modèles à espace d'états), et même les interfaces cerveau-machine.
Modèle d'état
On décrit le système par un vecteur d'état \(\mathbf{x}_k\) (position, vitesse, température…) qui évolue selon deux équations :
- \(\mathbf{F}\) — matrice de transition d'état
- \(\mathbf{B},\mathbf{u}_k\) — entrée de commande
- \(\mathbf{w}_k \sim \mathcal{N}(0,\mathbf{Q})\) — bruit de processus
- \(\mathbf{z}_k\) — vecteur de mesures (ce que le capteur observe)
- \(\mathbf{H}\) — matrice d'observation
- \(\mathbf{v}_k \sim \mathcal{N}(0,\mathbf{R})\) — bruit de mesure
L'état estimé \(\hat{\mathbf{x}}_{k|k}\) est représenté par une gaussienne paramétrée par sa moyenne et sa matrice de covariance \(\mathbf{P}\) : \(\hat{\mathbf{x}} \sim \mathcal{N}(\hat{\mathbf{x}}, \mathbf{P})\). Cette représentation permet de propager l'incertitude à chaque étape.
Le cycle Prédire – Mettre à jour
Le filtre fonctionne en boucle : à chaque pas de temps, il prédit le prochain état grâce au modèle dynamique, puis corrige cette prédiction avec la mesure courante.
① Initialisation
Fixer \(\hat{\mathbf{x}}_{0|0}\) et \(\mathbf{P}_{0|0}\)
② Prédiction
Propagation via \(\mathbf{F}\), \(\mathbf{B}\), \(\mathbf{Q}\)
③ Mise à jour
Calcul du gain \(\mathbf{K}\), correction par \(\mathbf{z}_k\)
Les étapes ② et ③ se répètent à chaque pas de temps.
Équations complètes
Étape de prédiction
Étape de mise à jour
Simulation interactive
La simulation ci-dessous montre un objet se déplaçant à vitesse constante (avec légère accélération aléatoire). Les mesures de position sont bruitées. Ajustez \(Q\) (bruit de processus) et \(R\) (bruit de mesure) pour voir comment le filtre réagit.
Que remarquer ? Quand \(R\) est grand (capteur peu fiable), le filtre fait davantage confiance au modèle dynamique. Quand \(Q\) est grand (modèle peu fiable), le filtre réagit plus vite aux mesures. Le gain de Kalman équilibre automatiquement ces deux sources.
Intuition du gain de Kalman
En 1D, le gain se simplifie en :
C'est un simple ratio entre l'incertitude prédite et l'incertitude totale. Si \(r \to 0\) (capteur parfait), \(K \to 1\) : on fait entièrement confiance à la mesure. Si \(p \to 0\) (modèle parfait), \(K \to 0\) : on ignore la mesure.
Exemple numérique : radar 1D
Reprenons l'exemple classique d'un radar suivant un avion en ligne droite. L'état est \(\mathbf{x} = [r,\, v]^\top\) (portée en m, vitesse en m/s). À \(t_0\) : mesure initiale \(\mathbf{z}_0 = [10\,000,\; 200]^\top\).
Initialisation
Prédiction à \(t_1\) (\(\Delta t = 5\,\text{s}\))
Mise à jour avec \(\mathbf{z}_1 = [11\,020,\; 202]^\top\)
Avec \(\mathbf{H} = \mathbf{I}\) et \(\mathbf{R}_1 = \text{diag}(36,\; 2{,}25)\) :
Limites et extensions
| Hypothèse standard | Si violée → solution |
|---|---|
| Système linéaire | EKF : linéarisation locale (Jacobien) |
| Bruit gaussien | UKF : transformée sans parfum (sigma-points) |
| Distributions multimodales | Filtre particulaire : Monte Carlo séquentiel |
| \(Q\) et \(R\) connus | Estimation adaptative (EM, fenêtre glissante) |
Pour aller plus loin : kalmanfilter.net (tutoriel complet) • Bzarg — en images • Labbe — Python