Trobot1
From Eric
Contents |
Objectifs
Un prétexte pour explorer le domaine de l'électronique...
Réalisation
La plateforme mécanique
TRobot1 est réalisé en pièces de plexiglas et aluminium plus ou moins bien coupées et assemblées. Il dispose de deux moteurs de propulsion à courant continu munis de leurs réducteurs planétaires (sorties coaxiales) et de deux magnifiques "roues folles" surdimensionnées.
Il est très laid et bien lourd.
Voici la chose dévoilant ses moteurs à courant continu.
Et son capteur infrarouge monté sur son moteur pas-à-pas.
La plateforme électronique
La commande des moteurs
Au premier février 2011, la carte de commande des moteurs est achevée. La voici, sur le robot :
Il s'agit d'une carte hybride, mêlant wrapping et soudure. On y distingue les 8 MOSFET des pont en H de commande des moteurs de propulsion avec les drivers correspondants, et le L298 de commande du moteur pas-à-pas. J'y rajouterai sans doute un contrôle de l'intensité.
Les moteurs de propulsion sont commandés en PWM. Le signal PWM est généré de façon autonome par le microcontrôleur qui dispose de 2 voies PWM (timers 16 bits). La programmation des timers est décrite dans la section dédiés à l'Atmega32.
La carte de contrôle
La carte de contrôle reprend peu ou prou la carte à base d'Atmega 32 décrite ici. J'ai simplement supprimé l'écran, l'horloge temps-réel et la télécommande (pour l'instant), afin de libérer des broches d'entrée-sortie.
Voici la carte :
Les fonctions principales
Détection d'obstacles
Détection d'obstacles par infrarouge
Il s'agit d'estimer la distance à un obstacle --- et non seulement de déterminer la présence d'un obstacle --- par un moyen optique.
Le capteur de distance est un capteur optique Sharp qui fournit un signal analogique dont la valeur dépend de la distance à l'obstacle. Le signal d'entrée est simplement connecté à l'une des entrées analogique de la carte de contrôle.
L'acquisition de la valeur du capteur s'effectue en deux phases :
- lancement de l'acquisition
- traitement de l'interruption de fin de conversion
Il est à noter que la relation entre la valeur du signal et la distance n'est pas linéaire ; cette valeur est obtenue par interpolation à partir des données du constructeur.
Détection d'obstacle par ultra-sons
Il s'agit d'estimer la distance à un obstacle --- et non seulement de déterminer la présence d'un obstacle --- par un moyen sonore (sonar). Le détecteur est décrit dans la section télémètre à ultrasons.
La version prototype :
La version finale :
Détection d'obstacle par caméra vidéo
On se référera à la page intitulée utilisation d'une caméra avec un microcontrôleur pour une description détaillée des moyens d'acquisition vidéos envisageables (et mis en oeuvre).
A supposer la capacité d'acquérir une image vidéo, comment peut-on en déduire une information sur la présence d'obstacle et, plus particulièrement, leur distance?
Marquage laser
Cette première solution consiste à projeter un marqueur (par ex. point lumineux issu d'un faisceau laser) au sol devant le robot. En l'absence d'obstacle, ce point est perçu à une position fixe dans une image capturée vers l'avant du robot. En cas de présence d'obstacle, le point lumineux va apparaître à une distance variable en fonction de l'endroit où le faisceau rencontre l'obstacle.
Si les seuls obstacles sont les murs ou tout objet présentant une surface plane perpendiculaire au plan du sol, on peut aussi déterminer la distance entre le robot et l'obstacle.
Cette solution a l'avantage de ne pas nécessiter de gros traitements d'images (comme ceux que l'on devrait réaliser si on voulait se baser sur la stéréoscopie (mise en correspondance de deux images prises de deux endroits différents situés à des distances connues).
Stéréoscopie
L'utilisation de deux caméras filmant la même scène selon des points de vue légèrement différents devrait permettre de déterminer les distances, pour peut que l'on puisse corréler les images.
Télémétrie
La carte utilise un coupleurs bluetooth BTM-5 pour transmettre les données de télémétrie à un petit boitier de TM/TC générique.
Ce boitier comprend 2 LEDs, un écran LCD ainsi qu'un synthétiseur vocal (oui...), le voila :
Localisation
La localisation du robot dans son environnement est le problème. Naturellement, il est inutile de vouloir utiliser un GPS pour localiser un robot au centimètre près!
Parmi les solutions envisageables :
- Utilisation d'un accéléromètre et d'un gyroscope solid state (ou d'un compas) pour calculer la position par intégration. Je n'y crois pas vraiment.
- Repérage de position au moyen de points de repères positionnés dans la pièce. Ces points de repère peuvent être positionnée à dessein, telles des LEDs infrarouges observables au moyens de phototransistors, où être déterminés par le robot lui-même au moins d'une caméra. Dans les deux cas, le robot calcule sa position par triangulation.
- Mesure de déplacement au moyen de capteurs de position montés sur les roues (mais gare aux glissements).
- Mesure de déplacement au moyen d'un capteur optique, à la façon de ce qui est utilisé pour les souris optiques.
Cette dernière solution me semble assez astucieuse et simple car il suffit de démonter une souris à 8€ pour récupérer le capteur et son électronique (on préférera une souris PS/2 plus facile à interfacer avec un microcontrôleur). Par contre, le capteur doit être placé très près du sol, ce qui pose problème si le sol n'est pas plan. L'alternative consiste à mesurer le déplacement des roues en plaçant les capteurs sur les roues, mais gare aux glissements... En outre, comme toute technique reposant sur la mesure d'un déplacement, les erreurs s'accumulent avec les déplacements.
On trouvera dans l'article sur les souris PS/2 quelques informations sur cette technique. La photo suivante montre la carte d'acquisition réalisée, à base d'Atmega64 :
Orientation par compas magnétique
Le robot est muni d'un compas électronique sur bus I2C. Ce compas utilise le composant MMC212xMG de MEMSIC. Il permet la mesure du champ magnétique selon deux axes ; l'orientation est déduite de ces deux valeurs. La mise en oeuvre de ce composant, sur un Atmega32 est donné ici.
Conclusions et leçons
Aucune...