Électronique - 01-04-2017

Avancement du projet

80%

Avant propos

Dans le cadre de la participation de l'association ECEBorg à la coupe de France de robotique édition 2017, j'ai choisi de m'atteler à la réalisation d'un Lidar.

Un Lidar est un capteur permettant de mesurer la distance entre un obstacle et lui-même en utilisant un faisceau lumineux, le plus souvent un laser. On le met en général en rotation de manière à obtenir une cartographie à 360° de l’environnement.

Le règlement de la coupe de France de robotique autorise, en plus des robots, la présence de balises que l’on peut placer au sommet de ceux-ci ainsi qu’en bord de table. Pour être conforme, une balise doit peser moins de 400 grammes et rentrer dans un volume de 80x80x80mm. Nous avons donc décidé de concevoir et réaliser un Lidar dans un format balise pour obtenir des informations sur la position des différents robots placés sur la table.

Voici les exigences associées à ce Lidar :

  • Il doit évidemment répondre aux exigences du cahier des charges fixées par le règlement de la coupe ;
  • Il doit être indépendant du robot, et donc présenter une interface de communication et d’alimentation qui ne dépend pas directement de celui-ci pour être réutilisable aux éditions suivantes de l'événement ;
  • Il doit être facilement réplicable/réparable pour faire suite aux avaries ayant tendance à se présenter à la coupe ;
  • Il doit donner l’angle avec une résolution d’au moins 1° avec un taux de rafraîchissement supérieur à 5Hz.

La réalisation de cette année se base sur un prototype précédemment créé par des membres de l’association, partiellement fonctionnel. Dans ce billet, j'aborderais donc brièvement la mécanique, l’électronique et le code du Lidar développé cette année.

Mécanique

La principale contrainte mécanique du système est la nécessité de mettre en rotation le capteur pour avoir une détection à 360°. Pour faire passer les signaux et l'alimentation, il faudrait ainsi un joint tournant. Il s'agit d'une pièce particulièrement délicate à réaliser. Un précédent prototype d'un membre de l'association prenait cette approche:

Previous Lidar attempt.

Le joint rotatif est la pièce verte centrale avec les bagues métalliques. Ce prototype n'est pas fonctionnel à cause des vibrations des balais qui entraînent des micro-coupures des connections électriques.

Une autre approche a donc été expérimentée : le capteur reste fixe, mais on met en rotation un miroir à 45° qui réfléchi le faisceau d'un angle de 90° de la manière suivante.

Diagramme de fonctionnement du miroir.


Voici une capture d'écran de la modélisation 3D du prototype :

Solidwork model.

Sur cette capture, on distingue la partie en rotation en gris, la lentille rouge du capteur ainsi que le logement du moteur, en violet.

On notera que la mécanique a été conçue spécialement de manière à ce qu'il soit entièrement imprimable en 3D. Un moteur Maxon Micro est utilisé pour la rotation du miroir et le calcul de la position (avec son encodeur incrémental). Le format réduit de l’ensemble impose les choix techniques.

Électronique

Le capteur utilisé est de la marque Banner. Il s'agit d'un capteur versatile de détection industriel qui ne renvoie qu'une information binaire (présence ou non) et non une distance. Il s'agit d'ailleurs de la principale limite du système. Cependant, ce dernier présente l'avantage de se réfléchir uniquement sur un matériaux rétro-réfléchissant. Dans la mesure où l'on peut placer une balise de ce type sur le robot adversaire, il s'agit d'un avantage considérable car cela minimise le nombre de faux plots (détections parasites).

Pour traiter les données et offrir une interface et une configuration au Lidar, on utilise un dsPic de la famille 33F de Microchip. Ce microcontrôleur a été retenu pour les raisons suivantes :

  • Il gère nativement, en hardware, les protocoles de communications que l’on souhaite implémenter : UART, CAN et éventuellement I2C.
  • Il gère nativement, en hardware, l’encodeur incrémental du Maxon pour calculer l’angle, avec la certitude de ne pas rater de pas. L’index (angle 0°) se fait d’ailleurs avec un capteur à effet Hal (fixe) et un aimant en rotation avec le miroir.
  • Il propose des fonctionnalités avancées pour gérer les signaux potentiellement très brefs du capteur. On utilise par exemple abondamment son système complexe d’interruptions.
  • On a un très grand contrôle sur le hardware, et donc une gestion très précise des timings, entre autre. Il s’agit d’une fonctionnalité indispensable pour ce Lidar dont la précision est directement proportionnelle à la rapidité à traiter des signaux.

Voici le schéma électrique complet du Lidar (cliquez sur la photo pour le voir en grand) :

Electronic schematic.

Le reste du circuit est du support au dsPic, notamment l'alimentation qui se fait avec une "brique" de régulation Traco. Le circuit imprimé suivant a été routé sur Altium :

PCB render.

Code

Le code est structuré en deux grandes parties:

  • Une phase d’initialisation mettant en place tous les registres, et configurant donc la puce dans les modes attendus. Cette phase représente la majorité de la complexité du code car de très nombreux registres sont configurés, mais c’est elle qui donne toute sa puissance à la carte ;
  • La phase d’attente et de gestion des interruptions. Les interruptions, dans l’ordre décroissant de priorité sont les suivantes :
    • Le capteur à effet Hal, qui indique le zéro ;
    • Le capteur de présence, l’élément central du Lidar. Une interruption indique une détection : on envoie l’information dans le protocole choisi. On considère tout de même que le maintien de la précision avec l’index passe avant une détection ;
    • Le Rx (Receive) de l’UART ou la réception d’un message CAN/I2C adressé au Lidar : on obéi aux instructions de l'hôte. Cette partie, devant permettre au robot de régler dynamiquement le Lidar n’est pas finalisée.

A l’initialisation, le Lidar se met en rotation à une vitesse donnée (contrôlée grâce à un asservissement très simple) et transmet un message à chaque détection. Un algorithme, encore au stade de prototype, étudie les pistes (historique de présence d’une détection dans un secteur) pour écarter les « faux plots », c’est-à-dire les détections causées par un phénomène perturbateur.

Résultat

Voici le Lidar dans sa version actuelle :

Photo of the lidar.

La vidéo suivante illustre son fonctionnement :

Auteur : Charles Grassin


What is on your mind?

  • No comments yet!

  Retour aux projets

Projets connexes