31.10.2014 Views

TP-Filtrage De Kalman Appliquée `a la poursuite de cible mobile ...

TP-Filtrage De Kalman Appliquée `a la poursuite de cible mobile ...

TP-Filtrage De Kalman Appliquée `a la poursuite de cible mobile ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>TP</strong>-<strong>Filtrage</strong> <strong>De</strong> <strong>Kalman</strong> Appliquée à <strong>la</strong> <strong>poursuite</strong> <strong>de</strong> <strong>cible</strong> <strong>mobile</strong><br />

MAT4501<br />

Yohan Petetin, Emmanuel Monfrini, François <strong>De</strong>sbouvries<br />

23/02/2012<br />

1 Introduction<br />

Le but <strong>de</strong> ce <strong>TP</strong> est <strong>de</strong> voir une application du filtre <strong>de</strong> <strong>Kalman</strong> étudié en cours. Ce filtre, qui vise à<br />

retrouver les paramètres d’un signal caché à partir d’un signal observé sous certaines contraintes est utilisé<br />

dans <strong>de</strong> nombreux modèles (en finance par exemple, pour l’estimation <strong>de</strong> vo<strong>la</strong>tilité stochastique ...) mais nous<br />

nous intéressons ici à <strong>la</strong> <strong>poursuite</strong> <strong>de</strong> <strong>cible</strong> <strong>mobile</strong>.<br />

2 Scénario <strong>de</strong> <strong>poursuite</strong><br />

2.1 Modélisation du Problème<br />

On désire poursuivre une <strong>cible</strong>, en supposant que <strong>la</strong> dynamique <strong>de</strong> celle-ci est à peu près linéaire et sa<br />

vitesse à peu près constante. Ce n’est jamais le cas en réalité (d’où le terme à peu près) puisque <strong>la</strong> <strong>cible</strong><br />

peut tourner légèrement, ou encore accélérer, et c’est pour cette raison qu’un modèle aléatoire se prête bien<br />

à <strong>la</strong> modélisation <strong>de</strong> <strong>la</strong> dynamique <strong>de</strong> <strong>la</strong> <strong>cible</strong>. Nous disposons d’un capteur qui relève <strong>de</strong>s informations sur<br />

<strong>la</strong> <strong>cible</strong> (signal observé) avec une pério<strong>de</strong> T e , ces informations étant une fonction <strong>de</strong>s paramètres d’état <strong>de</strong><br />

<strong>la</strong> <strong>cible</strong>. Le capteur n’est pas parfait ce qui induit <strong>de</strong>s erreurs <strong>de</strong> mesure. Le filtre <strong>de</strong> <strong>Kalman</strong> doit annuler le<br />

caractère aléatoire dû aux erreurs <strong>de</strong> mesure et à <strong>la</strong> dynamique inconnue <strong>de</strong> <strong>la</strong> <strong>cible</strong>.<br />

Nous modélisons le problème sous forme <strong>de</strong> 2 équations, appelées équation d’état (qui porte sur <strong>la</strong><br />

dynamique <strong>de</strong> <strong>la</strong> <strong>cible</strong>) et équation d’observation (qui porte sur les mesures du capteur).<br />

Ici, on s’intéresse à <strong>la</strong> position dans le p<strong>la</strong>n <strong>de</strong> <strong>la</strong> <strong>cible</strong> et à sa vitesse. Une réalisation du vecteur d’état à<br />

l’instant t = k s’écrit donc x k = [p x ,ṗ x ,p y ,ṗ y ] T t=k , où p x est l’abscisse <strong>de</strong> <strong>la</strong> <strong>cible</strong> et p˙<br />

x <strong>la</strong> vitesse en abscisse<br />

<strong>de</strong> <strong>la</strong> <strong>cible</strong> (i<strong>de</strong>m pour p y , en ordonné).<br />

Le capteur utilisé relève <strong>la</strong> position en abscisse et en ordonné <strong>de</strong> <strong>la</strong> <strong>cible</strong>. On observe donc <strong>de</strong>ux informations.<br />

Nous pouvons mettre le problème sous-équation :<br />

⎛ ⎞<br />

1 T e 0 0<br />

X k =<br />

⎜0 1 0 0<br />

⎟<br />

⎝0 0 1 T e<br />

⎠X k−1 +U k , (1)<br />

Y k =<br />

F k<br />

( )<br />

1 0 0 0<br />

X<br />

0 0 1 0 k +V k , (2)<br />

} {{ }<br />

0 0 0 1<br />

} {{ }<br />

H k<br />

X 0 ∼ N(m 0|0 ,P 0|0 ), (3)<br />

avec U k ∼ N(0 4×1 ,Q) (on a dim(U k ) = 4×1 et dim(Q) = 4×4), V k ∼ N(0 2×1 ,R) (on a dim(V k ) = 2×1<br />

et dim(R) ⎛ = 2 × 2). Dans ⎞les problématiques <strong>de</strong> <strong>poursuite</strong>, on choisit généralement Q sous <strong>la</strong> forme<br />

T 3 e T 2 e 3 2<br />

0 0<br />

T 2 ( )<br />

Q = σQ<br />

2 e 2<br />

T e 0 0<br />

σ<br />

2<br />

⎜ T<br />

⎝ 0 0<br />

3 e T 2 e<br />

⎟<br />

3 2 ⎠ et R = px<br />

0<br />

0 σ 2 . On suppose que <strong>la</strong> suite <strong>de</strong> vecteurs [U k ,V k ] T est<br />

p y<br />

T<br />

0 0<br />

2 e<br />

2<br />

T e<br />

indépendante,indépendante<strong>de</strong>X 0 etqueU k etV i sontindépendantsquelquessoientk eti(⇒ Covar(U k ,V i ) =<br />

0).<br />

1


2.2 Interprétation<br />

L’équation (1) assure par exemple que <strong>la</strong> position <strong>de</strong> <strong>la</strong> <strong>cible</strong> à l’instant k+1 est <strong>la</strong> position <strong>de</strong> <strong>la</strong> <strong>cible</strong> à<br />

l’instant k augmentée <strong>de</strong> sa vitesse, plus un terme <strong>de</strong> bruit <strong>de</strong> moyenne nulle. L’équation (2) assure que les<br />

informations observées sont les positions <strong>de</strong> <strong>la</strong> <strong>cible</strong> à l’instant k plus un terme d’erreur, <strong>de</strong> moyenne nulle lui<br />

aussi. Vérifiez rapi<strong>de</strong>ment cette interprétation. Notez que les matrices F, H, Q, et R ne dépen<strong>de</strong>nt pas <strong>de</strong><br />

k (cependant, ce<strong>la</strong> peut être le cas si l’on sait que <strong>la</strong> dynamique <strong>de</strong> <strong>la</strong> <strong>cible</strong> n’est plus <strong>la</strong> même à un instant<br />

donné).<br />

3 Implémentation d’un filtre <strong>de</strong> <strong>Kalman</strong><br />

3.1 But du <strong>TP</strong><br />

Le but du <strong>TP</strong> est <strong>de</strong> réaliser les taches suivantes :<br />

– Initialiser les paramètres du modèle (matrices F, Q, H, R, longueur du scénario etc...).<br />

– Générer une trajectoire aléatoire à partir <strong>de</strong> l’équation (1), qui servira <strong>de</strong> vérité terrain.<br />

– Générer un jeu d’observations <strong>de</strong> <strong>la</strong> trajectoire crée, à partir <strong>de</strong> l’équation 2). On ne travaillera QUE<br />

sur ces données (on suppose bien entendu qu’on ne dispose pas <strong>de</strong> <strong>la</strong> vérité terrain).<br />

– Implémenter <strong>de</strong> façon récursive le filtre <strong>de</strong> <strong>Kalman</strong>.<br />

– Tracer <strong>la</strong> vraie trajectoire dans le p<strong>la</strong>n, <strong>la</strong> trajectoire relevée par le capteur et <strong>la</strong> trajectoire estimée par<br />

le filtre <strong>de</strong> <strong>Kalman</strong>.<br />

Vous serez guidé sur les programmes à écrire. Chaque programme ne nécessite pas plus <strong>de</strong> 10 lignes <strong>de</strong><br />

comman<strong>de</strong>.<br />

3.2 Préliminaires<br />

1. Rappeler l’estimateur <strong>de</strong> X n qui à chaque instant minimise l’erreur quadratique moyenne.<br />

ici<br />

ici<br />

2. On note ˆx k|k = E[x k |y 0:k ] et P k|k = Covar[x k |y 0:k ]. Rappeler les équations qui permettent <strong>de</strong> passer<br />

<strong>de</strong> ˆx k|k et P k|k à ˆx k+1|k = E[x k+1 |y 0:k ] et P k+1|k = Covar[x k+1 |y 0:k ] (prédiction), puis à ˆx k+1|k+1 et<br />

P k+1|k+1 (mise-à-jour).<br />

3. Questions particulières à propos du <strong>De</strong>voir Maison?<br />

3.3 Partie Pratique 1 : Poursuite en coordonnées cartésiennes<br />

1. Créer un répertoire <strong>TP</strong> FDK, ouvrir MATLAB et créer un fichier ≪ principal.m ≫dans le dossier crée.<br />

2. Initialiser les variables suivantes : T e = 2 (perio<strong>de</strong> du capteur), T = 50 (longueur du scénario),<br />

sigma Q = 5, sigma px = 10, sigma py = 8, puis créer les matrices F, Q, H et R dont les valeurs sont<br />

données dans <strong>la</strong> partie 2.1. Initialiser x init = [3,10,−4,1] T qui servira à initaliser notre trajectoire,<br />

puis x kalm = x init (qui correspond à ˆx 0|0 ) et P kalm = I 4×4 (qui correspond à P 0|0 ) qui servent à<br />

initialiser les moyennes et Covariances du filtre <strong>de</strong> <strong>Kalman</strong>. On suppose donc ici qu’on connaît à peu<br />

près l’état initial <strong>de</strong> <strong>la</strong> <strong>cible</strong> puisque x kalm = x init.<br />

3. Ecrire <strong>la</strong> fonction x = creer trajectoire(F,Q,x init,T) qui prend en entrée les matrices F, Q, x init et<br />

T et qui retourne une matrice x <strong>de</strong> dimension 4×T, à partir <strong>de</strong> l’équation (1). On obtient donc une<br />

trajectoire aléatoire. Une fois créée, appeler cette fonction dans le programme principal à <strong>la</strong> suite <strong>de</strong><br />

l’initialisation <strong>de</strong> toute les variables.<br />

4. Ecrire <strong>la</strong> fonction y = creer observations(H,R,x,T) qui prend en entrée les matrices H et R, une<br />

matrice x <strong>de</strong> dimension 4×T, <strong>la</strong> durée du scénario T et qui retourne <strong>de</strong>s observations bruitées <strong>de</strong> <strong>la</strong><br />

trajectoire x créée précé<strong>de</strong>mment. On obtient donc une matrice y <strong>de</strong> dimension 2 × T. Appeler cette<br />

fonction dans le programme principal.<br />

5. Tracer sur une même figure <strong>la</strong> vraie trajectoire et <strong>la</strong> trajectoire observée, d’une couleur différente. Cette<br />

étape vous permettra <strong>de</strong> vérifier que vos fonctions sont écrites correctement.<br />

2


6. Ecrire <strong>la</strong> fonction<br />

[x kalm k,P kalm k] = filtre <strong>de</strong> kalman(F,Q,H,R,y k,x kalm prec,P kalm prec) qui retourne le<br />

vecteur x kalm k = ˆx k|k et <strong>la</strong> matrice P kalm k = P k|k à l’instant k à partir <strong>de</strong>s matrices F, Q, H, R,<br />

<strong>de</strong> <strong>la</strong> nouvelle observation y k à l’instant k (vecteur 2×1), du vecteur x kalm prec = ˆx k−1|k−1 et <strong>de</strong><br />

<strong>la</strong> matrice P kalm prec = P k−1|k−1 estimées à l’instant précé<strong>de</strong>nt (bien distinguer <strong>la</strong> partie prédiction<br />

et mise-à-jour).<br />

7. Ecrire <strong>de</strong>s lignes <strong>de</strong> comman<strong>de</strong> à <strong>la</strong> suite, dans le programme principal permettant d’estimer les paramètres<br />

d’état <strong>de</strong> <strong>la</strong> <strong>cible</strong> à chaque instant à partir du jeu d’observations dont on dispose, et <strong>de</strong><br />

<strong>la</strong> fonction filtre <strong>de</strong> kalman. Pensez à mémoriser les paramètres estimés à chaque instant dans une<br />

matrice x est(:,k) (paramètres d’état estimés <strong>de</strong> <strong>la</strong> <strong>cible</strong> à l’instant k).<br />

8. Calculer l’erreur quadratique à chaque instant définie par err quadra(k) = (x k −ˆx k|k )(x k −ˆx k|k ) T , puis<br />

moyenner sur le temps afin d’obtenir une unique valeur, erreur moyenne = 1 T<br />

∑ T<br />

k=1√<br />

err quadra(k).<br />

9. Ajouter au programme principal une comman<strong>de</strong> permettant <strong>de</strong> tracer sur une même figure <strong>la</strong> vraie<br />

trajectoire,<strong>la</strong>trajectoireobservéeet<strong>la</strong>trajectoireestiméeparlefiltre<strong>de</strong><strong>Kalman</strong><strong>de</strong>différentescouleurs.<br />

10. Faites varier le bruit <strong>de</strong> processus σ Q puis les bruits <strong>de</strong> mesure σ px et σ py . Commentaires sur l’erreur<br />

moyenne? Ne pas hésiter à augmenter σ px et σ py pour observer <strong>la</strong> qualité <strong>de</strong> <strong>la</strong> restitution, à partir<br />

d’un signal très bruité.<br />

3.4 Partie Pratique 2 : Poursuite Angle-Distance<br />

Dans certaines applications, comme en radar par exemple, on n’observe pas <strong>la</strong> position en abscisse et en<br />

ordonnée <strong>de</strong> <strong>la</strong> <strong>cible</strong> mais l’angle et <strong>la</strong> distance <strong>de</strong> <strong>la</strong> <strong>cible</strong> par rapport au capteur (coordonnées po<strong>la</strong>ires). On<br />

suppose ici (comme ce qu’on a fait implicitement préce<strong>de</strong>mment) que notre capteur est situé à l’origine du<br />

repère (0,0). Créer un fichier principal 2.m et copier-coller les lignes <strong>de</strong> comman<strong>de</strong>s du premier fichier dans<br />

le second. Nous modifierons au fur et à mesure les comman<strong>de</strong>s concernées.<br />

1. Exprimer l’angle et <strong>la</strong> distance <strong>de</strong> <strong>la</strong> <strong>cible</strong> en fonction <strong>de</strong> ses coordonnées cartésiennes p x et p y . On se<br />

souviendra <strong>de</strong>s formules apprises en c<strong>la</strong>sse <strong>de</strong> 3ème.<br />

2. Remp<strong>la</strong>cer alors dans l’équation (2) le terme Hx k par un vecteur <strong>de</strong> dimension 2×1 approprié à cette<br />

nouvelle modélisation.<br />

3. La matrice ( R a toujours ) <strong>la</strong> même forme mais nous changeons les valeurs <strong>de</strong>s bruits <strong>de</strong> mesure, i.e<br />

σ<br />

2<br />

R = angle<br />

0<br />

0 σdist<br />

2 avec σ angle = pi/180 et σ dist = 10.<br />

Créer une nouvelle fonction y = creer observations radar(R,x,T) permettant <strong>de</strong> générer un jeu d’observation<br />

radar bruité à partir d’une trajectoire x, puis p<strong>la</strong>cer <strong>la</strong> dans le programme principal 2.<br />

(On reprendra <strong>la</strong> fonction y = creer observations(H,R,x,T) en remp<strong>la</strong>çant le produit Hx(:,k) par un<br />

terme adéquat).<br />

4. Peut-onutiliserlefiltre<strong>de</strong><strong>Kalman</strong>pourestimerlevecteurd’état<strong>de</strong><strong>la</strong><strong>cible</strong>àchaqueinstant?Pourquoi?<br />

5. A l’instant k, l’équation d’observation s’écrit<br />

y k =<br />

( ) f(xk )<br />

+v<br />

g(x k ) k , (4)<br />

où f,g : R 4 → R, sont <strong>de</strong>s fonctions déterminées à <strong>la</strong> question 2 <strong>de</strong> cette partie. Nous allons chercher à<br />

nous ramener à un modèle semb<strong>la</strong>ble à l’équation (2).<br />

– Commencer par linéariser les fonctions f et g autour du vecteur ˆx k|k−1 = Fˆx k−1|x−1 . On rapelle <strong>la</strong><br />

formule <strong>de</strong> Taylor au première ordre autour du vecteur a pour une fonction <strong>de</strong> plusieurs variables :<br />

avec, si x = [x 1 ,x 2 ,x 3 ,x 4 ], ∇f(a) = [ ∂f<br />

∂x 1<br />

(a),··· , ∂f<br />

∂x 4<br />

(a)].<br />

f(x) ≈ f(a)+∇f(a)(x−a), (5)<br />

3


– Réécrire l’équation d’observation (2) sous <strong>la</strong> forme<br />

( )<br />

f(ˆxk|k−1 )<br />

y k = +H(ˆx<br />

g(ˆx k|k−1 ) k|k−1 )(x k − ˆx k|k−1 )+v k , (6)<br />

où H(ˆx k|k−1 ) est une matrice 2 × 4 obtenue grâce à <strong>la</strong> linéarisation précé<strong>de</strong>nte et qui dépend <strong>de</strong><br />

ˆx k|k−1<br />

6. Ecrire alors une nouvelle fonction (voir indication)<br />

filtre <strong>de</strong> kalman radar(F,Q,R,z k,x kalm prec,P kalm prec) (qui cette fois ci ne prend plus <strong>la</strong> matrice<br />

H en entrée, il faut <strong>la</strong> redéfinir à chaque fois dans cette même fonction), qui permet d’estimer les<br />

paramètres d’état <strong>de</strong> <strong>la</strong> <strong>cible</strong> à l’instant k.<br />

7. Tracer<strong>la</strong>vraietrajectoireet<strong>la</strong>trajectoireestimée.Commenter,enfaisantvarierlesparamètres<strong>de</strong>bruit.<br />

Vous venez en réalité d’implémenter l’EKF (Exten<strong>de</strong>d <strong>Kalman</strong> Filter - Filtre <strong>de</strong> <strong>Kalman</strong> étendu) qui<br />

permet d’utiliser le filtre <strong>de</strong> <strong>Kalman</strong> pour n’importe quel modèle. Quels peuvent être les inconvénients<br />

<strong>de</strong> l’EKF? D’autres solutions existent pour résoudre ce problème (si vous l’avez trouvé...), comme<br />

l’UKF (Unscented <strong>Kalman</strong> Filter) ou encore le filtrage particu<strong>la</strong>ire, qui sont cependant plus gourmands<br />

en terme <strong>de</strong> coûts <strong>de</strong> calcul.<br />

Indication pour <strong>la</strong> question 6 : du fait <strong>de</strong> l’équation (6), il n’est pas possible d’appliquer directement<br />

lefiltre<strong>de</strong><strong>Kalman</strong>(nousnesommespasdanslesconditions <strong>de</strong>l’équation (2)).Onpose,pourseramener<br />

au modèle c<strong>la</strong>ssique<br />

( )<br />

y k ′ f(ˆxk|k−1 )<br />

= y k − +Hˆx<br />

g(ˆx k|k−1 ) k|k−1 (on trans<strong>la</strong>te y k ). (7)<br />

Toutes les équations vues en cours restent inchangées, sauf l’estimation <strong>de</strong> l’innovation, où l’on a :<br />

ỹ k<br />

= y k ′ −Hˆx k|k−1<br />

( )<br />

f(ˆxk|k−1 )<br />

= y k −<br />

g(ˆx k|k−1 )<br />

(8)<br />

et non plus<br />

ỹ k = y k −Hˆx k|k−1 .<br />

4 Une extension à <strong>la</strong> <strong>poursuite</strong> <strong>de</strong> plusieurs <strong>cible</strong>s<br />

On discutera à <strong>la</strong> fin du <strong>TP</strong> à l’adaptation <strong>de</strong>s métho<strong>de</strong>s précé<strong>de</strong>ntes pour <strong>la</strong> problématique <strong>de</strong> pistage<br />

multi-<strong>cible</strong>s dans le cadre d’un capteur infra-rouge (qui détecte les <strong>cible</strong>s grâce à leur émission <strong>de</strong> chaleur).<br />

1. A travers les séquences vidéos qui seront projetées, quels sont les principaux obstacles à l’utilisation<br />

directe du filtre <strong>de</strong> <strong>Kalman</strong> pour <strong>la</strong> <strong>poursuite</strong> multi-<strong>cible</strong>s?<br />

2. Que faudrait il faire pour pouvoir utiliser simultanément plusieurs filtres <strong>de</strong> <strong>Kalman</strong>, afin <strong>de</strong> pister<br />

chaque <strong>cible</strong>?<br />

4

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!