<< The Fribotte Homepage >>
Un club de passionnés en robotique participant à la coupe de France E=M6.
[Accueil] [Qui sommes-nous ?] [Robots] [Coupe e=m6] [BD Technique] [Forum] [Reportages] [Liens] [WiKiFri]

Fribotte



 Introduction : La mesure de la distance
En robotique, on cherche toujours à avoir le maximum d'informations sur l'environnement afin de pouvoir adapter le comportement de ses chers petits robots.
Il y a une information particulièrement intéressante à utiliser, c'est l'information de distance.
Distance du robot par rapport à un mur, à un objet, au sol, etc ...
Pas seulement une information "le mur est à moins de Xcm" comme on a déjà vu mais bien une valeur donnant une indication sur la distance réelle en cm.
Le système le plus commun utilisé en robotique était le système de télémètre à ultrasons.
Mais on trouve maintenant des systèmes totalement infrarouges, des capteurs SHARP comme le GP2D12 qui présentent de nombreux avantages (il en existe peut-être d'autres, mais je ne connais que ceux-là).
Le capteur, échelle donnée par une pile 9v


  Description rapide
Ces capteurs infrarouge (IR) sont très petits, peu chers (environ 120Fr la version analogique), renvoient une information rapidement (toutes les 40ms) et de façon relativement précise.
La détection se fait sur un cône étroit, sur 10 à 80cm de distance.
Je les ai trouvés sur la page du robot cafard, qui en parle.
Le fournisseur se trouve au Canada, HVW TECHNOLOGIES. On peut commander sur leur site. Ca marche bien, enfin en tout cas pour moi ça a marché :) J'ai testé le modèle qui renvoie une information analogique, de 0 à 2.5V.
Cette information, après numérisation, peut être convertie en distance (ce n'est pas linéaire, donc prévoyez un tableau de correspondance).
Il y a d'autres modèles où la liaison se fait sous forme pseudo-série, facilement implémentable sur un micro-contrôleur.
Voici la doc du modèle analogique vendu chez HVW (elle est pas mal détaillée, avec en particulier des courbes de réponses en fonction de la distance).
Et ici la doc de SHARP.


 Comparatif ultrason / IR
Plutôt qu'un long discours, nous allons détailler les caractérisitiques de ces télémètres IR face aux télémètres ultrasons.
Je n'ai pas à proprement parler testé de télémètre à ultrasons, même si j'ai un peu suivi le développement d'un tel télémètre.
Histoire de comparer à quelque chose de concret, je vais parler du télémètre ultrason certainement le plus connu et commercialement disponible : le télémètre Polaroïd.
 Le principe
Les télémètres à ultrasons fonctionnent en mesurant le temps de retour d'une onde sonore inaudible émise par le capteur. La vitesse du son dans l'air étant à peu près stable, on en déduit la distance de l'obstacle.

Le capteur SHARP fonctionne en mesurant l'angle de réflexion d'une émission d'IR modulée, grâce à une rangée de récepteur.

 La portée
Quelques mètres en général pour les systèmes ultrasons, même si en théorie il n'y a pas de limite. Il y a aussi en général une distance minimale. Pour le système Polaroïd, on peut faire des mesures de 15cm à 11m. La portée officielle est de 10 à 80cm.
 La directivité
Les ultrasons sont très évasifs. Ce qui peut être un gros avantage (détection d'obstacle rapprochée sur une large couronne) ou un gros inconvénient (détection des murs d'un couloir et non du fond du couloir). La directivité est bien meilleure (cône de 5°). Pour faire mieux, il faut ensuite passer à des télémètres laser beaucoup plus chers !
 La précision
La précision des ultrasons dépend de la mesure précise du temps de parcours de l'onde sonore. Ce dernier peut aussi varier suivant les conditions de température, de pression ...
Précision annoncée sur le système Polaroïd : 1%.
La précision du capteur dépend de la distance (simple conséquence trigonométrique).
Excellente à 10 cm, elle régresse de plus en plus jusqu'au 80cm. Le capteur a visiblement besoin d'un étalonnage, et je n'ai pas le matériel pour en faire un précis. Mais on peut compter néanmoins je pense sur 1cm de précision, au moins de près.
 La taille
Les transducteurs ultrasons peuvent être assez petits. Mais les cartes réalisant la télémesure comme pour le système Polaroïd prennent de la place. La taille est absolument minuscule (cf photo). Rien d'autre n'est nécessaire.
 La consommation
100 mA en veille et 2A en émission pour la carte Polaroïd ! Seulement 25 mA ! En continu pour le modèle analogique, ou à chaque demande de mesure pour le modèle "série".
 Le prix
Un système ultrasons Polaroïd coûte dans les 300 Fr, auquel il faut ajouter un transducteur, dans les 100Fr. Compteur seulement dans les 120Fr pour un système IR analogique !
 La liaison avec un micro-contrôleur
Connais pas (?) mais ça n'a pas l'air simple ;) Il existe en fait 2 version différentes. Soit le capteur à une sorte de liaison série, très facile à coder sur un micro-contrôleur, et qui n'utilise que deux ports d'E/S. Soit le capteur a une sortie analogique.
 Fréquence et vitesse d'acquisition
Connais pas (?)
Au moins le temps max pour que le signal fasse l'aller retour.
Compter 1ms par 0.3cm (fois deux), soit 73.3ms pour 11m.
Le capteur en version analogique renvoit une mesure toutes les 40ms à peu près (sachant qu'il n'y a pas vraiment moyen de savoir quand).
 Sensibilité aux interférences et aux autres capteurs
On l'a vu plus haut, les capteurs ultrasons sont sensibles à la température et à la pression.
Mais il y a plus grave : Ils sont aussi sensibles aux autres appareils utilisant les mêmes fréquences, comme les télé-objectifs à ultrasons, ou tout simplement les autres robots !
Bref, à moins de trouver des fréquences assez peu utilisées, ça peut vite devenir le bocson.
Ces capteur IR ont une modulation qui les affranchissent normalement de l'éclairage ambiant.
Vous ne devriez donc pas avoir de problème de ce coté là.
Des tests que j'ai fait, si le capteur se prend une lampe directement dessus il aime pas trop... mais sinon je n'ai pas eu de problèmes.
Mieux que ça : J'ai pu faire des tests avec 2 capteurs en même temps, et ils semblent bien ne pas se brouiller !
Plus précisément, en les mettant côte à côte ils ne "voient" pas les obstacles qui sont devant l'autre capteur.
Il doit donc y avoir un mécanisme quelconque de synchronisation émission/réception. Ou alors leur temps de mesure est très bref par rapport au temps total du cycle).
Par contre, si on les met face à face et très près, la on revient dans le cas d'un éclairage direct, et les mesures ne sont plus bonnes.
 Qui les utilise ?
Les robots "professionnels" (et aussi ceux de la coupe :) utilisent beaucoup les capteurs à ultrasons.
Mais il est toujours très compliqué de modéliser totalement un environement en fonction de leur retour, en particulier à cause des cônes d'émission trop importants.
J'ai cru comprendre que les labos qui avaient le choix préféraient dans ce cas des télémètres laser ;)
C'est encore relativement peu connu, pourtant il y a un robot très célèbre qui les utilise.
Un robot développé par Sony et qui fait Ouaf!Ouaf!. Et oui, Aibo en a un dans le museau ! ;)
 Où les trouver ?
Le capteur Polaroïd se trouve par exemple chez Sélectronic.
Il faut le module de commande et un transducteur.
Allez voir sur Internet, chez HVW TECHNOLOGIES.
 Conclusion
Evidemment, les deux systèmes ont leurs avantages et leurs inconvénients, et si la distance est une information qui vous intéresse il va falloir choisir entre les deux.
Ceci dit, je distinguerais 5 cas :
  • Vous débutez. A ce moment là les capteurs IR seront ce qu'il y a de plus simple !
  • Vous avez besoin de mesurer une distance éloignée, et seuls les ultrasons le permettront. Mais gaffe au large cône d'émission !
  • Vous voulez vraiment être sûrs que rien n'approche près de votre robot, et dans ce cas une couronne de capeur ultrasons couvrira mieux que les IR.
  • Vous avez un petit robot, avec peu de place, pas beaucoup d'autonomie comme c'est souvent le cas pour la coupe. Ici évidemment, les IR conviendront mieux.
D'une manière générale, je conseille plutôt le capteur IR pour la coupe ;)
Surtout pour les problèmes de brouillage !


 Application : la programmation sur un PIC 16F877
Comme exemple d'utilisation, nous allons afficher la mesure de distance sur un afficheur LCD, en utilisant le programme déjà vu.
Tout d'abord, il va faloir rajouter une table de conversion (le PIC étant incapable de calculer rapidement la courbe de réponse).
J'ai utilisé pour cela une petit tableau excel que voici.
La formule utilisée est Distance = (reponse*2.5/128) puissance (-1.1) * 27.
Les 16 lignes marquées d'un "X" sont à recopier dans le programme.
L'unitée de sortie est le 1/2 cm (100 veut donc dire 50cm).

Ce qui donne la fonction de conversion suivante en assembleur PIC :
;**********************************************************************
;                                                                     *
;    Retour distance IR			                  	      *
;                                                                     *
;                                                                     *
;**********************************************************************

;
; Renvoie la distance en cm*2 dans W, depuis la conversion AN placee dans W
;

distanceIR

	MOVWF  	IR_TMP		; IR_TMP = W	
	MOVLW  	D'127'		; W = 127
	BTFSC 	IR_TMP,7 		; si IR_TMP>127
	MOVWF  	IR_TMP		; on met 127 dans IR_TMP

	MOVLW 	HIGH TableIR 	; Bit de poids fort dans PCLATH
  	MOVWF 	PCLATH 

  	MOVLW 	LOW TableIR	; Bit de poids faible + IR_TMP
  	ADDWF 	IR_TMP,W 

  	BTFSC 	STATUS,C	; Si on dépasse, alors PCLATH++
  	INCF  	PCLATH,F
  	MOVWF 	PCL


TableIR
	DT D'255',D'255',D'255',D'255',D'255',D'255',D'255',D'255'
	DT D'255',D'255',D'255',D'255',D'255',D'244',D'225',D'208'
	DT D'194',D'182',D'171',D'161',D'152',D'144',D'137',D'130'
	DT D'124',D'119',D'114',D'109',D'105',D'101',D'97',D'94'
	DT D'91',D'88',D'85',D'82',D'80',D'77',D'75',D'73'
	DT D'71',D'69',D'67',D'65',D'64',D'62',D'61',D'59'
	DT D'58',D'57',D'55',D'54',D'53',D'52',D'51',D'50'
	DT D'49',D'48',D'47',D'46',D'45',D'45',D'44',D'43'
	DT D'42',D'42',D'41',D'40',D'40',D'39',D'38',D'38'
 	DT D'37',D'37',D'36',D'35',D'35',D'34',D'34',D'34'
	DT D'33',D'33',D'32',D'32',D'31',D'31',D'31',D'30'
	DT D'30',D'29',D'29',D'29',D'28',D'28',D'28',D'27'
	DT D'27',D'27',D'26',D'26',D'26',D'26',D'25',D'25'
 	DT D'25',D'25',D'24',D'24',D'24',D'24',D'23',D'23'
	DT D'23',D'23',D'22',D'22',D'22',D'22',D'22',D'21'
	DT D'21',D'21',D'21',D'21',D'20',D'20',D'20',D'20'

;	RETURN		; (Inutile)

Vous trouverez ici le programme complet.
La sortie du capteur doit être branchée sur l'entrée A0.



Complétez cette page, posez vos questions et remarques ici : WiKiFri

Page http://fribotte.free.fr/bdtech/distanceIR/distanceIr.html modifiée le 14/10/2002.
Copyright fribotte@free.fr, libre de droit pour toute utilisation non commerciale.
Reproduction autorisée par simple mail