Odométrie du Pobot Easy Extrait du PoBot http://www.pobot.org Odométrie du Pobot Easy - L'association - Nos robots - Robots du club - Robots à roues - Base "Pobot Easy" (2009) - Date de mise en ligne : samedi 28 février 2009 Description : Un capteur de lumière permet de détecter une alternance noir/blanc sur une roue et d'en déduire son avancée (position, vitesse). PoBot Copyright © PoBot Page 1/14 Odométrie du Pobot Easy Sommaire • Mécanique • Électronique • Programmation Voici une odométrie simple, avec une seule détection. Une meilleure odométrie nécessiterait plus de points et surtout des encodeurs en quadrature, permettant de connaitre le sens de rotation. Premier test d'implantation Roues codeuses Nicolas, de Easy Robotics [http://www.easyrobotics.fr], nous a fait parvenir une paire de capteurs et les bras d'aluminium qui vont avec pour les fixer au chassis. On va donc commencer par trouver le meilleur emplacement. Mécanique Comme les capteurs vont suivre les secteurs noir et blanc d'un disque collé sur la roue, il est préférable qu'ils soient placés à 90° des rayons, et de préférence dans un endroit isolé de la lumière. Copyright © PoBot Page 2/14 Odométrie du Pobot Easy Le support du capteur premier test pour accéder facilement aux pattes Essai de fixation dessous Les codeurs sont conçus pour être fixés directement sur la cage des servomoteurs, grâce aux trous filetés de la "brique Easy". Fixation définitive (applont) Fixation définitive (côté) Ensuite on fixe les disques sur les roues, en imprimant, découpant et collant les deux parties sur les jantes en aluminium. Copyright © PoBot Page 3/14 Odométrie du Pobot Easy Disques codeurs pour les roues <!-- google_ad_client = "ca-pub-6809994141685910"; /* Corps central */ google_ad_slot = "0178404633"; google_ad_width = 728; google_ad_height = 90; //--» <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> Électronique Ces capteurs sont des émetteurs/récepteurs. Les deux composants ont des entrées/sorties distinctes et on peut donc les considérer comme une Led et comme un phototransistor NPN dans un boitier commun. La documentation du capteur Honeywell HOA709 : Datasheet HOA709 Modèle HOA709-1 "Mexico" Il y a 2 versions, avec phototransistor ou avec photodarlington. La différence entre les deux se fait sur les temps de réponse : HOA0708 : Saturation=0.4V HOA0709 : Saturation=1.1V Le parametre Rise & Fall Time nous indique que le photo-darlington est 5 fois plus lent que le photo-transistor : HOA0708 : Rise & Fall Time=15us HOA0709 : Rise & Fall Time=75us On peut donc calculer une fréquence théorique maximum de fonctionenment de 1/(75+75)=6,66 kHz avec une résistance de sortie de 100R. (Plus cette résistance sera grande et plus la vitesse max sera petite). Led infra-rouge Les caractéristiques de la DEL infrarouge qui nous intéressent sont : la tension directe (forward voltage, Vf) : 1,6 volts le courant d'utilisation (If) : 30 mA Comme on utilise une tension Vcc de 5 volts, il faut prévoir une résistance de 120 ohms car : R = U / I = (Vcc - Vf) / If = (5 - 1.6) / 0.03 = 113 Ohms (pouvant être arrondi à 110 mais dans la gamme disponible, E12, c'est 120 qui est le plus proche) Copyright © PoBot Page 4/14 Odométrie du Pobot Easy Résistance de 120 ohms Une prise de vue à l'appareil photo permet de voir que la led est bien allumée : Emetteur allumé Photodarlington Comment fonctionne un phototransistor ? la base est sensible à la lumière : quand il y a de la lumière, le transistor est passant. On a donc une valeur plus ou moins importante sur l'émetteur. Un retour d'expérience intéressant nous est transmis par Patrick : Différence entre darlington et transistor : Le darlington va avoir un gain plus important qu'un transistor simple. Le photodarlington va commuter en saturé avec moins de lumière. Du coup le transistor de sortie devrait fonctionner plus tôt en bloqué/saturé. En gros c'est ce que tu recherches. En 2002 j'avais fais un codeur avec ce capteur, avec plus ou moins la même configuration et un ampli OP monté en seuilleur pour avoir des transitions 0/1 franches. Il y avait plein de phénomènes de rebonds qui faisaient qu'au lieu d'avoir un front il y avait des séries d'oscillations très rapides à la place du front. C'était invisible à l'oscillo réglé sur une fréquence propre à voir les crénaux car les rébonds très rapides se confondaient avec le front. Il a fallu passer à quelques ns pour voir le phénomène. Ces rebonds étaient bien comptés par le micro-contrôleur ce qui donnait un comportement ératique au robot. Bref mauvais souvenir avec ces trucs. Je dirai qu'il faut prévoir un bon filtrage avec un passe-bas efficace pour se prémunir de nuits blanches. Donc on est prévenu. On va donc commencer par regarder ce qui se passe sur l'émetteur du darlington (rappel : base, collecteur, émetteur). Copyright © PoBot Page 5/14 Odométrie du Pobot Easy Le premier test avec une résistance de pull-down de 10k montre une variation trop faible pour être significative Premier test (10kOhms) On test avec une résistance de 1,8 kOhms : c'est déjà mieux, les différences blanc/noir sont plus tranchées. Second test (1,8kOhms) Pour que les oscillogrammes montrés soient plus convaincants, on fait tourner la roue régulièrement (en pilotant le servomoteur). Sinon on pourrait se demander à quoi est due la dispersion des valeurs de créneaux car les diagrammes précédents sont faits par une manip "à la main". Sortie du darlington avec servo lent Copyright © PoBot Page 6/14 Odométrie du Pobot Easy Sortie du darlington avec servo rapide Voici le code pour la carte Arduino afin de tester le capteur : Acquisition du signal analogique avec rotation du servomoteur (code Arduino 0012) Maintenant on va convertir la sortie analogique du capteur en valeur tout ou rien. Pour obtenir un signal TTL en entrée numérique, on peut utiliser un amplificateur opérationnel ou ampli-op. On va partir du schéma réalisé par Fribotte : capteur de ligne [http://fribotte.free.fr/bdtech/ir/carteinfrarouge.html], mais ce schéma est un peu illisible et surtout il n'inspire pas confiance (led connectée à l'envers...) donc on va faire appel à des spécialistes. Voici ce que nous dit Nicolas : N'importe quel AOP fait l'affaire dans le montage de Fribotte. Chez Selectronic [http://www.selectronic.fr], on avait trouvé des CMOS quadruples, pas chers du tout. La différence entre les AOP sont les bandes passantes (en Mhz voire Ghz), les offsets (µV dans le cas du CMOS), slaw rate (vitesse max de modification des sorties), etc. Des paramètres qui seront toujours bien au-dessus de ce que tu veux pour ton montage. Le coeur du circuit de fribotte est un montage à un comparateur à deux seuils non-inverseur (montage à hysteresis), cf l'article wikipedia sur les ampli-op [http://fr.wikipedia.org/wiki/Amplificateur_op%C3%A9rationnel] Si tu veux un meilleur slaw rate (meilleur que 10µS rail-to-rail), tu peux utiliser un comparateur comme le LM311. Si tu veux faire du pas cher, j'aurais mis un simple montage AOP en filtre passe bas (genre 1khz ou 10khz de fréquence de coupure) et j'aurais lu la valeur avec un convertisseurs ADC, le seuillage étant fait numériquement. On en retient deux approches : avec un AOP comparateur pour avoir une sortie tout ou rien avec un filtre passe bas à base d'AOP Les deux pourraient être testés, on va utiliser la première solution. Test avec comparateur LM311 ou LM393 On trouve ce circuit intégré en référence LM311N sur le site Gotronic [http://www.gotronic.fr/catalog/actif/actifframe.php?page_cible=lin3.htm] pour 40 centimes d'euros en package DIL8. Copyright © PoBot Page 7/14 Odométrie du Pobot Easy Datasheet AOP LM311 William, un étudiant d'Aix-en-Provence, m'a envoyé ce schéma utilisant un LM311 et un phototransistor, qui servira donc parfaitement de base à notre montage de test : Montage à base d'AOP comparateur Eric avait sous la main un LM393 qui est un double comparateur (deux AOP dans un boitier 8 pattes). C'est avec lui qu'on fera nos tests. S'il fonctionne, on pourra faire les deux acquisitions avec un seul circuit puisque le robot a 2 roues codeuses :) Datasheet AOP LM393 Brochage du LM393 On adapte le schéma initial qui utilisait un LM311 et on choisit les bonnes valeurs de résistances : sur la sortie de l'AOP, une pull-up de 47 kOhms sur l'entrée de tension V+ à comparer, deux résistances de 1kOhms en pull-up et pull-down donc on va comparer avec la moitié de 5 volts sur l'entrée de tension V-, l'émetteur du photodarlington et la résistance de pull-down de 1,8 kOhms qui permet au signal de franchir nettement la ligne médiane des 2,5 volts lors de nos tests ci-dessus Le résultat est bien visible : des valeurs tout ou rien bien tranchées, prêtes à être détectées par une interruption externe de notre carte à microcontrôleur : Copyright © PoBot Page 8/14 Odométrie du Pobot Easy Test OK avec le LM 393 Le montage choisi est juste un seuil, pas un montage à hystérésis qui est censé être moins perturbable. Avec un peu d'astuce, on arrive à faire tenir les connecteurs des servomoteurs, le connecteur d'un capteur, le LM393 et toutes les résistances sur la petite breadboard d'un protoshield pour Arduino : Circuit des capteurs et servomoteurs Et voilà pour l'électronique, c'est dense et intense mais on a beaucoup appris. On va passer à l'utilisation des valeurs du capteur par programmation de l'Arduino, mais avant de continuer un mot de Georges : Copyright © PoBot Page 9/14 Odométrie du Pobot Easy Datasheet SG-2BC J'attire ton attention sur le SG-2BC de Kodenshi. Il est très interessent pour un petit robot car il est beaucoup plus compact (format TO92) que les HOA07. SG-2BC : Rise & Fall Time=30us. HOA709 : Rise & Fall Time = 75 µs (voir ci-dessus). Donc le SG-2BC est 2 fois plus rapide que le HOA0709. Et environ 3 fois moins cher que le HOA0709 (chez Farnell). Copyright © PoBot Page 10/14 Odométrie du Pobot Easy Nouveau montage : comparateur à hysterésis Le montage ci-dessus était intéressant mais à vitesse basse, il y avait des incréments fantomes dûs au passage d'une zone à l'autre : entre les deux, le circuit détectait plusieurs passages donc plusieurs incréments. Pour éviter ce problème, il faut utiliser une comparaison à hysterésis. Voici des explications très claires sur les formules à appliquer : discussion sur le forum Futura-Sciences [http://forums.futura-sciences.com/electronique/75877-comparateur-a-hysteresis.html]. Reprenons le schéma : Montage comparateur hystérésis Exemple de montage réutilisant l'AOP LM393. Il y a donc trois résistances : R1 et R2 forment un pont diviseur de tension comme dans le premier montage R3 ou Rs apporte l'hysteresis, c'est une résistance de contre-réaction positive Comme explique Pa5cal sur le forum, il y a une formule à appliquer pour choisir les valeurs des résistances R1 et R2 en fonction des tensions de seuil de l'hystérésis. En regardant la tension à la sortie du capteur (donc en entrée de notre montage), on va considérer les seuils d'entrée haut et bas à : VIH = 3,6 volts VIL = 2,2 volts On utilisera Rs = 10 kOhms. On utilisera V1 = 0 volts et V2 = 5 volts (les tensions d'alimentation de l'AOP. Si on regarde la sortie de l'ampli-op, les valeurs max et min ne sont pas 0 et 5v mais : VOH = 4,39 volts VOL = 0,46 volts Donc on peut calculer A et B (voir explications du forum FS) : A = (4,39 - 0,46) / (3,6 - 2,2) - 1 = 1,53 B = (2,2*4,39 - 0,46*3,6) / (3,6 - 2,2) = 5,71 D'où : R1 = 10k * (5 - 0) / (5,71 - 1,53*0) = 8,75 kOhms R2 = 10k * (5 - 0) / (1,53*5 - 5,71) = 25,77 kOhms Copyright © PoBot Page 11/14 Odométrie du Pobot Easy On utilisera une résistance de 8,2 kOhms et de 27 kOhms. Le montage sur breadboard est assez facile. Voici le résultat en bloquant la roue : on voit bien des paliers plats, et plus d'incréments fantomes ! Résultat avec hysteresis Voici le schéma électrique complet de l'étage "odométrie" : Schéma complet odométrie Et un exemple d'implantation : Copyright © PoBot Page 12/14 Odométrie du Pobot Easy Positionnement Arduino Programmation De la doc à lire : http://manubatbat.free.fr/doc/posit... [http://manubatbat.free.fr/doc/positionning/Positionning.html] Et encore : http://www.planete-sciences.org/for... [http://www.planete-sciences.org/forums/viewtopic.php?f=1&t=12844] Procédure de test : http://apbteam.org/browser/trunk/di... [http://apbteam.org/browser/trunk/digital/asserv/doc/parameters.txt] Il y a deux solutions pour utiliser ce type d'odomètre. Mesurer la vitesse de la roue ou bien compter le nombre d'impulsions. Compteur d'impulsions Voici le résultat : on change le sens de rotation quand on atteint un seuil. On peut d'ailleurs vérifier que les servomoteurs sont réguliers. Odomètre en compteur Code Arduino avec incrémentation Copyright © PoBot Page 13/14 Odométrie du Pobot Easy Comparaison gauche/droite Un des premiers travaux à faire quand on a l'odométrie est de vérifier si les moteurs gauche et droite ont les mêmes valeurs pour la même commande. Pour cela on compte le nombre d'incréments pour chacune des consignes et on superpose. Comptes pour chaque vitesse - moteur gauche Comptes pour chaque vitesse - moteur droit Comparaison des deux courbes Copyright © PoBot Page 14/14