Balise infrarouge
Date d'initialisation : Juin 2009
État actuel : Terminé
Sommaire
![]()
Description générale
Les besoins
Lors d'une participation à la coupe de France de robotique, il est indispensable de pouvoir détecter efficacement le robot adverse afin de pouvoir être conscient de sa position lors de l'élaboration in-situ de la stratégie, notamment pour planifier des trajectoires l'évitant.
Il s'agit donc de concevoir un système de petite taille (logeant dans un cube de 8cm de côté pour la balise, et des dimensions similaires pour la tourelle incorporée au robot), capable de donner en temps réel une information sur la position relative de la balise par rapport à la tourelle.
Solution retenue
Diverses solutions sont envisageables (ultrasons, infrarouges, lasers, DGPS, ...), selon la précision recherchée en regard du temps et du coût de développement. Notre objectif initial étant avant tout d'avoir une vague idée de la direction du robot adverse pour pouvoir planifier des trajectoires, nous n'avions pas besoin d'un système très précis, et nous nous sommes donc contentés d'améliorer le système mis au point l'année précédente.
Ce système est simple : la balise est un "phare" émettant en continu un code modulé par une liaison infrarouge, dans toutes les directions. La tourelle est alors constituée d'un anneau de récepteurs qui démodulent en parallèle, et d'un circuit numérique de post-traitements pour décoder et fiabiliser l'information :
![]() | ![]() |
Avantages :
- Principe de base assez simple.
- Grande robustesse face aux imprécisions mécaniques.
- Utilisation de composants peu onéreux.
- Aucune dangerosité (pas de laser).
- Pas besoin de mettre en place une communication sans fil entre la balise et la tourelle.
- Rapidité de détection et de suivi.
Inconvénients
- Distance de détection sensible au rayonnement ambiant.
- On ne peut pas obtenir de mesure de distance, ou alors de manière très approximative.
Le récepteur sera un TSOP7000. Il a l'avantage d'être centré en 455kHz au lieu de la gamme classique des 30-50kHz usuellement utilisée par de nombreux capteurs, et donc plus susceptible d'être "occupée".
![]() | ![]() |
Ce récepteur fournit en sortie un signal binaire indiquant si oui ou non il aperçoit un signal infrarouge de fréquence 455kHz :
![]() | ![]() |
Modulation : Balise d'émission
Afin d'avoir une modulation relativement performante tout en restant facile à décoder, on module une liaison série (UART à 19200bps) avec un signal carré de 455kHz via une porte NOR, l'intérêt étant que la balise n'émette rien lorsque la liaison série est dans son état de repos (état haut) :
La porteuse à 455kHz sera générée par le module PWM d'un microcontrôleur (AtMega8) utilisant un quartz plutôt qu'un autre type d'oscillateur, afin d'en garantir la précision et la stabilité.
Le signal série sera généré par ce même microcontrôleur, mais il n'émettra pas en continu : il faut tenir compte du fait que la démodulation est multiplexée, et que par conséquent nous ne pouvons prévoir le moment où le démodulateur commencera à analyser le signal en provenance d'un des récepteurs : il se peut qu'il commute alors qu'une partie de trame a déjà été transmise : il est nécessaire d'insérer des pauses entre chaque trame, d'une durée au moins égale à la durée d'une trame, pour être sûr que cela ne posera pas de problèmes : on perdra la trame qui n'est que partiellement reçue, mais toutes les prochaines trames seront correctement décodées.
Un potentiomètre permet de régler la puissance d'émission, afin de pouvoir s'adapter à toutes les conditions possibles (dans l'obscurité totale aussi bien que sous le feu des projecteurs...) :
- En émettant trop fort, tous les récepteurs verront la balise par réflexion sur les murs.
- En n'émettant pas assez fort, aucun récepteur ne verra la balise lorsque le robot est de l'autre côté de la table, rendant impossible toute planification de trajectoire.
Démodulation : Tourelle de réception
Démodulation bas niveau
Basiquement, il n'y aura aucun traitement hardware particulier à effectuer : avec la modulation choisie, le TSOP7000 reformera de lui-même le signal UART initialement émis, qu'il ne reste plus qu'à rediriger vers l'entrée du module numérique de traitement (microcontrôleur ou FPGA) :
Plutôt que de connecter directement la sortie du TSOP7000 au microcontrôleur, on choisit d'intercaler un multiplexeur permettant de router vers un même module UART de microcontrôleur différents récepteurs, que l'on vérifiera l'un après l'autre régulièrement. L'idée est bien entendu de pouvoir utiliser de nombreux récepteurs alors que les modules hardware de décodage de signal UART sont généralement au nombre de 1 ou 2 sur un microcontrôleur.
Démodulation haut niveau
Une fois connecté au module UART d'un microcontrôleur, c'est le module UART lui-même qui se chargera de vérifier la validité des trames reçues (on peut d'ailleurs prévoir un contrôle de parité automatique), pour finalement générer des interruptions lorsqu'une trame série valide aura été reçue.
Les récepteurs étant multiplexés, il est nécessaire de changer le récepteur observé à fréquence fixe. Juste avant de changer de récepteur, on regarde le contenu des buffers de réception pour voir si le récepteur en cours a reçu des trames valides.
Traitements logiciels
Une fois la démodulation effectuée, on se retrouve face à un lot d'informations binaires, à savoir pour chaque récepteur l'information de savoir s'il détecte actuellement le signal émis par la balise.
À partir de cela, il est nécessaire de faire quelques traitements élémentaires avant de pouvoir en déduire la direction de la balise...
Élimination des orphelins
Une première étape consiste à se prémunir d'un TSOP défaillant ou qui, pour un problème quelconque, ne voit pas le signal alors qu'il devrait manifestement le voir. Une règle simple consiste donc à considérer qu'un récepteur voit la balise lorsqu'il est entouré de deux autres récepteurs qui voient la balise.
Identification des amas
Une fois passée l'étape de l'élimination des orphelins, il faut maintenant identifier les groupes de récepteurs accolés qui voient la balise. On regroupe alors cette information dans une structure contenant les positions de ses bords, ainsi que la largeur de l'amas (on crée en réalité un tableau de cette structure).
Sélection du plus gros amas
Du fait des diverses réflexions (sur les murs, ...), il est possible d'identifier plusieurs groupes de récepteurs (les "amas") voyant la balise. Nous ne retenons que le plus gros, celui qui est à coup sûr en direction de la balise (toute réflexion faisant perdre de l'intensité au signal, il est probable qu'un amas dû à une réflexion soit moins large).
Mesure de l'angle
On calcule l'angle milieu, en prenant garde à la subtilité insérée par le fait qu'on a une représentation linéaire (une série de 16 bits) d'un système circulaire.
Mesure de la distance
En tirant profit du fait qu'un TSOP7000 est plus sensible au centre que sur ses côtés, on déduit naturellement que plus la balise sera proche de la tourelle et plus l'amas de détection sera large. Lorsque la balise est loin, seul un ou deux récepteurs (ceux qui sont parfaitement alignés) voient la balise, mais lorsque la balise est proche, d'autres récepteurs commencent à l'apercevoir sur leurs flancs.
Ainsi, en mesurant l'angle d'ouverture de la zone de détection (soit la largeur de l'amas de détection), on obtient un indicateur approximatif de distance : un petit étalonnage permet alors de trouver des correspondances en taille d'amas pour telle ou telle distance.
Moyennage temporel
Le moyennage temporel d'une grandeur circulaire peut-être délicat si on ne choisit pas le bon formalisme. En considérant le problème sous forme vectoriel, il est plus aisé de réaliser la moyenne : on fait la moyenne des vecteurs indiquant la direction de la balise sur les $N$ dernières mesures, et on en déduit un vecteur "moyenne mobile".
Il s'agit là de l'étape la plus gourmande en temps de calcul, et à vrai dire peut-être la moins nécessaire au bon fonctionnement du système, mais qui peut s'avérer utile si la stratégie globale du robot est telle qu'elle est très sensible aux changements intempestifs de zone de détection (dans le cas où on discrétise ensuite cette moyenne en différents secteurs : "devant", "derrière", "à gauche", "à droite", ...).
Limitations
Brouillages
Fort heureusement, les TSOP7000 fonctionnent correctement jusqu'à une irradiation de 30W/m2, ce qui est largement assez pour ne pas être ébloui ni par le soleil, ni par des projecteurs halogènes. Il n'y a donc aucun danger du côté des sources habituelles de lumière continue.
Cependant, il reste une possibilité de se faire éblouir dans le cas d'une source de lumière pulsée à 455kHz (typiquement, un autre appareil fonctionnant à 455kHz, mais ne modulant pas du tout sa porteuse). Dans ce cas, les TSOP7000 verront en permanence un signal à 455kHz (en plus de celui envoyé par la balise d'émission), et leur sortie sera dont continuellement maintenue à 0V : le système ne fonctionne plus, le circuit de décodage n'arrive plus à distinguer le signal émis par la balise du reste de l'environnement.
Il n'y a malheureusement aucun moyen de se prémunir de ce genre de brouillage, on peut simplement être conscient d'être brouillé et agir en conséquence.
Notion de distance
Il n'y a aucun mystère : la notion de distance ne peut-être qu'approximative via la méthode utilisée, qui se base sur des caractéristiques (ou plutôt des défauts) des récepteurs qui ne sont pas étalonnées par le constructeur.
Évolutivité
Tirer profit de la réponse spectrale
Une idée nouvelle pour mesurer la distance pourrait être d'utiliser la réponse spectrale des récepteurs : puisqu'on sait que leur sensibilité diminue à mesure que la fréquence du signal infrarouge s'éloigne de 455kHz, on peut émettre un signal dont la fréquence varie dans une gamme proche de 455kHz et mesurer la réelle zone de sensibilité du capteur : plus la balise est proche et plus cette gamme sera large.
Malheureusement, cette conception est elle aussi sujette à quelques inconvénients :
- Il existe un phénomène d'hystérésis dû au fonctionnement à boucle à verrouillage de phase (la fréquence d'accrochage étant différente de la fréquence de décrochage).
- On reste encore une fois sujet aux conditions environnementales, même si ici un étalonnage automatique est possible.
Moduler la puissance d'émission
Une idée pourrait être de modifier le schéma de la balise d'émission, de sorte que le microcontrôleur embarqué puisse définir la puissance d'émission : il devient alors possible d'envoyer successivement plusieurs flots de trames à des puissances d'émission différentes, en incluant dans la trame série l'information de la puissance émise.
Ainsi, il devient possible de définir plusieurs paliers de réception. Si le récepteur se rend compte qu'il reçoit seulement les trames avec une forte puissance, il saura que la balise est plus loin que s'il reçoit toutes les trames, même les plus faibles.
Autoétalonner la puissance d'émission
Toujours en ayant la possibilité de définir en software la puissance d'émission, avec l'ajout d'un moyen de communication sans fil entre la balise et la tourelle (au moyen d'un Xbee par exemple), il devient possible d'autoétalonner la balise en début de match : on positionne la balise à une certaine distance de la tourelle, et le code d'autoétalonnage essaye de trouver la puissance d'émission qui correspond au seuil de vision des récepteurs.
Voir plusieurs balises d'émission
Étant donné qu'on inclut dans les trames émises un code particulier, il est possible de considérer que ce code correspond à un numéro de balise. À partir de là, il est tout à fait concevable d'utiliser plusieurs balises, chacune ayant son propre code d'émission.
Ainsi, il est possible de positionner des balises sur certains éléments de jeu positionnés aléatoirement par les arbitres (exemple des distributeurs verticaux pour la coupe 2009). En utilisant des leds à large cône d'émission, la tourelle pourra les capter malgré la différence d'altitude.
Afin de ne pas se brouiller, il est toutefois préférable de mettre en place une synchronisation entre les balises, de manière à ce qu'une seule balise à la fois émette son signal (ce qui diminue par conséquent la fréquence de rafraîchissement de la direction de la balise).
Photos
Schéma et Circuit Imprimé
Code source
Fichier principal de la tourelle de réception, où l'on voit bien tout le traitement numérique.
Commentaires des visiteurs
Par Samuelp5 le 04/07/2009
Perso, je suis fan.
Je travaille déjà depuis l'an dernier sur des choses un peu similaires... et pour poursuivre, je compte m'inspirer de ce superbe travail. (pour faire mieux, naturellement arg arg arg)
Mais sérieusement, c'est un super boulot, bravo !
Par jeanot1314 le 04/07/2009
Bravo pour ce travail!
Je travaille actuellement sur un dialogue IR entre une télécommande de chaine hifi et un module arduino, j'utilise pour cela le Tsop1730 (30kHz). Malheuresement, mon circuit ne semble pas détecter les commandes que je lui envoi, et je ne trouve aucun tuto capable de m'expliquer pk.
Comment pourrai je m'assurer de l'état de marche de mon Tsop? 30 kHz est-ce vraiment adapté pour une télécommande?
Le site dont je me suis inspiré utilise une RadioShack 38kHz (http://www.rtfa.net/2009/01/02/arduino-ir-remote-control-more-advanced), si ce n'est la fréquence, cela changerai t'il quelque chose sur le programme qui réceptionne?
Je suis un peu désolé de poser autant de question, mais je bloque vraiment depuis des jours, et je ne sais vraiment plus quoi faire..
merci d'avance pour vos réponses
Laisser un commentaire
Merci de ne poster ici que des questions ou commentaires concernant réellement le projet présenté sur cette page. Si vous recherchez de l'aide pour réaliser vos propres projets, merci de vous tourner vers des forums appropriés tel que celui de Planète-Sciences (où je suis très présent).








