🎯 Filtre de Kalman · fondements théoriques

Chapitre 11 · Application
Vitesse depuis un inclinomètre : construire le modèle

Première application. On quitte la théorie pure pour un problème concret et fréquent en automatisme : estimer une vitesse angulaire à partir d'un capteur qui ne mesure que l'angle (inclinomètre, capteur de tangage/roulis d'une nacelle, d'un mât, d'un plateau). Ce chapitre construit le modèle — pas à pas, du plus simple au plus fidèle. Le chapitre 12 le règlera, le vérifiera et choisira sa structure d'implémentation sur PLC.

Objectifs du chapitre

1. Pourquoi pas une simple dérivée ?

La tentation première est de calculer la vitesse par différence finie : ω ≈ (θₖ − θₖ₋₁) / dt. C'est un désastre. La dérivation amplifie le bruit : si l'angle porte un bruit d'écart-type σθ, la différence finie porte un bruit d'écart-type σθ·√2 / dt. Avec σθ = 0,4° et dt = 10 ms, cela fait déjà ≈ 57 °/s de bruit — largement plus que le signal utile. Diviser par un petit dt multiplie le bruit d'autant.

Vitesse angulaire en fonction du temps. La dérivée brute de l'angle bruité (ambre) est un nuage de bruit d'amplitude ±60 deg/s qui masque complètement le signal. La vitesse vraie (tirets gris) est une sinusoïde douce d'amplitude 30 deg/s. L'estimation de Kalman (vert) suit fidèlement la vitesse vraie en lissant tout le bruit.
Figure 11.1. La dérivée brute Δθ/Δt (ambre) est noyée dans le bruit — le bruit de mesure, divisé par dt, explose. Le filtre de Kalman (vert) reconstruit la vitesse vraie (tirets) proprement, parce qu'il n'oppose pas « dériver » à « lisser » : il infère la vitesse à partir d'un modèle de mouvement et de la cohérence des angles successifs.

La différence de fond : la dérivée brute ne regarde que deux points et les croit aveuglément. Le filtre de Kalman intègre tout l'historique via son état, pondéré par les incertitudes. Il ne dérive pas l'angle — il estime une vitesse compatible avec la suite des angles et avec un modèle de mouvement. C'est un lissage et une dérivation optimaux et simultanés.

2. Le modèle 1er ordre : vitesse quasi-constante

Le modèle le plus simple et le plus utile. On suppose que, sur un pas, la vitesse angulaire est presque constante — les variations sont traitées comme du bruit de process. L'état réunit l'angle et la vitesse :

x = [ θ , ω ]ᵀ

La cinématique θ̇ = ω, ω̇ = 0 (aux perturbations près) se discrétise sur un pas dt en :

F = [[ 1 , dt ],[ 0 , 1 ]]    H = [ 1 , 0 ]

H = [1, 0] traduit « le capteur ne voit que l'angle, pas la vitesse ». C'est exactement le cas position-vitesse du cours théorique (chapitre 5), transposé à l'angulaire. La vitesse sera reconstruite par le couplage θω que F installe dans P.

2.1 Le bruit de mesure R

R = [σθ²] est un scalaire : la variance du bruit d'angle de l'inclinomètre. On la lit sur la fiche technique (densité de bruit, ou résolution/répétabilité) ou on la mesure capteur immobile, en calculant la variance empirique de quelques milliers d'échantillons. C'est un fait mesurable, pas un réglage.

2.2 Le bruit de process Q

Q exprime « à quel point la vitesse peut varier entre deux pas ». Le modèle standard suppose une accélération angulaire aléatoire d'écart-type σα, constante sur le pas. Elle agit sur l'état par le vecteur g = [dt²/2, dt]ᵀ (une accélération déplace l'angle de ½α·dt² et la vitesse de α·dt), d'où Q = σα² · g·gᵀ :

Q = σα² · [[ dt⁴/4 , dt³/2 ],[ dt³/2 , dt² ]]

Les termes croisés ne sont pas décoratifs : une accélération non modélisée affecte ensemble angle et vitesse, leur bruit est donc corrélé. σα est le vrai curseur de réglage — on y revient au chapitre 12. Physiquement, on le choisit de l'ordre de la plus forte accélération angulaire que le système peut subir sans qu'on la commande.

// SCL — un pas du filtre 1er ordre [θ, ω], mesure d'angle seule.
// Types LREAL (double). dt fixe imposé par l'OB cyclique.
// --- Prédiction : x⁻ = F·x ,  P⁻ = F·P·Fᵀ + Q ---
th_p  := #th + #om * #dt;                 // θ⁻ = θ + ω·dt
om_p  := #om;                             // ω⁻ = ω
// P⁻ = F·P·Fᵀ + Q  (développé à la main pour 2×2, sans boucle matricielle)
p00_p := #P00 + #dt*(#P10 + #P01) + #dt*#dt*#P11 + #q00;
p01_p := #P01 + #dt*#P11 + #q01;
p10_p := #P10 + #dt*#P11 + #q01;          // symétrique de p01
p11_p := #P11 + #q11;

// --- Correction avec la mesure d'angle z (H = [1 0], R scalaire) ---
S   := p00_p + #R;                        // S = H·P⁻·Hᵀ + R
k0  := p00_p / S;                         // gain sur θ
k1  := p10_p / S;                         // gain sur ω
y   := #z - th_p;                         // innovation
#th := th_p + k0 * y;
#om := om_p + k1 * y;                      // ← la vitesse estimée, jamais mesurée
// P = (I - K·H)·P⁻  (forme de Joseph au chapitre 12)
#P00 := (1.0 - k0) * p00_p;
#P01 := (1.0 - k0) * p01_p;
#P10 := p10_p - k1 * p00_p;
#P11 := p11_p - k1 * p01_p;

Aucune inversion de matrice : la mesure est scalaire, donc S l'est aussi et le « gain » est une simple division. C'est ce qui rend ce filtre si léger sur automate — un point sur lequel le chapitre 12 s'appuiera lourdement.

3. Le modèle 2e ordre : accélération quasi-constante

Le modèle 1er ordre suppose la vitesse constante. Dès que la vitesse varie durablement — une rampe d'accélération, un démarrage, un freinage commandé — cette hypothèse est fausse pendant toute la variation, et le filtre traîne : son estimation de vitesse reste en retard sur la réalité tant que dure l'accélération. On le voit nettement sur la figure suivante.

Vitesse angulaire en fonction du temps, avec une rampe : la vitesse vraie (tirets) reste nulle jusqu'à t=1s, monte linéairement jusqu'à 55 deg/s entre 1 et 2s, puis reste constante. Le filtre d'ordre 1 (bleu) reste visiblement en dessous de la vitesse vraie pendant toute la rampe (il traîne), puis rattrape sur le plateau. Le filtre d'ordre 2 (vert) suit la rampe presque sans retard, au prix d'un peu plus de bruit sur le plateau.
Figure 11.2. Sur une rampe de vitesse (accélération soutenue), le modèle d'ordre 1 (bleu) reste en retard tant que dure la rampe : son hypothèse « vitesse constante » est violée. Le modèle d'ordre 2 (vert), qui estime aussi l'accélération, suit la rampe presque sans retard. Contrepartie visible sur le plateau : un peu plus de bruit, car un état plus riche laisse passer plus d'incertitude.

On enrichit alors l'état d'une composante d'accélération angulaire :

x = [ θ , ω , α ]ᵀ     F = [[ 1 , dt , dt²/2 ],[ 0 , 1 , dt ],[ 0 , 0 , 1 ]]    H = [ 1 , 0 , 0 ]

Le bruit de process porte maintenant sur le jerk (dérivée de l'accélération), d'écart-type σj, via g = [dt³/6, dt²/2, dt]ᵀ et Q = σj² · g·gᵀ. On mesure toujours le seul angle : le filtre reconstruit vitesse et accélération à partir de la seule série des angles.

Ne prenez pas systématiquement l'ordre 2 « pour être sûr ». Chaque état supplémentaire ajoute de la variance à l'estimation et rend le réglage plus délicat. Règle pratique : ordre 1 si les variations de vitesse sont brèves ou rares (le Q les absorbe) ; ordre 2 si le système subit des accélérations soutenues qu'on veut suivre sans retard (mât qui bascule, plateau qui accélère longuement). Au chapitre 12, le test de cohérence tranchera objectivement.

4. Inclure le retard du capteur

Un inclinomètre réel n'est jamais instantané. Son signal est retardé par rapport à l'angle physique, pour deux raisons de natures différentes qu'il faut distinguer et modéliser séparément.

4.1 Le retard dynamique (filtrage interne)

Beaucoup d'inclinomètres (à pendule amorti, à fluide, ou MEMS avec filtre anti-repliement) se comportent comme un passe-bas du 1er ordre : leur sortie θ_m suit l'angle vrai θ avec une constante de temps τ :

τ · θ̇_m = θ − θ_m

On lit τ depuis la bande passante annoncée (τ ≈ 1 / (2π·f_c)). La bonne méthode : augmenter l'état de la sortie capteur θ_m, et déclarer que c'est elle qu'on mesure. Pour l'ordre 1 :

x = [ θ , ω , θ_m ]ᵀ     F = [[ 1 , dt , 0 ],[ 0 , 1 , 0 ],[ dt/τ , 0 , 1 − dt/τ ]]    H = [ 0 , 0 , 1 ]

Le filtre estime alors l'angle vrai θ (et sa vitesse), tout en sachant que le capteur ne lui montre qu'une version retardée θ_m. Il peut ainsi « devancer » le capteur et récupérer la phase perdue.

Vitesse angulaire sinusoïdale en fonction du temps. La vitesse vraie (tirets gris) est en avance de phase. Le filtre sans modèle de retard (bleu) est nettement décalé en retard sur la vérité. Le filtre avec retard modélisé (vert) est beaucoup plus proche de la vérité, avec un décalage résiduel faible.
Figure 11.3. Un retard capteur non modélisé (bleu) décale la vitesse estimée en retard de phase — dangereux dans une boucle de régulation. En modélisant la dynamique du capteur (vert), le filtre récupère l'essentiel de la phase. Le léger retard résiduel du vert est la latence propre du filtre (Q fini) ; on le réduit encore en desserrant Q, au prix d'un peu de bruit.

Un retard non modélisé n'est pas qu'une question de précision : dans une boucle fermée (la vitesse estimée sert à réguler), un retard de phase ampute la marge de phase et peut faire osciller, voire diverger l'asservissement. C'est souvent la vraie raison qui impose de modéliser le retard, bien plus que l'erreur en boucle ouverte.

4.2 Le retard de transport (temps mort)

Autre nature : un temps mort pur de d pas — communication bus (Profinet, IO-Link, CAN), échantillonnage asynchrone, traitement du capteur. La mesure d'aujourd'hui reflète l'angle d'il y a d cycles : zₖ = θₖ₋d + bruit. On le modélise par un registre à décalage dans l'état — on empile les d derniers angles et on observe le plus ancien :

x = [ θₖ , ω , θₖ₋₁ , … , θₖ₋d ]ᵀ    H observe θₖ₋d

F propage la dynamique sur (θ, ω) et décale les anciens angles d'un cran à chaque pas. Le coût est d états de plus — acceptable pour un petit temps mort. Pour un grand retard, on préfère la rétrodiction (corriger l'état passé mémorisé puis re-propager), plus subtile, hors de portée de ce chapitre.

En pratique, les deux retards coexistent : une constante de temps τ (dynamique interne) plus quelques pas de temps mort bus. On modélise celui qui domine, ou les deux si l'application est sensible à la phase. Mesurer le retard total : injecter un échelon d'angle connu et chronométrer la réponse du capteur.

5. Inclure la commande (anticipation)

Si l'on pilote le mouvement — un moteur qui incline le plateau, un vérin qui lève le mât — on connaît la commande envoyée. C'est de l'information gratuite et certaine. Supposons qu'on commande une accélération angulaire u = α_cmd (couple/courant moteur connu). On l'injecte dans la prédiction de l'ordre 1 par :

x⁻ = F·x + B·u    avec   B = [ dt²/2 , dt ]ᵀ

L'effet est spectaculaire : le mouvement commandé n'est plus une « surprise » à absorber par Q. On peut donc réduire Q (il ne couvre plus que la perturbation non commandée), ce qui rend le filtre à la fois plus précis et moins en retard.

Vitesse angulaire en fonction du temps, avec une commande d'accélération en créneaux qui fait monter puis descendre la vitesse en trapèze. Le filtre sans commande (bleu) est en léger retard aux changements de pente. Le filtre avec la commande B·u (vert) colle à la vitesse vraie, y compris aux transitions.
Figure 11.4. Quand le mouvement est commandé, injecter la commande B·u dans la prédiction (vert) fait coller l'estimation à la vitesse vraie, y compris aux transitions — là où le filtre sans commande (bleu), qui doit « découvrir » chaque changement via la seule mesure, prend du retard. La commande transforme le filtre en anticipateur.

u doit être l'accélération réellement exécutée, pas seulement demandée. La dynamique de l'actionneur, la saturation, un couple de charge non modélisé font que la commande n'est pas suivie parfaitement. Deux parades : modéliser la dynamique de l'actionneur (encore de l'augmentation d'état), ou garder un Q suffisant pour couvrir l'écart commande↔exécution. Une commande fausse injectée avec un Q trop petit fait diverger le filtre avec assurance.

Exercices

Exercice 1 — Dimensionner Q à partir de la physique

Un plateau peut subir des accélérations angulaires non commandées allant jusqu'à ≈ 50 °/s² (chocs, vent). On échantillonne à dt = 5 ms. Donnez un point de départ raisonnable pour σα et la forme de Q du modèle 1er ordre.

Voir la solution

On prend σα de l'ordre de l'accélération maximale plausible, soit σα ≈ 50 °/s². Avec dt = 0,005 :

Q = 50² · [[ dt⁴/4 , dt³/2 ],[ dt³/2 , dt² ]] = 2500 · [[ 1,56·10⁻¹⁰ , 6,25·10⁻⁸ ],[ 6,25·10⁻⁸ , 2,5·10⁻⁵ ]]

Soit Q ≈ [[3,9·10⁻⁷, 1,6·10⁻⁴],[1,6·10⁻⁴, 0,0625]] (unités deg² et deg²/s²). C'est un point de départ : le chapitre 12 l'ajustera par le test de cohérence jusqu'à ce que l'innovation soit blanche. L'ordre de grandeur, lui, vient de la physique.

Exercice 2 — Choisir la structure d'état

Pour chacun de ces cas, dites quel état choisir : (a) une nacelle stabilisée qui oscille lentement, capteur rapide ; (b) un mât qu'on relève par un vérin commandé, avec un inclinomètre à fluide amorti (bande passante 2 Hz) ; (c) un plateau dont la vitesse fait de longues rampes.

Voir la solution
  • (a) Ordre 1 [θ, ω] suffit : oscillations lentes, pas d'accélération soutenue, capteur sans retard notable.
  • (b) Ordre 1 avec commande B·u (le vérin est piloté) et augmentation du retard θ_m : τ ≈ 1/(2π·2) ≈ 80 ms, non négligeable. État [θ, ω, θ_m].
  • (c) Ordre 2 [θ, ω, α] : les longues rampes de vitesse sont des accélérations soutenues qu'un ordre 1 suivrait en retard.

Le bon modèle épouse la physique dominante — ni trop pauvre (il traîne ou biaise), ni trop riche (il bruite et se règle mal).

Récapitulatif