ELECINF344/381

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

Catégories

TSV Safe Express: Le débogage avec bus CAN

Hier, nous avons eu problèmes avec multiple nœuds. Alors, aujourdhui, nous essayions de stabiliser le protocol NMRA pour le bus CAN. Un problème intéressant a été les paquets du bus CAN ne sont pas dans le bon ordre. Qu’est-ce qui se passait?
Notre théorie est la suivante. Nous avons « transmit mailbox » dans le contrôleur CAN avec la capacité de 3. La fonction de transmission de la bibliothèque CAN tente de trouver « transmit mailbox  » vide et envoyer le paquet. Supposons qu’il écrit le premier paquet en deuxième mailbox , puis premier mailbox (car il a trouvé les mailboxes vide dans cet ordre). Mais la transmission de messages CAN commence de 0 mailbox. Ainsi, les paquets ne sont pas envoyés dans l’ordre correct.

Une solution possible peut être de s’assurer d’utiliser une seule mailbox pour envoyer des messages CAN. Cela peut être réaliser en commençant par transmettre CAN gestionnaire d’interruption qui se synchronise avec le CAN transmettre fonction à l’aide de sémaphores. Mais, avec ça nous ne pouvons pas prendre l’avantage de trois mailbox. D’autres solutions sont les bienvenus.

Avec, le bootloader, nous avons réussi en faire le lecture et écriture sur le flash. Maintenant, nous sommes en train de faire le l’autre choses de bootloader comme le usart.

Nous avons reçu noter carte feux. Demain, nous allons faire le SPI pour cette carte.

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

Kalman, encore du Kalman…

Aujourd’hui, avec Axel, nous nous sommes enfin penchés sur la théorie du filtre de Kalman. Ce qui était une bonne idée, puisque nous y voyons déjà beaucoup plus clair sur le fonctionnement théorique de celui-ci. Il n’empêche que beaucoup d’imprécisions restent encore à lever. Pour implémenter le filtre de Kalman, il faut être capable d’exprimer l’état prédit du système à l’instant k en fonction de l’état du système à l’instant k-1. Pour ce faire, il faudrait tenir compte de l’équation d’état du système (et donc considérer le système dans son ensemble, donc réfléchir d’ores et déjà à la physique du système, avec les hélices).

C’est un point que nous avons du mal à comprendre concernant le filtre de Kalman : dès lors que nous tenons compte de la physique du système, comment peut-on tester la centrale inertielle seule, non intégrée au système final? Pourtant, celle que nous avons déjà pu tester nous-mêmes semblait fonctionner plus ou moins correctement, seule.

 

Il nous reste également à déterminer ce qu’on veut filtrer exactement, si c’est tout le système, ou bien uniquement les gyroscopes. Et encore si on utilise un modèle physique réaliste et donc non linéaire, ou bien si on utilise des astuces pour le rendre linéaire, par exemple en introduisant les mesures et erreurs de mesure dans le résultat (solution proposée par Florian, mais qui reste encore un peu obscure pour moi).

Bref, nous avons avancé sur la compréhension de la théorie, maintenant nous nous heurtons au problème des hypothèses et de l’implémentation. Demain nous devrions essayer de préciser les équations physiques pour voir si nous arrivons à trouver une manière d’exprimer correctement l’algorithme.

Kalman & Copterix

Ce week-end j’ai tenté de me renseigner sur le filtre de Kalman, et la possibilité de l’implémenter dans une centrale inertielle. J’ai d’abord cherché différentes sources « pratiques » de mise en oeuvre :
- Bibliothèque BFL également repérée par Axel
- Source du projet AutoPilot :  qui possède également un AHRS
- Source du projet OpenPilot : OpenPilot_AHRS mais ils indiquent que sans leur GPS, le filtre de Kalman est instable.

Mais je pense avoir essayé de sauter des étapes, et devoir me documenter un peu plus sur la théorie de filtre de Kalman. J’ai donc essayé de faire cela dimanche, sans grand succès. Il faut que j’en discute avec Florian, qui semble avoir avancé de son côté, sachant qu’il s’occupe du filtre de Kalman aussi bien pour son projet RoseWheel, mais aussi pour son exposé de vendredi.

Du côté d’Axel, c’est un peu le même constat : de nombreux exemples trouvés, mais il reste la nécessité de se pencher sur la théorie avant ça… :
Un filtre de Kalman en 15 minutes, le rêve (avec la BFL, justement)

Un listing de pas mal de choses sur le sujet, qui a tendance à sortir des 403 les mauvais jours…

Une bibliothèque Open Source en C++ des filtres bayesiens et autres Kalmaneries

Des gens qui donnent le code source de leur hélicoptère en .bas (basic ?)

+ un bon papier pour implémenter le filtre.