🎯 Filtre de Kalman · fondements théoriques

Chapitre 12 · Application
Le même filtre sur PLC : réglage, cohérence, structure

Suite directe du chapitre 11. Le modèle est posé ; reste à le faire vivre sur un automate. On règle Q et R, on vérifie que le filtre ne se ment pas à lui-même, on le blinde numériquement, et — question centrale — on choisit la structure d'implémentation la plus adaptée au PLC, en expliquant pourquoi.

Objectifs du chapitre

1. Régler R, puis Q

Les deux covariances ne se règlent pas de la même façon (chapitre 10), et l'ordre compte.

R = σθ² d'abord, parce qu'il est mesurable. On fige le capteur, on enregistre quelques milliers de points, on calcule la variance. Un inclinomètre annoncé à 0,4° de bruit RMS donne R ≈ 0,16 deg². C'est une donnée du capteur, pas un curseur.

σα (donc Q) ensuite, comme unique curseur. On part de la physique (exercice 1 du chapitre 11) puis on affine avec la règle du chapitre 10 :

Le bon σα n'est pas deviné : il est vérifié. C'est l'objet de la section suivante.

2. Vérifier la cohérence

Un filtre embarqué qui « a l'air de marcher » n'est pas une preuve. Le critère rigoureux est la cohérence : l'incertitude que le filtre annonce (S) doit correspondre à l'erreur qu'il commet réellement. On le teste sans vérité terrain, en ligne, grâce à la NIS (chapitre 10) — calculée ici sur la mesure d'angle scalaire :

NISₖ = yₖ² / Sₖ    (y = innovation, S = P₀₀⁻ + R)

Pour un filtre cohérent, la NIS suit une loi du χ² à 1 degré de liberté (mesure scalaire), de moyenne 1. On en trace la moyenne glissante et on vérifie qu'elle reste dans la bande de confiance à 95 %.

Moyenne glissante de la NIS en fonction du temps, pour trois réglages. Une bande horizontale claire matérialise la zone de cohérence 95 % autour de la cible 1. La courbe 'Q trop petit' (ambre) reste largement au-dessus de la bande (entre 2 et 4,5) : le filtre est trop optimiste. La courbe 'Q correct' (vert) oscille autour de 1, à l'intérieur ou au bord de la bande. La courbe 'Q trop grand' (bleu) reste sous la bande, vers 0,3 : le filtre est trop pessimiste.
Figure 12.1. La NIS diagnostique le réglage sans vérité terrain. Q trop petit (ambre) → NIS au-dessus de la bande : le filtre est trop sûr de lui, ses innovations sont plus grandes que S ne le prévoit. Q trop grand (bleu) → NIS sous la bande : filtre trop pessimiste. Q correct (vert) → NIS autour de 1. On ajuste σα jusqu'à faire tomber la courbe dans la bande.

On complète la NIS par un test de blancheur : l'autocorrélation de la suite des innovations doit être quasi nulle hors du décalage zéro (chapitre 8). Une innovation encore corrélée dans le temps signale de l'information non exploitée — modèle trop pauvre (passer à l'ordre 2), retard non modélisé, ou biais. La NIS règle l'amplitude de Q ; la blancheur juge la structure du modèle.

La NIS moyenne au-dessus de 1 est le cas dangereux : le filtre sous-estime son erreur, et tout ce qui se fie à son P (une porte de validation, une décision de sécurité) hérite d'une confiance injustifiée. En cas de doute sur PLC, préférez pécher par Q légèrement trop grand (filtre un peu pessimiste mais honnête) que trop petit.

3. Stabilité numérique sur automate

Un filtre qui tourne des semaines sans redémarrage doit résister aux arrondis. Les parades du chapitre 10, déclinées pour un PLC :

// SCL — mise à jour de Joseph pour le 2×2 (robustesse longue durée).
// P = M·P⁻·Mᵀ + K·R·Kᵀ , avec M = (I - K·H) et H = [1 0].
// D'où M = [[1-k0, 0], [-k1, 1]] ; p**_p = P⁻ issu de la prédiction.
m00 := 1.0 - k0;  m01 := 0.0;
m10 := -k1;       m11 := 1.0;
// T = M·P⁻
t00 := m00*p00_p + m01*p10_p;   t01 := m00*p01_p + m01*p11_p;
t10 := m10*p00_p + m11*p10_p;   t11 := m10*p01_p + m11*p11_p;
// P = T·Mᵀ + K·R·Kᵀ  (R scalaire)
#P00 := t00*m00 + t01*m01 + k0*#R*k0;
#P01 := t00*m10 + t01*m11 + k0*#R*k1;
#P10 := t10*m00 + t11*m01 + k1*#R*k0;
#P11 := t10*m10 + t11*m11 + k1*#R*k1;
// resymétrisation défensive
#P01 := 0.5*(#P01 + #P10);   #P10 := #P01;

Cohérence des unités partout. Sur PLC on jongle avec des degrés, des radians, des incréments codeur, des millisecondes. F, H, Q, R et dt doivent partager un système d'unités unique. Une Q en deg² et une R en rad² : tout compile, le filtre est faux sans le moindre message d'erreur. Fixez les unités et documentez-les dans l'UDT.

4. La structure la plus intéressante pour PLC

Voici le cœur de ce chapitre. Faut-il implémenter le filtre complet — prédiction et correction de P, gain recalculé à chaque cycle — ou existe-t-il mieux adapté à un automate ? La réponse tient à une observation faite au chapitre 9 : sur un PLC, les conditions du régime permanent sont réunies presque idéalement.

4.1 Pourquoi le régime permanent s'impose sur PLC

L'idée décisive : résoudre l'équation de Riccati une seule fois, sur un PC (Python, quelques lignes), pour obtenir le gain constant K∞ ; puis n'implémenter sur le PLC qu'un observateur à gain constant — la prédiction et la correction de l'état, avec un gain figé. Plus de P, plus de Riccati, plus d'inversion en ligne.

Schéma d'implémentation sur automate. Un cadre représente l'OB cyclique appelé une fois par cycle. À l'intérieur, un bloc fonctionnel 'IncliVitesse' reçoit la mesure z de l'inclinomètre et la commande u ; il exécute trois lignes : prédiction x⁻ = F·x + B·u, innovation y = z − H·x⁻, correction x = x⁻ + K∞·y, avec des gains K∞ constants notés alpha et beta. Sa sortie est la vitesse estimée qui part vers la régulation. L'état x est mémorisé dans la statique du FB et reboucle vers le cycle suivant. Un encart en bas rappelle que hors ligne, on résout l'équation de Riccati (DARE) une seule fois pour obtenir K∞, sans aucune matrice à inverser en ligne.
Figure 12.2. L'observateur à gain constant sur PLC. Le FB, appelé une fois par cycle, n'exécute que trois lignes : prédire, innover, corriger avec le gain constant K∞ = (α, β). Toute la lourdeur (Riccati, covariance) est faite hors ligne, une seule fois. Résultat : un observateur déterministe, minimal, et numériquement inattaquable.

4.2 C'est le filtre α-β

Cet observateur à gain constant sur l'état [θ, ω] porte un nom historique : le filtre α-β. Ses deux gains constants α (sur l'angle) et β (sur la vitesse) sont le gain de Kalman en régime permanent. La récurrence par cycle se réduit à :

θ⁻ = θ + ω·dt  (+ ½·u·dt²)    ω⁻ = ω  (+ u·dt)
y = z − θ⁻
θ = θ⁻ + α·y    ω = ω⁻ + (β/dt)·y

L'ordre 2 [θ, ω, α] donne de la même façon le filtre α-β-γ, avec un troisième gain constant sur l'accélération. Une relation de conception classique (Benedict-Bordner) lie les deux gains, β = α² / (2 − α), ce qui ramène le réglage à un seul curseur α ∈ (0,1) ; les gains strictement Kalman-optimaux, eux, sortent de la résolution de la Riccati à partir de Q et R.

// SCL — observateur à gain constant (α-β), 1er ordre + commande.
// alpha, beta, dt : constantes ; état #th, #om en statique du FB.
th_p := #th + #om*#dt + 0.5*#u*#dt*#dt;   // prédiction angle (avec commande)
om_p := #om + #u*#dt;                     // prédiction vitesse
y    := #z - th_p;                        // innovation (scalaire)
#th  := th_p + #alpha * y;
#om  := om_p + (#beta / #dt) * y;         // ← vitesse estimée
#omEstime := #om;                         // sortie vers la régulation

Comptez les opérations : une poignée de multiplications-additions, zéro inversion, zéro matrice propagée. Le coût par cycle est constant et dérisoire — idéal pour un OB rapide à échéance dure.

Pourquoi c'est la meilleure structure sur PLC.

4.3 Quand garder le filtre complet

L'observateur à gain constant suppose le régime permanent établi et les conditions figées. On revient au filtre complet (gain recalculé) uniquement si l'une de ces conditions tombe :

Le compromis pragmatique souvent retenu sur automate : un observateur à gain constant en fonctionnement nominal, plus une gestion simple des cas exceptionnels — geler la correction (et éventuellement gonfler une incertitude scalaire de secours) quand une mesure manque ou est rejetée. On garde 95 % de la simplicité du gain constant tout en survivant aux aléas, sans porter la machinerie complète de la covariance. C'est ce type de structure — gain constant + garde-fous — qui équipe la plupart des estimateurs de vitesse embarqués.

Exercices

Exercice 1 — Diagnostiquer par la NIS

En exploitation, la moyenne glissante de la NIS de votre estimateur de vitesse se stabilise autour de 0,3. Le filtre est-il bien réglé ? Que faites-vous ?

Voir la solution

NIS ≈ 0,3, nettement sous 1 : le filtre est trop pessimiste — il annonce une incertitude S plus grande que ses innovations réelles. Cause typique : Q (ou R) surdimensionné. On réduit σα progressivement jusqu'à ramener la NIS vers 1 (dans la bande). Effet secondaire bénéfique : le filtre devient plus lisse. Attention à ne pas passer de l'autre côté (NIS > 1, trop optimiste).

Exercice 2 — Gain constant ou filtre complet ?

Deux applications : (a) mesure d'inclinaison à 500 Hz, OB cyclique strict, capteur fiable, machine certifiée sécurité ; (b) fusion d'un inclinomètre et d'un GPS dont les trames arrivent de façon irrégulière et parfois manquent. Quelle structure pour chacune ?

Voir la solution
  • (a) Observateur à gain constant (α-β) : période fixe, capteur stable, contraintes de temps et de certification fortes — c'est le cas d'école. Riccati résolue hors ligne, trois lignes en SCL, coût borné, code auditable.
  • (b) Filtre complet : pas de temps irrégulier (gain à adapter), mesures manquantes (sauter la correction, laisser P croître), fusion de deux capteurs de précisions différentes (mises à jour scalaires séquentielles). Ici la covariance vivante est indispensable.

Récapitulatif

La suite. Les prochains chapitres appliqués pousseront la fusion plus loin : combiner inclinomètre + gyromètre (une IMU), fusionner des capteurs de fréquences différentes, et aborder le non-linéaire concret (EKF/UKF) sur un cas d'attitude. Le socle — modéliser, régler, vérifier, choisir la structure — reste celui de ces deux chapitres.