Filtre de Kalman

Cours semestre 3 de la spécialité robotique autonome


Arnaud Coatanhay et Luc Jaulin


Lab-STICC UBO GDR MACS GDR Robotique ENSTA Bretagne DGA ROBEX Sperob SAGIP









Présentation

Introduction

Ce cours correspond aux chapitres 5,6,7 du livre 'la robotique mobile' ou 'Mobile Robotics', ISTE editions. Il s'agit de notions qui intéressent la spécialité robotique et qui sont utiles pour la localisation des robots. Des corrections pour certains exercices sont faites sous la forme de vidéos. Les exercices se font sous Python.
Vous devez rendre, vos programmes comme indiqué sur le site de KalMOOC.

Version pdf du polycopié :

Programmes de démarrage pour les utilisateurs de Python.
Librairie à utiliser par les utilisateurs de Python roblib.py.

Notation

Pour la notation, vous avez deux notes (sur 20) toutes avec le même coefficient.

Contrôle continu. La note comprend
- les devoirs rendus sous Moodle. Vous pouvez vous mettre en binôme, mais chaque étudiant doit rendre son propre devoir en indiquant le nom de son binôme
- les colles. La note résultante est une moyenne des notes qui vous sont données lors des colles.

Note Examen. Vous aurez une évaluation écrite d'une heure en salle d'examen. Vous avez le droit uniquement à vos notes manuscrites. La calculatrice et autres appareils électroniques sont interdits.


Absences. Il faut éviter absolument les absences pour le contrôle écrit.
Pour le contrôle continu, il y a beaucoup d'évaluations et des absences sont probables. Dans ce cas, vous faut justifier votre absence en la signalant auprès de Laurence Gautier par email en donnant une raison valable et en mettant vos enseignants en copie. Laurence doit alors vous répondre pour accepter cette justification.
Votre note sera gelée, ce qui signifie qu'elle ne sera pas prise en compte dans la moyenne qui forme votre note de contrôle continu.



Séquencement


Leçon A. Méthode des moindres-carrés
Exercice 1. Représentation d'une fonction quadratique
Exercice 2. Identification d'une parabole
Exercice 3. Identification des paramètres d'un moteur à courant continu
Exercice 4. Estimation d'une fonction de transfert

Leçon B. Estimation de paramètres
Exercice 5. Méthode de Newton pour la localisation
Exercice 6. Méthode de Monté-Carlo
Exercice 7. Localisation par recuit simulé

Leçon C. Matrices de covariance
Exercice 8. Distribution gaussienne
Exercice 9. Ellipses de confiance
Exercice 10. Ellipsoïde de confiance : prédiction
Exercice 11. Bruit brownien

Leçon D. Estimateurs linéaires orthogonaux
Exercice 12. Ellipsoïde de confiance : correcteur
Exercice 13. Propagation de matrices de covariance
Exercice 14. Estimateur linéaire pour la résolution de trois équations
Exercice 15. Estimateur linéaire pour l'estimation des paramètres d'un moteur électrique
Exercice 16. Trochoïde

Leçon E. Filtre de Kalman
Exercice 17. Filtre de Kalman pour la résolution de trois équations
Exercice 18. Filtre de Kalman sur trois pas
Exercice 19. Estimation des paramètres d'un moteur électrique
Exercice 20. Estimation de la température

Leçon F. Localisation
Exercice 21. Localisation à partir de la mesure des distances aux murs
Exercice 22. Marcheur aveugle
Exercice 23. Localisation à l'estime
Exercice 24. Localisation goniométrique
Exercice 25. Localization using a Lidar

Leçon G. Observateurs d'état
Exercice 26. Estimation d'état et commande d'un pendule inversé
Exercice 27. Suivi d'un bateau par deux radars
Exercice 28. Localisation d'un robot dans une piscine
Exercice 29. Instantaneous localization

Leçon H. Filtrage bayésien
Exercice 30. Densité conditionnelle et densité marginale
Exercice 31. Prévision météo
Exercice 32. Robot porte
Exercice 33. Le robot dans la forêt
Exercice 34. Bayes rule with Kalman
Exercice 35. Dérivation des équations du lisseur de Kalman
Exercice 36. SLAM dans un contexte de robotique sous-marine (3 points)
Exercice 37. Filtre particulaire






Leçons et Vidéos



Leçon A. Méthode des moindres-carrés

Résumé: Dans cette leçon A, nous donnons les objectifs de l'identification et de l'estimation de paramètres. Après avoir présenté les formes quadratiques et leur minimisation lorsque ces dernières sont convexes, nous introduisons la méthode des moindres-carrés dans le cas linéaire.



Exercice 1. Représentation d'une fonction quadratique

Exercice 2. Identification d'une parabole
Partez du fichier parab.py dans kalmoocpy.zip.

Exercice 3. Identification des paramètres d'un moteur à courant continu

Exercice 4. Estimation d'une fonction de transfert
Partez du fichier transfer.py.




Leçon B. Estimation de paramètres

Résumé: La leçon B, propose d'étendre l'estimation au sens des moindres carrés au cas non-linéaire. Pour cela, nous introduisons les principes de l'optimisation globale dans le cas où le critère à minimiser est non-convexe. Nous donnons ensuite un algorithme non-déterministe pour l'optimisation globale.




Exercice 5. Méthode Newton pour la localisation
Partez fichier newton.py.

Exercice 6. Méthode de Monté-Carlo
Partez du fichier montecarlo.py.

Exercice 7. Localisation par recuit simulé
Partez du fichier anneal.py.




Leçon C. Matrices de covariance

Résumé: La leçon C, introduit la notion de matrice de covariance et montre comment cette dernière peut être utilisée pour caractériser l'incertitude sur un vecteur aléatoire. Nous montrons également comment manipuler les matrices de covariance dans le but de propager les incertitudes à travers une application linéaire.




Le fichier Python associé à cette leçon peut être trouvé sous le nom de 7.00_lesson.py :

Exercice 8. Distribution gaussienne
Partez du fichier gauss.py


Exercice 9. Ellipses de confiance
Partez du fichier sixcov.py.


Exercice 10. Ellipsoïde de confiance : prédiction
Partez du fichier du fichier predicov.py.


Exercice 11. Bruit brownien
Partez du fichier brownian.py.





Leçon D. Estimateurs linéaires orthogonaux

Résumé: La leçon D, s'intéresse aux vecteurs aléatoires gaussiens et montre comment leur densité de probabilité se caractérise totalement par une espérance mathématique et une matrice de covariance. Nous donnons également les bases de l'estimation linéaire dans un contexte linéaire. Nous donnons les équations d'un estimateur linéaire centré orthogonal qui forment une des briques essentielles du filtre de Kalman.




Exercice 12. Ellipsoïde de confiance : correcteur
Partez du fichier corrcov.py


Exercice 13. Propagation de matrices de covariance
Il n'y a pas de programme à rendre juste un scan (ou photo) de votre feuille de papier ou un pdf.


Exercice 14. Estimateur linéaire pour la résolution de trois équations


Exercice 15. Estimateur linéaire pour l'estimation des paramètres d'un moteur électrique

Exercice 16. Trochoïde
Partez du fichier trochoide.py





Leçon E. Filtre de Kalman

Résumé: Dans la leçon E, nous montrerons comment dans un cadre dynamique, où un système décrit par des équations d'état évolue dans le temps, un estimateur linéaire récursif peut être obtenu. Il s'agit du filtre de Kalman qui se décompose en deux étapes : la prédiction et la correction. En toute rigueur, ce filtre ne peut s'utiliser que pour des systèmes linéaires et dans un contexte de bruits additifs et gaussiens.




Exercice 17. Filtre de Kalman pour la résolution de trois équations
Partez du fichier kalm3eq.py


Exercice 18. Filtre de Kalman sur trois pas
Partez du fichier kalm3steps.py


Exercice 19. Estimation des paramètres d'un moteur électrique
Partez du fichier kalmotor.py


Exercice 20. Estimation de la température
Il n' a pas de programme à rendre juste un scan (ou photo) de votre feuille de papier ou un pdf.





Leçon F. Localisation

Résumé: La leçon F s'intéresse à des problèmes plus réalistes afin de mieux comprendre comment s'utilise le filtre de Kalman. Nous avons choisi la localisation car c'est dans ce contexte que le filtre de Kalman a été initialement utilisé (mission Apollo) mais aussi qu'il a été le plus appliqué. Nous allons donc nous placer dans le cas d'un robot mobile dont le mouvement est décrit par des équations d'état à temps continu évoluant dans un environnement composé d'amers ponctuels dont les positions sont connues. Lorsque le robot perçoit ces amers, il en mesure des angles (cas de la localisation goniométrique) ou des distances (trilatération). Afin d'utiliser un filtre de Kalman (qui, rappelons le, considère des systèmes linéaires à temps discrets), nous montrons comment transformer l'évolution du robot en une évolution linéaire et comment effectuer la discrétisation temporelle du système, en prenant en compte les bruits.




Exercice 21. Localisation à partir de la mesure des distances aux murs
Partez du fichier distwall.py


Exercice 22. Marcheur aveugle
Partez du fichier blindwalk.py


Exercice 23. Localisation à l'estime
Partez du fichier deadreckoning.py


Exercice 24. Localisation goniométrique
Partez du fichier gonio.py


Exercice 25. Localization using a Lidar
Partez du fichier lidar.py





Leçon G. Observateurs d'état

Résumé: La leçon G présente les observateurs d'état dans un contexte général et explique en quoi le filtre de Kalman peut être interprété comme un tel observateur. Nous introduisons trois observateurs proches du filtre de Kalman.
(1) Le filtre de Kalman-Bucy qui est une version différentielle du filtre Kalman (qui lui est discret).
(2) Le filtre de Kalman étendu ou EKF (Extended Kalman Filter) qui s'applique lorsque le système à observer est non-linéaire. Le principe est de linéariser afin se pouvoir utiliser le filtre de Kalman.
(3) L'observateur de Luenberger qui possède une différence essentielle avec le filtre de Kalman : il ne demande aucune hypothèse probabiliste. L'incertitude (ou plutôt son influence) y est exprimée à l'aide de constantes de temps.




Exercice 26. Estimation d'état et commande d'un pendule inversé
Partez du fichier invpend.py


Exercice 27. Suivi d'un bateau par deux radars
Partez du fichier radar.py


Exercice 28. Localisation d'un robot dans une piscine
Pas de vidéo de correction pour cet exercice



Exercice 29. Instantaneous localization





Leçon H. Filtrage bayésien

Résumé: La leçon H généralise le filtrage de Kalman dans un contexte non-linéaire et non-gaussien. On obtient alors un filtre bayésien qui cherche à manipuler directement les densité de probabilité et non pas uniquement les moyennes et les covariances. En montant d'un niveau d'abstraction, le filtre bayésien permet d'avoir une meilleure compréhension du filtre de Kalman et d'étendre ses capacités. Afin d'illustrer cela, nous nous intéresserons au lissage qui permet d'améliorer les précisions obtenues pour l'estimation d'état dans le cas où les données futures sont disponibles. Enfin, nous proposerons à une application ambitieuse du filtre de Kalman qui est le SLAM (Simultaneous Localization And Mapping). Dans un tel contexte, un robot doit se déplacer dans un environnement inconnu, tout en se localisant dans cet environnement à travers une carte qu'il est en train de construire.




Exercice 30. Densité conditionnelle et densité marginale
Il n'y a pas de programme à rendre juste un scan (ou photo) de votre feuille de papier ou un pdf.


Exercice 31. Prévision météo
Il n'y a pas de programme à rendre juste un scan (ou photo) de votre feuille de papier ou un pdf.


Exercice 32. Robot porte
Il n'y a pas de programme à rendre juste un scan (ou photo) de votre feuille de papier ou un pdf.


Exercice 33. Le robot dans la forêt
Il n'y a pas de programme à rendre juste un scan (ou photo) de votre feuille de papier ou un pdf.


Exercice 34. Bayes rule with Kalman
Il n'y a pas de programme à rendre juste un scan (ou photo) de votre feuille de papier ou un pdf.


Exercice 35. Dérivation des équations du lisseur de Kalman
Il n'y a pas de programme à rendre juste un scan (ou photo) de votre feuille de papier ou un pdf.


Exercice 36. SLAM dans un contexte de robotique sous-marine
Partez du fichier slam.py. qui utilise le fichier de données slam_data.txt.


Exercice 37. Particle Filter