Pour être utilisées avec l’Arduino DUE, les données du LIDAR vont subir une petite transformation, ceci afin de diminuer le volume à traiter mais également pour augmenter la qualité de ces données.
Nous allons donc appliquer un prétraitement aux données brutes. Le processus de transformation doit être simple, rapide et améliorer l’information contenu.
Pour calculer un vecteur de perception, l’ensemble des données vont être réparties par secteur. J’ai opté pour une découpe en dix secteurs mais rien n’empêche d’augmenter le nombre de secteurs en fonction de la puissance de calcul disponible.
- A représente le vecteur de déplacement du robot
Chaque secteur représente 36° d’arc, il est caractérisé par un vecteur, dont la norme est la longueur la plus petite du secteur considéré, et l’orientation est l’angle correspondant au milieu du secteur. Soit
Ici, l’orientation des 10 vecteurs est fixe (18°,54°,90°,126°,162°,198°,234°,270°,306°,342°)
1 Petit Rappel sur les vecteurs
Un vecteur est représenté par une flèche (ou un ensemble de flèches) qui possède une direction, un sens et une longueur encore appelée "norme".
Soit F ⃗ un vecteur. Il est représenté par sa norme ‖F ⃗ ‖, et α son orientation (direction + sens).
Dans notre cas, l’utilisation des vecteurs va être très pratique puisque chaque mesure du lidar va nous donner un angle et une longueur.
Oui ! mais comment additionner plusieurs vecteurs non colinéaire ? C’est très simple en fait. Prenons le cas élémentaire d’un vecteur décomposé dans l’espace défini par le repère (X,Y).
Lorsqu’une force est définie par ses composantes rectangulaires, la direction et l’intensité de la force sont données par :
Donc lorsque l’on cherche à calculer la résultante de plusieurs vecteurs comme sur le dessin ci-dessous :
Les flèches bleues représentent les vecteurs F2,F3,F4 mis bout à bout
L’addition des vecteurs F1,F2,F3,F4 nous donne l’équation suivante :
2 L’Algorithme
Cet article est basé sur l’article intitulé ‘ Fuzzy Logic Wall Following of a Mobile Robot Based on the Concept of General Perception ‘ paru en 1995.
L’algorithme repose sur la représentation de l’environnement du robot. Aucune carte de l’environnement n’est utilisée. Les murs et les obstacles ne sont pas modélisés. Un contrôleur flou utilise ensuite les informations fournies par le concept de la perception pour guider le robot le long des murs et autour des obstacles qui sont considérés comme faisant partie d’un mur, à moins que la distance entre obstacle et le mur ne permette un passage en toute sécurité.
Le concept vise à la construction d’une perception de l’environnement immédiat du robot à partir des données fournies par le Lidar, exprimée sous la forme d’un vecteur appelé vecteur de perception.
A cet effet, à chaque secteur est attribué un vecteur pi de perception. Sa direction est égale à l’ orientation de l’axe du secteur et sa longueur est fonction de la distance mesurée di :
ou dmin et dmax désignent la distance la plus courte et la plus longue pour lesquelles un objet peut être détecté de manière fiable. pi est limité entre 0 à 1, respectivement de telle sorte que :
Ce vecteur de perception est comparable aux vecteurs utilisés dans les histogrammes de champ de vecteurs, mais il est liée au capteur et non pas à une cellule d’une grille.
Le vecteur de perception principal P est composé de la somme des perceptions pi. Sa direction est égale à la somme de tous les secteurs valides et sa longueur est égale à la perception individuelle la plus forte :
La variation du vecteur de perception dans le temps est noté p’, (dérivée de P sur dt). La variation de pi est égale à :
Le concept de la perception est parfaitement adapté pour une description linguistique d’une multitude de situations dans lequel un robot mobile pourrait se trouver. Une description de ce type, est utilisée telle quelle, comme entrée pour la base de règles de logique floue pour l’algorithme de suivi de mur.
Il n’est pas nécessaire que plusieurs secteurs perçoivent le mur afin que le robot puisse suivre un mur sans difficulté, même si le mur est perçu par un seul secteur.
3 Contrôleur Flou
Le contrôleur flou a été conçu sous les deux hypothèses qui sont :
- aucun mur ou obstacle n’est mobile,
- il existe un mur.
Ceci signifie qu’une paroi est toujours perçue par au moins l’un des secteurs, quelle que soit l’orientation du robot.
3.1 Entrées
Le contrôleur flou est constitué d’une base de 33 règles, qui représentent les instructions concernant le comportement du robot.
Les valeur prises en compte sont l’angle entre le vecteur de perception, le vecteur de déplacement du robot, l’intensité de la perception p et son évolution dans le temps p * .
3.2 Les Sorties
Les valeurs calculées en sortie sont le changement d’orientation et l’accélération.
3.3 Les Règles
le tableau est l’expression synthétique de la formule suivante :
IF alpha=RB AND P=VL THEN STEER=HR
Table gérant l’accélération du robot
avec :
ZE ou Z=ZERO
P=Positive
EB=Emergency Brake
B=Brake
La valeur de sortie est calculée par le centre de gravité formé par l’union des degrés de validité des règles activées.
4 Le Robot utilisé
Certains des vétérans du club auront reconnu la base mobile qui m’avait servi à faire mon premier robot flou.( Sic transit gloria mundi : et ça c’est carrément pour les ancêtre qui ont encore des notions de latin).
J’ai rajouté un capteur ADNS3080 sous le châssis afin de me servir d’odomètre, il est positionné à 2,5 cm au-dessus du sol ce qui ne gêne en rien puisqu’il est équipé d’une optique de Webcam et l’éclairage est assuré par une Led blanche de 1W.
Un arduino MEGA se charge de l’interface entre le capteur et le DUE, afin de fournir les données de position du robot (je sais ! ça fait un peu marteau pour tuer une mouche mais le but est de pouvoir petit à petit greffer d’autres capteurs). Le MEGA fait aussi l’interface avec la carte moteur (construite autour du célèbre double pont en H : L298 + 8 diodes 1N4007, ça passe du 2A (de 5V-12V) par moteur exactement ce qu’il me fallait).
Le circuit electrique :
L’alimentation est assurée par une batterie lipo 3 éléments délivrant 11,1v 12,6V.
Une alimentation 5v stabilisés est assurée par un BEC Turnigy qui délivre 5V sous 7A.
Cette alimentation va nourrir le capteur ADNS3080 le LIDAR et plus tard d’autres capteurs.
J’utilise un module préservant la batterie afin d’éviter une décharge trop profonde qui l’endommagerait définitivement. Ce module est disponible chez POWAIR6 pour 8€.
Voici le schéma électrique et des protocoles de communication.
5 Le Code