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 ...
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