Filtre de Kalman



Il existe de nombreux articles différents sur le filtre de Kalman, mais il est difficile de trouver celui qui contient une explication, d'où proviennent toutes les formules de filtrage. Je pense que sans comprendre cela, cette science devient complètement incompréhensible. Dans cet article, je vais essayer de tout expliquer de manière simple.

Le filtre de Kalman est un outil très puissant pour filtrer différents types de données. L'idée principale derrière cela est que l'on devrait utiliser une information sur le processus physique. Par exemple, si vous filtrez les données du compteur de vitesse d'une voiture, son inertie vous donne le droit de traiter un grand écart de vitesse comme une erreur de mesure. Le filtre de Kalman est également intéressant du fait qu'il est en quelque sorte le meilleur filtre. Nous discuterons précisément de ce que cela signifie. À la fin de l'article, je montrerai comment il est possible de simplifier les formules.

Préliminaires


Tout d'abord, mémorisons quelques définitions et faits de la théorie des probabilités.

Variable aléatoire


Quand on dit qu'on lui donne une variable aléatoire  xi , cela signifie qu'il peut prendre des valeurs aléatoires. Différentes valeurs viennent avec des probabilités différentes. Par exemple, si quelqu'un lance un dé, alors l'ensemble de valeurs est discret \ {1,2,3,4,5,6 \}\ {1,2,3,4,5,6 \} . Lorsque vous traitez avec une vitesse de déplacement des particules, vous devez évidemment travailler avec un ensemble continu de valeurs. Les valeurs qui sortent après chaque expérience (mesure) que nous dénoterions x1,x2,... , mais parfois nous utilisons la même lettre que celle que nous utilisons pour une variable aléatoire  xi . Dans le cas d'un ensemble continu de valeurs, une variable aléatoire est caractérisée par sa fonction de densité de probabilité  rho(x) . Cette fonction montre une probabilité que la variable aléatoire tombe dans un petit voisinage dx du point x . Comme nous pouvons le voir sur l'image, cette probabilité est égale à l'aire du rectangle hachuré sous le graphique  rho(x)dx .

Très souvent dans notre vie, les variables aléatoires ont la distribution de Gauss, lorsque la densité de probabilité est  rho(x) sime frac(x mu)22 sigma2 .

Nous pouvons voir que la fonction en forme de cloche  rho(x) est centré au point  mu et sa largeur caractéristique est d'environ  sigma .
Puisque nous parlons de la distribution gaussienne, alors ce serait un péché de ne pas mentionner d'où il vient. Ainsi que le nombre e et  pi sont fermement pénétrés dans les mathématiques et peuvent être trouvés dans les endroits les plus inattendus, donc la distribution gaussienne a des racines profondes dans la théorie des probabilités. L'énoncé remarquable suivant explique en partie la présence de la distribution de Gauss dans de nombreux processus:
Soit une variable aléatoire  xi a une distribution arbitraire (en fait, il existe certaines restrictions à l'arbitraire, mais elles ne le sont pas du tout). Jouons n expériences et calculer une somme  xi1+...+ xin , des valeurs tombées. Faisons beaucoup d'expériences. Il est clair que nous obtiendrons à chaque fois une valeur différente de la somme. En d'autres termes, cette somme est une variable aléatoire avec sa propre loi de distribution. Il s'avère que pour suffisamment grand n , la loi de distribution de cette somme tend à une distribution gaussienne (au fait, la largeur caractéristique d'une cloche croît comme  sqrtn . En savoir plus sur Wikipedia: Théorème central limite . Dans la vie réelle, il y a beaucoup de valeurs qui sont une somme d'un grand nombre de variables aléatoires indépendantes et identiquement distribuées. Ces valeurs ont donc la distribution de Gauss.

Signification valeur


Par définition, une valeur moyenne d'une variable aléatoire est une valeur que nous obtenons dans une limite si nous effectuons de plus en plus d'expériences et calculons une moyenne de valeurs tombées. Une valeur moyenne est notée de différentes manières: les mathématiciens désignent par E xi (attente), les physiciens le désignent par  overline xi ou < xi> . Nous le désignerons comme le font les mathématiciens.

Par exemple, une valeur moyenne de la distribution gaussienne  rho(x) sime frac(x mu)22 sigma2 est égal à  mu .

Écart


Pour la distribution gaussienne, nous voyons clairement que la variable aléatoire a tendance à tomber dans une certaine région de sa valeur moyenne  mu . Profitons à nouveau de la distribution gaussienne:

Sur l'image, on peut voir qu'une largeur caractéristique d'une région où les valeurs chutent le plus est  sigma . Comment pouvons-nous estimer cette largeur pour une variable aléatoire arbitraire? Nous pouvons dessiner un graphique de sa fonction de densité de probabilité et évaluer simplement visuellement la plage caractéristique. Cependant, il serait préférable de choisir une méthode algébrique précise pour cette évaluation. Nous pouvons trouver une longueur moyenne d'écart par rapport à la valeur moyenne: E| xiE xi| . Cette valeur est une bonne estimation d'un écart caractéristique de  xi . Cependant, nous savons très bien à quel point il est problématique d'utiliser des valeurs absolues dans les formules, cette formule est donc rarement utilisée dans la pratique.

Une approche plus simple (simple du point de vue du calcul) consiste à calculer E( xiE xi)2 .

Cette valeur appelée variance et notée par  sigma xi2 . La racine quadratique de la variance est une bonne estimation de l'écart caractéristique de la variable aléatoire. C'est ce qu'on appelle l'écart type.

Par exemple, on peut calculer cela pour la distribution gaussienne  rho(x) sime frac(x mu)22 sigma2 la variance est égale à  sigma2 ainsi l'écart type est  sigma . Ce résultat correspond vraiment à notre intuition géométrique. En fait, une petite tricherie est cachée ici. En fait, dans une définition de la distribution de Gauss, vous voyez le nombre 2 dans un dénominateur d'expression  frac(x mu)22 sigma2 . Ce 2 se tient là dans le but, pour l'écart type  sigma xi être exactement égal à  sigma . La formule de la distribution de Gauss est donc écrite d'une manière qui tient compte du fait que l'on calculerait son écart type.

Variables aléatoires indépendantes


Les variables aléatoires peuvent dépendre les unes des autres ou non. Imaginez que vous jetez une aiguille sur le sol et mesurez les coordonnées de ses deux extrémités. Ces deux coordonnées sont des variables aléatoires, mais elles dépendent l'une de l'autre, car une distance entre elles doit toujours être égale à la longueur de l'aiguille. Les variables aléatoires sont indépendantes les unes des autres si la baisse des résultats de la première ne dépend pas des résultats de la seconde. Pour deux variables indépendantes  xi1 et  xi2 la moyenne de leur produit est égale au produit de leur moyenne: E( xi1 cdot xi2)=E xi1 cdot xi2
Preuve
Par exemple, avoir les yeux bleus et terminer une école avec les honneurs les plus élevés sont des variables aléatoires indépendantes. Disons qu'il y a 20 $ \% = 0,2 $ de personnes aux yeux bleus et 5 $ \% = 0,05 $ des personnes avec les honneurs les plus élevés. Il y a donc 0,2 $ \ cdot 0,5 = 0,01 = 1 \% $ des personnes aux yeux bleus et aux honneurs supérieurs. Cet exemple nous aide à comprendre ce qui suit. Pour deux variables aléatoires indépendantes  xi1 et  xi2 qui sont donnés par leur densité de probabilité  rho1(x) et  rho2(y) , la densité de probabilité  rho(x,y) (la première variable tombe à x et le second à y ) peut être trouvé par la formule

 rho(x,y)= rho1(x) cdot rho2(y)


Cela signifie que

 beginarrayl displaystyleE( xi1 cdot xi2)= intxy rho(x,y)dxdy= intxy rho1(x) rho2(y)dxdy= displaystyle intx rho1(x)dx inty rho2(y)dy=E xi1 cdotE xi2 endarray


Comme vous le voyez, la preuve est faite pour des variables aléatoires qui ont un spectre continu de valeurs et qui sont données par leur densité de fonction de probabilité. La preuve est similaire pour le cas général.

Filtre de Kalman


Énoncé du problème


Soit dénoté par xk une valeur que nous comptons mesurer puis filtrer. Il peut s'agir d'une coordonnée, de la vitesse, de l'accélération, de l'humidité, de la température, de la pression, etc.

Commençons par un exemple simple qui nous conduira à la formulation du problème général. Imaginez que vous ayez une petite voiture radiocommandée qui ne peut fonctionner que vers l'avant et vers l'arrière. Connaissant sa masse, sa forme et d'autres paramètres du système, nous avons calculé comment la façon dont un joystick de contrôle agit sur la vitesse d'une voiture vk .


La coordonnée de la voiture serait par la formule suivante

xk+1=xk+vkdt


Dans la vraie vie, nous ne pouvons pas, nous ne pouvons pas avoir une formule précise pour les coordonnées, car de petites perturbations agissent sur la voiture comme le vent, les bosses, les pierres sur la route, donc la vitesse réelle de la voiture sera différente de celle calculée. . Nous ajoutons donc une variable aléatoire  xik à droite de la dernière équation:

xk+1=xk+vkdt+ xik



Nous avons également un capteur GPS sur la voiture qui essaie de mesurer les coordonnées de la voiture xk . Bien sûr, il y a une erreur dans cette mesure, qui est une variable aléatoire  etak . Donc, à partir du capteur, nous obtiendrions des données erronées:

zk=xk+ etak



Notre objectif est de trouver une bonne estimation de la vraie coordonnée xk , connaître les données d'un mauvais capteur zk . Cette bonne estimation sera notée xopt .
En général, les coordonnées xk peut représenter n'importe quelle valeur (température, humidité, ...) et l'élément de contrôle que nous désignons par uk (dans l'exemple avec une voiture uk=vk cdotdt ) Les équations pour les coordonnées et les mesures des capteurs seraient les suivantes:

(1)

Voyons ce que nous savons dans ces équations.
  • uk est une valeur connue qui contrôle une évolution du système. Nous le savons grâce au modèle du système.
  • La variable aléatoire  xi représente l'erreur dans le modèle du système et la variable aléatoire  eta est une erreur de capteur. Leurs lois de distribution ne dépendent pas du temps (sur l'indice d'itération k )
  • Les moyennes des erreurs sont égales à zéro: E etak=E xik=0 .
  • Nous ne connaissons peut-être pas la loi de distribution des variables aléatoires, mais nous connaissons leurs variances  sigma xi et  sigma eta . Notez que les écarts ne dépendent pas du temps (sur k ), puisque les lois de distribution correspondantes non plus.
  • Nous supposons que toutes les erreurs aléatoires sont indépendantes les unes des autres: l'erreur au moment k ne dépend pas de l'erreur à l'époque k .

Notez qu'un problème de filtration n'est pas un problème de lissage. Notre objectif n'est pas de lisser les données d'un capteur, nous voulons juste obtenir la valeur la plus proche possible de la coordonnée réelle xk .

Algorithme de Kalman


Nous utiliserions une induction. Imaginez qu'à l'étape k nous avons déjà trouvé la valeur du capteur filtré xopt , qui est une bonne estimation de la coordonnée réelle xk . Rappelons que nous connaissons l'équation qui contrôle la coordonnée réelle:

xk+1=xk+uk+ xik



Par conséquent, avant d'obtenir la valeur du capteur, nous pouvons déclarer qu'il affichera la valeur qui est proche de xopt+uk . Malheureusement, jusqu'à présent, nous ne pouvons pas dire quelque chose de plus précis. Mais au pas k+1 nous aurions une lecture non précise du capteur zk+1 .
L'idée de Kalman est la suivante. Pour obtenir la meilleure estimation de la coordonnée réelle xk+1 nous devrions obtenir un milieu doré entre la lecture du capteur non précis zk+1 et xopt+uk - notre prédiction, ce que nous nous attendions à voir sur le capteur. Nous donnerons un poids K à la valeur du capteur et (1K) à la valeur prédite:

xoptk+1=K cdotzk+1+(1K) cdot(xoptk+uk)


Le coefficient K est appelé coefficient de Kalman. Cela dépend de l'indice d'itération, et à proprement parler, nous devrions plutôt écrire Kk+1 . Mais pour garder les formules dans une belle forme, nous omettions l'indice de K .
Nous devons choisir le coefficient de Kalman de manière à ce que la coordonnée estimée xoptk+1 serait aussi proche que possible des coordonnées réelles xk+1 .
Par exemple, si nous savons que notre capteur est très super précis, nous ferons confiance à sa lecture et lui donnerons un poids important ( K est proche de 1). Si le capteur à l'inverse n'est pas précis du tout, alors nous nous baserions sur notre valeur théoriquement prédite xoptk+uk .
En situation générale, il faut minimiser l'erreur de notre estimation:

ek+1=xk+1xoptk+1


Nous utilisons les équations (1) (celles qui sont sur un cadre bleu), pour réécrire l'équation de l'erreur:

ek+1=(1K)(ek+ xik)K etak+1


Preuve

 beginarraylek+1=xk+1xoptk+1=xk+1Kzk+1(1K)(xoptk+uk)==xk+uk+ xikK(xk+uk+ xik+ etak+1)(1K)(xoptk+uk)==(1K)(xkxoptk+ xik)K etak+1=(1K)(ek+ xik)K etak+1 endarray



Maintenant vient le moment de discuter, que signifie l'expression «minimiser l'erreur»? Nous savons que l'erreur est une variable aléatoire, donc à chaque fois qu'elle prend des valeurs différentes. En fait, il n'y a pas de réponse unique à cette question. De même, c'était dans le cas de la variance d'une variable aléatoire, lorsque nous essayions d'estimer la largeur caractéristique de sa fonction de densité de probabilité. Nous choisirions donc un critère simple. Nous minimiserions une moyenne du carré:

E(e2k+1) rightarrowmin


Réécrivons la dernière expression:

E(e2k+1)=(1K)2(E2k+ sigma2 xi)+K2 sigma2 eta


Clé de la preuve
Du fait que toutes les variables aléatoires de l'équation de ek+1 ne dépendent pas les uns des autres et des valeurs moyennes E etak+1=E xik=0 , s'ensuit que tous les termes croisés E(e2k+1) devenir des zéros:

E( xik etak+1)=E(ek xik)=E(ek etak+1)=0.


En effet par exemple E(ek xik)=E(ek)E( xik)=0.
Notez également que les formules des variances semblent beaucoup plus simples:  sigma2 eta=E eta2k et  sigma2 eta=E eta2k+1 (depuis E etak+1=E xik=0 )

La dernière expression prend sa valeur minimale, lorsque sa dérivation est nulle. Alors quand:

 displaystyleKk+1= fracEe2k+ sigma2 xiEe2k+ sigma2 xi+ sigma2 eta


Ici, nous écrivons le coefficient de Kalman avec son indice, nous insistons donc sur le fait qu'il dépend de l'étape d'itération. Nous remplaçons l'équation de l'erreur quadratique moyenne E(e2k+1) le coefficient de Kalman Kk+1 qui minimisent sa valeur:

 displaystyleE(e2k+1)= frac sigma2 eta(Ee2k+ sigma2 xi)Ee2k+ sigma2 xi+ sigma2 eta


Nous avons donc résolu notre problème. Nous avons obtenu la formule itérative pour calculer le coefficient de Kalman.
Toutes les formules en un seul endroit



Exemple


Sur l'intrigue du début de cet article, il y a des données filtrées du capteur GPS fictif, installées sur la voiture fictive, qui se déplace avec l'accélération constante a .

xt+1=xt+à cdotdt+ xit


Regardez à nouveau les résultats filtrés:


Code dans matlab
clear all; N=100 % number of samples a=0.1 % acceleration sigmaPsi=1 sigmaEta=50; k=1:N x=k x(1)=0 z(1)=x(1)+normrnd(0,sigmaEta); for t=1:(N-1) x(t+1)=x(t)+a*t+normrnd(0,sigmaPsi); z(t+1)=x(t+1)+normrnd(0,sigmaEta); end; %kalman filter xOpt(1)=z(1); eOpt(1)=sigmaEta; % eOpt(t) is a square root of the error dispersion (variance). % It's not a random variable. for t=1:(N-1) eOpt(t+1)=sqrt((sigmaEta^2)*(eOpt(t)^2+sigmaPsi^2)/(sigmaEta^2+eOpt(t)^2+sigmaPsi^2)) K(t+1)=(eOpt(t+1))^2/sigmaEta^2 xOpt(t+1)=(xOpt(t)+a*t)*(1-K(t+1))+K(t+1)*z(t+1) end; plot(k,xOpt,k,z,k,x) 


Analyse


Si l'on regarde comment le coefficient de Kalman Kk changements depuis l'itération k , il est possible de voir qu'il se stabilise à une certaine valeur Kstab . Par exemple, si les erreurs quadratiques moyennes du capteur et du modèle se respectent comme dix à un, le tracé de la dépendance du coefficient de Kalman à partir de l'étape d'itération serait le suivant:


Dans l'exemple suivant, nous discuterons de la façon dont cela peut simplifier notre vie.

Deuxième exemple


En pratique, il arrive que nous ne sachions presque rien du modèle physique ce que nous filtrons. Imaginez que vous avez décidé de filtrer ces mesures à partir de votre accéléromètre préféré. En fait, vous ne savez pas en avant comment l'accéléromètre serait déplacé. La seule chose que vous savez peut-être est la variance de l'erreur du capteur  sigma2 eta . Dans ce problème difficile, nous pourrions mettre toutes les informations inconnues du modèle physique à la variable aléatoire  xik :

xk+1=xk+ xik


À proprement parler, ce type de système ne satisfait pas la condition que nous avons imposée à la variable aléatoire  xik . Puisqu'il contient les informations inconnues pour nous la physique du mouvement. Nous ne pouvons pas dire que ce moment de temps différent les erreurs sont indépendantes les unes des autres et leurs moyennes sont égales à zéro. En d'autres termes, cela signifie que pour ce type de situations, la théorie de Kalman n'est pas appliquée. Mais de toute façon, nous pouvons essayer d'utiliser la machinerie de la théorie de Kalman simplement en choisissant des valeurs raisonnables pour  sigma xi2 et  sigma eta2 pour obtenir juste un joli graphique de données filtrées.
Mais il existe un moyen beaucoup plus simple. Nous avons vu qu'avec l'augmentation de l'étape k le coefficient de Kalman se stabilise toujours à une certaine valeur Kstab . Donc au lieu de deviner les valeurs des coefficients  sigma2 xi et  sigma2 eta et calculer le coefficient de Kalman Kk par des formules difficiles, on peut supposer que ce coefficient est constant et ne sélectionner que cette constante. Cette hypothèse n'affecterait pas beaucoup les résultats de filtrage. Au début, de toute façon, la machinerie de Kalman n'est pas exactement applicable à notre problème et deuxièmement, le coefficient de Kalman se stabilise rapidement à la constante. Au final, tout devient très simple. Nous n'avons pas besoin de presque n'importe quelle formule de la théorie de Kalman, nous avons juste besoin de sélectionner une valeur raisonnable Kstab et l'insérer dans la formule itérative

xoptk+1=Kstab cdotzk+1+(1Kstab) cdotxoptk


Sur le graphique suivant, vous pouvez voir les mesures filtrées de deux manières différentes à partir d'un capteur imaginaire. La première méthode est honnête, avec toutes les formules de la théorie de Kalman. La deuxième méthode est la méthode simplifiée.


Nous voyons qu'il n'y a pas de grande différence entre deux méthodes. Il y a une petite variation au début, lorsque le coefficient de Kalman n'est toujours pas stabilisé.

Discussionion


Nous avons vu que l'idée principale du filtre de Kalman est de choisir le coefficient K d'une manière que la valeur filtrée

xoptk+1=Kzk+1+(1K)(xoptk+uk)


en moyenne serait aussi proche que possible des coordonnées réelles xk+1 . On voit que la valeur filtrée xoptk+1 est une fonction linéaire de la mesure du capteur zk+1 et la valeur filtrée précédente xoptk . Mais la valeur filtrée précédente xoptk lui-même est une fonction linéaire de la mesure du capteur zk et la valeur filtrée pré-précédente xoptk1 . Et ainsi de suite jusqu'à la fin de la chaîne. La valeur filtrée dépend donc linéairement de toutes les lectures précédentes du capteur:

xoptk+1= lambda+ lambda0z0+ ldots+ lambdak+1zk+1


C'est une raison pour laquelle le filtre de Kalman est appelé filtre linéaire. Il est possible de prouver que le filtre de Kalman est le meilleur de tous les filtres linéaires. Le meilleur dans le sens où il minimise une moyenne carrée de l'erreur.

Cas multidimensionnel


Il est possible de généraliser toute la théorie de Kalman au cas multidimensionnel. Les formules y semblent un peu plus élaborées, mais l'idée de leur dérivation reste la même que dans une seule dimension. Par exemple, dans cette belle vidéo, vous pouvez voir l'exemple.

Littérature


L'article original écrit par Kalman, vous pouvez le télécharger ici:
http://www.cs.unc.edu/~welch/kalman/media/pdf/Kalman1960.pdf

Source: https://habr.com/ru/post/fr436248/


All Articles