Login

lundi, 02 juillet 2007 17:38

Carte de détection de l'attitude

Écrit par 
Évaluer cet élément
(0 Votes)

Carte attitude

Principe 

C'est une nouvelle aventure !  Cette carte doit fournir à la carte  moteur l'angle d'attitude du robot et  sa vitesse.

Pour expérimenter plusieurs voies, on a disposé 3 capteurs

  • Un accéléromètre 2 axes qui permet donc de connaitre l'angle de 0 à 360°

  • Un gyroscope "bas de gamme" et "pas cher" utilisé sur les modèles réduits d'hélicoptère. Il donne la vitesse angulaire

  • Un système à 2 télémètres mesurant à 45° la distance au sol : une fois étalonné, on peut en déduire en soustrayant les distances et avec une formule trigo idoine l'angle du robot.

 On peut donc, en s'aidant d'un filtre de Kamann, calculer l'attitude par

  • L'accéléromètre+gyroscope

  • Les télémètres+gyroscope

  • Le gyroscope seulement

Mais, me direz vous : le gyroscope dérive donc l'angle va devenir faux... comment donc ne se servir que du gyroscope ?  Patience, on aborde plus loin cette idée géniale(!)

 Matériel

Pour faire un peu moderne et parce qu'elle est simple, cette carte utilise, modérément, les résistances et condensateurs CMS.

Pour offrir un maximum de puissance La fréquence du quartz qui pilote le 18F4550 est de 40Mhz 

Le schéma électrique est le suivant : 

gyro

  Le microprocesseur est un 18F4550 (toujours le même suite à un achat groupé!) piloté par un quartz à 40Mhz.

Le gyroscope est commandé en pwm et sort du pwm respectivement aux broches rc1 et rc2. 

L'accéléromètre est un ADXL202 monté sur un boitier 14 broches (d'où le brochage exotique). Ce boitier est perpendiculaire à la carte pour pouvoir mesurer correctement les accélérations  en X et Y. Les sorties pwm X et Y sont connectées aux broches  RB4 et RB5

Les 2 télémètres sharp GP2D12 sont connectés aux ports analogiques via le connecteur X3 

Enfin, le bus esclave I2C est connectévia X1  aux broches RB0 et RB1

Les 4 leds servent à afficher le signe de l'angle et celui de la vitesse angulaire

Carte simple donc et qui ne demande pas d'explications compliquées. 

Voici donc une photo de cette carte "in situ" comme on dit en Anglais !

carte_gyro

  On y retrouve facilement le gyroscope, l'accéléromètre sous ce dernier, le quartz et le microprocesseur ainsi que les leds et connecteurs. Le bouton poussoir est inutilisé. Les résistance et autres condensateurs de découplage sont monté en CMS coté piste.

Noter enfin les deux télémètres à 45° situés au dessus de la carte. 

Logiciel

Un logiciel qui a demandé de la réflexion que celui de la carte d'attitude ! Elle permet de multiples possibilités dont plusieurs restent encore à expérimenter.

 Gyro

Tout d'abord, il fallait piloter le gyroscope en lui envoyant du pwm et surtout en mesurant le pwm reçu pour en déduire une vitesse angulaire.

CCP2 est utilisé en mode "CCP_COMPARE_INT_AND_TOGGLE" avec interrupt pour piloter avec précision les durées ON et OFF du pwm appliqué au gyro ; à chaque interrupt, on charge la durée on ou off suivant l'état de sortie. On envoie "1" durant 1 msec et "0" durant 9 msec.

CCP1 est utilisé en alternativement en mode CCP_CAPTURE_RE  et CCP_CAPTURE_FE pour avoir une interruption à chaque front montant et descendant (et leur datation précise) de la sortie du gyroscope.

On peut donc calculer le rapport cyclique en réception.Enfin, on fait deux mesures sonsécutives pour moyenner cette valeur et la rendre disponible tous les 20msec.

Si une interruption gènante (typiquement l'interrupt I2C esclave) intervient durant une mesure, cette dernière est invalidée.

Pour éviter de régler le gyroscope, on réalise également une correction faite à partir d'une moyenne glissante de toutes les valeurs reçues durant 16 secondes : cette moyenne doit être nulle. On corrige donc la vitesse angulaire en permanence par ce trim glissant : la moyenne de la vitesse angulaire reste nulle. Noter qu'il n'y a jamais eu besoin de retoucher les réglages du gyroscope depuis la construction du robot !

Il va de soi qu'il faut donc, à la mise sous tension, attendre 16 secondes pour obtenir la valeur du premier trim glissant : cette phase est appelée "calibration" et le robot ne démarre pas ses moteurs tant qu'elle n'est pas terminée.

En intégrant cette vitesse, on a l'angle. 

Accéléromètre

 L'accéléromètre travaille également sur la réception d'un rapport cyclique (Un pour l'axe des X et un pour l'axe des Y).

Ces rapports sont obtenu par une boucle tournant en niveau de base lancée immédiatement après l'acquisition d'une valeur du gyro  et mesurant p ar une boucle les durées ON et OFF de chaque axe X et Y de l'accéléromètre.

Si une interruption survient pendant une mesure, celle ci est invalidée.

en combinant X et Y, on obtient l'angle de l'attitude, de 0 à 360°, mesuré par l'accéléromètre.

 Télémètres infra rouge

L'utilisation des télémètres infra rouge Sharp est des plus simples en utilisant les entrées analogiques... On recoit une valeur dépendant de la distance entre chaque télémètre et le sol. L'angle en radian ,tant que cet angle est faible ce qui est le cas, est proportionnel à la différence entre la distance mesurée par le télémètre à l'avant et celle mesurée par le télémètre à l'arrière.

 Récapitulatif des informations

Voilà pour l'acquisition des informations : on possède donc, toutes les 20 msec

- Une vitesse angulaire (dont la moyenne glissante sur 126 sec est nulle) 

- Un angle calculé en intégrant la vitesse angulaire ci dessus.

- L'angle mesuré par l'accéléromètre

- L'angle mesuré par les télémètres.

A partir de là, on peut essayer de multiples combinaisons. La première, décrite sur des sites web, consiste à utilise un filtre de Kalman avec accéléromètre et gyroscope pour corriger la dérive du gyroscope.

 Filtre de Kalman

 On injecte toutes les 20 msec l'angle gyro et l'angle de l'accéléromètre pour obtenir en sortie l'angle estimé. Le fichier source C utilisé est dérivé de rotomotion_tilt.c disponible sur le web.

Le filtre tourne donc toutes les 20msec. Les informations vitesse et vitesse angulaire sont transmises (demandées par) à la carte contrôle des moteurs toutes les 20 msec. 

 

  Résultats et évolutions

Le réglage glissant du zéro de la vitesse angulaire du gyroscope étant très efficace, on a testé 3 configurations qui ont toutes comme points communs

  • d'utiliser la vitesse angulaire du gyroscope comme l'information vitesse angulaire émise vers la cart moteur

  • d'utiliser l'intégration de cette vitesse comme entrée du filtre de kalman

Les 2 premières configuration utilisent respectivement l'information angle issue de l'accéléromètre et des télémètres comme seconde entrée du filtre de Kalman.

Configurations traditionnelles 

Les deux configurations donnent satisfaction. Les télémètres sont particulièrement efficaces et stables.. ils ont 2 "petits" problèmes : Le robot bascule lorsqu'on approche la point du pied dans le faisceau d'un télémètre et le fonctionnement sur un sol en plein soleil n'est pas satisfaisant (le télémètre est aveuglé) 

Noter que, pour ces deux configurations,  le trim de l'angle est calculé durant la phase de calibration (le robot doit être maintenu approximativement en équilibre durant cette calibration).

Noter enfin que on utilise l'accéléromètre pour détecter les angles hors tolérance et envoyer ainsi une information permettant de couper les moteurs

  Nouvelles configurations

Mais La troisième configuration marche également et est sans nul doute plus prometteuse puisqu'on n'utilise que le gyroscope même s'il a une dérive importante . -pour être exact, l'accéléromètre est encore utilisé comme détecteur d'angle hors tolérance-- En voici en gros le principe :

"Si le robot tient en équilibre, c'est qu'il est en moyenne vertical "

  C'est déjà un principe similaire qui est utilisé pour faire un ajustement dynamique de la vitesse angulaire.

La réalisation de base consiste donc à corriger l'angle brut issu de l'intégration de la vitesse angulaire du gyro par une moyenne glissante de ce dernier (faite ici sur 16 secondes) : le robot marche parfaitement

Mais on peut aussi explorer de ne rien corriger en supposant que le lissage de la vitesse angulaire est bon (vitesse angulaire moyenne nulle)

On peut aussi, lors de la phase de calibrage, calculer la dérive angulaire et appliquer la correction pour la suite : il ne faut pas oublier que l'asservissement du moteur est capable de corriger une petite dérive de la verticale

Le but serait de compléter la phrase ci dessus : en effet, le problème qui se pose est une mauvaise verticalité quand le robot est tenu manuellement; la verticalité de vient fausse et lacher le robot va provoquer sa chute... 

Mais  il est possible de faire parfaitement avec le seul gyroscope même s'il a une dérive importante et ce sera le but des essais actuels. 

Aujourd'hui

Pour faire propre et préparer les expérimentations, le logiciel a été modifié et on calcule un trim (une valeur moyenne glissante des X dernières secondes) de chaque information .

- vitesse angulaire gyro

- angle par intégration de la vitesse angulaire gyro

- angle par accéléromètre

- angle par optique

Ceci a permis de faire un graphique montrant le résultat de chaque information pendant le balancement du robot et donc de comparer la qualité des résultats. 

Le gyro dérive beaucoup, ce qui oblige à calculer son trim sur un lissage de 8 secondes (et non 16 secondes comme pour les autres variables)

Mais le robot fonctionne très bien ainsi. Exit le filtre de Kalman, exit le traitement par opto, exit les calculs de l'accéléromètre.

Il a fallut soigner la procédure de démarrage et de remise à la verticale après une chute :

1) l'accéléromètre est uniquement utilisé pour détecter un angle anormal qui nécessite l'arrêt des moteurs

2) à l'initialisation, on est supposé tenir le robot à la verticale, ce qui permet de calibrer non seulement la vitesse détectée  par le gyro mais aussi le zéro de l'accéléromètre et l'angle calculé à partir du gyro.

3) en cas de chute : l'accéléromètre stoppe les moteurs et on réinitialise l'intégration de l'angle calculé par le gyro.

4) pour redémarrer le robot, il suffit ensuite de le positionner à la verticale (à un ou deux degrés près) : il reprend son balancement.

 

Conclusions

Un gyro même de faible prix suffit pour connaitre l'attitude du robot. L'accéléromètre est trop bruyant ( sauf si on isole drastiquement ce dernier de la structure en aluminium qui propage très bien les vibrations des moteurs !)  et  ne sert qu'à détecter un angle excessif et un retout à la verticale

Il faut une bonne procédure de démarrage du balacement

Pas besoin de filtres passe-haut/passe-bas ou kalman

Voir les détails du programme dans l'article dédié 

 

 

 


 

 

Lu 3221 fois Dernière modification le jeudi, 05 janvier 2012 09:59
Connectez-vous pour commenter