Odométrie du Pobot Easy

publicité
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
Téléchargement