ELECINF344/381

Partie interactive du site pédagogique ELECINF344/ELECINF381 de Télécom ParisTech (occurrence 2011).

Catégories

[RoseWheel] Implémentation du filtre de Kalman

Après de nombreuses hésitations quant à l’implémentation exacte du filtre qui nous permettra de traiter les données issues des capteurs de position (drift du gyroscope notamment) nous nous dirigeons de plus en plus vers l’association entre un filtre complémentaire (présenté dans un post un peu plus bas) et un filtre de Kalman permettant d’estimer le drift du gyroscope à chaque instant.

L’implémentation du filtre de Kalman est en fait assez simple. Voilà les données du problèmes :

On mesure à chaque instant la vitesse angulaire (theta_dot)  et l’angle d’inclinaison du manche de RoseWheel par rapport à la verticale (theta).

On considère que la mesure theta_m de  l’angle d’inclinaison est entachée d’un bruit blanc gaussien centré v(t).

On considère de plus que la mesure de la vitesse angulaire theta_dot_m est biaisée par un signal b(t) susceptible d’évoluer dans le temps (le drift).

A partir de ces 2 mesures theta_m et theta_dot_m on construit un filtre de Kalman permettant d’estimer le biais b(t). On pourra alors facilement corriger les valeurs en fonctions de l’estimation de ce biais.

Comme il n’est pas possible de modéliser la façon dont évolue le drift b(t) car celle-ci dépend de beaucoup de paramètres différents. On va considérer pour l’implémentation du Kalman que ce biais b(t) est constant. Mais ce qui nous donne en régime permanent un gain de Kalman nul car l’équation n’est pas bruitée. Ainsi, une fois le biais constant estimé, le filtre ne sera plus capable de détecter la dérive de ce biais. Ce qui est problématique.

Cependant on va ajouter à l’équation d’état un bruit fictif w(t) plus ou moins important qui va permettre de signaler au filtre de Kalman qu’il faut qu’il accorde à chaque itération plus de confiance dans les mesures et moins de confiance dans la modélisation, celle-ci étant incorrecte dans la mesure ou on a considéré un drift constant.

On obtient ainsi une estimation du biais b(t) du gyroscope qu’il est ensuite facile de soustraire au signal theta_dot_m mesuré par celui-ci.

C’est en particulier le filtre qui a été utilisé par Rich Chi Ooi dans sa thèse : Balancing of a Two-Wheeled Autonomous Robot

Des simulations Matlab/Octave sont à venir.

Sur un autre front, Clément à quant à lui commencé à regarder la théorie des algorithmes LQR mais nous attendons la présentation de vendredi pour nous y pencher de plus près.

RoseWheel : banc de tests et filtre de Kalman

Depuis ce week-end, nous avons avancé dans le projet sur deux fronts : d’un côté le banc de tests, de l’autre le filtre de Kalman.

En ce qui concerne le banc de tests, nous avons commencé à concevoir la partie logicielle du système. Clément et moi avons attaqué la partie « haut niveau », c’est-à-dire, les fonctions qui vont gérer la réalisation des tests et le calcul des statistiques d’intérêt ; en quelques lignes de Python (langage que Cédric et moi avons commencé à découvrir ce week-end), nous avons réussi à faire un script qui génère une série de valeurs de test aléatoires, simule les mesures correspondantes et calcule la moyenne et la variance de l’erreur. En y ajoutant encore quelques lignes, et à l’aide de matplotlib, Clément a réussi à afficher dynamiquement les résultats avec une belle interface graphique, dont voici un aperçu :

Écran du script du banc de tests. Les deux premières figures représentent les angles « thêta » et « phi », et la dernière, la vitesse angulaire dans l'axe des « thêta ». Les valeurs d'entrée sont dessinées en bleu, et les mesures simulées, en vert

En parallèle, Cédric a commencé à écrire, également en Python, une petite bibliothèque pour contrôler des servo-moteurs AX-12 (merci Samuel pour la recommandation) à travers le port série. Les prochains pas seront d’intégrer ce code dans l’application principale et implémenter des fonctions pour lire les valeurs des capteurs.

Sur l’autre front, Florian a beaucoup travaillé pour comprendre+implémenter le filtre de Kalman et pouvoir l’expliquer aux autres. Cependant, nous recherchons encore la meilleure manière d’intégrer à ce dispositif le filtre complémentaire (passe-bas pour l’accéléromètre + passe-haut pour le gyroscope).

En outre, nous avons réfléchi davantage sur le choix des capteurs, mais pour le gyroscope nous hésitons encore entre prendre l’IMU-3000 (3 axes) ou le MLX90609 (notre premier choix, avec un seul axe). La performance du projet « robot de equilibrio », qui utilise cette dernière puce, nous a beaucoup impressionné, et le fait que son drift soit faible (selon la datasheet) est assez intéressant ; pourtant, avoir un axe supplémentaire pourrait être utile pour l’asservissement dans les courbes, et permettrait le partage d’une intégration plus grande du travail avec Copterix.

Finalement, comme toute production électronique est censée être versionnée, nous avons tous eu droit à une vraie leçon pratique de Clément pour utiliser Git. En nous apprenant à sauvegarder nos avancées temporaires sur notre dépôt de projet, il a pu aussi préparer sa stratégie pédagogique pour la présentation de vendredi.