Club robotique de Sophia-Antipolis

Accueil > Projets, études > Nos réalisations > Projets spéciaux > Utilisation des données LIDAR pour calculer les déplacements d’un robot Mobile

Utilisation des données LIDAR pour calculer les déplacements d’un robot Mobile

dimanche 26 janvier 2014, par Frédéric Bernat

L’algorithme proposé fournit les indications de vitesse et de direction en fonction des informations récupérées par un télémètre laser (LIDAR). On optimise la vitesse de déplacement en tenant compte uniquement de la présence d’obstacle directement sur la trajectoire.

Considérons le problème d’un robot autonome sur un terrain plat inconnu avec un objectif à atteindre. Supposons que le robot connaisse sa position et son orientation. S’il n’y a pas d’obstacles, c’est simple : le robot va se déplacer jusqu’à l’objectif.
Lorsque des obstacles sont ajoutés, cette technique doit être légèrement modifiée.
Tant qu’aucun obstacle ne forme de piège, ou de configurations où le robot aurait besoin de s’éloigner de l’objectif, il suffit qu’il de se diriger dans la direction lui permettant de faire le plus de progrès vers l’objectif sans heurter d’obstacles.

Le traitement et l’évitement des obstacles et des culs de sac, est un problème connu. On le traite par la combinaison des techniques cartographique et de recherche de chemin, comme l’utilisation d’une grille d’occupation et une recherche type A* (ou SLAM), on peut ainsi créer une séquence de points de cheminement intermédiaire de sorte que l’on évite les pièges existant entre les étapes intermédiaires. Une fois que la trajectoire a été générée, le problème se réduit à la gestion du déplacement vers le point intermédiaire suivant.

Une approche souvent utilisée est l’exploitation des champs de potentiel. L’idée est que si vous additionnez les champs de vecteurs qui tirent le robot vers son but avec des champs qui poussent loin de l’obstacle, le résultat sera un chemin sur lequel le robot peut se déplacer pour atteindre l’objectif sans heurter quoi que ce soit. Cette approche est bien représenté par l’Histogramme Champ Vecteur ( VFH ). Néanmoins elle présente deux faiblesses fondamentales. Tout d’abord, la combinaison des champs peut produire des minima locaux où la force de l’objectif est exactement compensée par les forces d’obstacles, ce qui entraînera l’arrêt du robot. Deuxièmement, la nature de la technique entraîne le robot à virer loin de tout obstacle, même quand il n’y a pas de risque de collision, ce qui se traduira par des chemins sous-optimaux.
Ces deux faiblesses peuvent être traitées dans une certaine mesure en sélectionnant correctement les constantes de configuration, mais il est difficile de trouver un ensemble de constantes idéales.

L’algorithme proposé détermine, sur la base des données du capteur, la direction vers laquelle le robot doit tourner, la vitesse de virage, et la vitesse a laquelle le robot peut se déplacer en toute sécurité. Il offre d’excellentes performances, pour un robot doté d’un LIDAR (et un microcontrôleur performant, voir un RaspberyPI).

Cet algo est directement issu des recherches menées dans le cadre du Concours de Navigation Intelligente pour Véhicules Terrestre (IGVC). Dans ce défi, un robot doit naviguer de manière autonome à travers un ensemble indéterminé d’obstacles statique et de neuf points GPS sur un parcours de 55 par 65 mètres. Le but est de parcourir le plus de points de passage le plus rapidement possible.
( ma source pour cet article tout en bas)

Fonctionnement de l’Algorithme

Il fonctionne de manière réactive pour calculer la vitesse instantanée et la vitesse de virage. L’objectif est de sélectionner la vitesse et le l’angle de rotation qui va permettre au robot de faire des progrès rapides vers le but sans toucher quoi que ce soit.
Cette procédure doit être exécutée souvent (dans l’idéal : fréquence de renouvellement des données lidar), et le résultat est utilisé pour calculer les commandes moteur à appliquer jusqu’à la prochaine itération.

Au départ l’algo calcul la direction vers le But. Si l’angle entre le robot et le But est supérieur à 90°, on fait alors pivoter le robot pour l’aligner avec le but. Sinon on calcul quelle est la route la plus sure et la plus rapide.
Il trouve la direction à suivre en recherchant dans l’espace balayée par le LIDAR, le meilleur couloir ouvert. Un couloir est un rectangle, faisant saillie de la face du robot, qui est suffisamment large pour que le robot puisse se déplacer en toute sécurité. (la largeur du robot, plus une marge de sécurité, comme illustré sur la figure 1).
On considère chaque couloir possible : un pour chaque angle renvoyé par le LIDAR (limité ]-45 , 45[, en effet on ne regarde que vers l’avant). Pour chaque couloir, l’avancement qui peut être fait à l’intérieur est calculé en prenant la distance minimum renvoyé par le lidar dans les limites de celui-ci.

La formule suivante, calcule la distance d’intersection d (ω,α,θ) entre le laser et les parois du couloir (virtuel). Les arguments de cette fonction sont :

la largeur du couloir (ω) ,
l’angle du centre du couloir (α)
l’angle du laser (θ) .

Figure 1 : illustration du couloir de déplacement du robot

Ayant la largeur du couloir ouvert en face du robot, la valeur de l’avancement du robot parcourant ce couloir peut être calculé en comparant la distance actuelle le séparant du But, à la distance séparant la fin du couloir au But.
Le meilleur couloir est celui qui permet la plus forte progression. Une fois que la direction et la vitesse de rotation ont été calculées, il convient ensuite de calculer la vitesse d’avancement maximale.

La vitesse choisie est soit la vitesse maximale soit la vitesse qui amènera le robot à se déplacer en respectant la marge de sécurité spécifiée par l’utilisateur. Le premier paramètre est la courbure du virage, qui est utilisée pour générer un facteur d’échelle pour la vitesse de virage en utilisant l’expression :

(|α|/π)^(1⁄TI) , TI : paramètre permettant de gérer la vitesse dans les virages

En effet, plus le rayon de courbure du virage est grand, plus la vitesse de virage sera grande. Un autre paramètre est la résistance aux changements de direction, cela permet de favoriser les chemins les plus directes et dont l’expression est :

(cos|goalα-α|)^TR , TR : facteur de pondération

Où cos|goalα –α| est la valeur normalisée de progression vers un but en fonction de
l’orientation du robot et du but. Sa fonction principale est d’éviter les indéterminations entre deux ou plusieurs couloirs de même valeur, en introduisant un coût sur le virage à effectuer. Le dernier paramètre, est la marge de sécurité autour du robot.

Résultats et Tests

Voila, le plus dure a été de comprendre l’algo, le codage n’a pas vraiment posé de problème par contre il demande beaucoup de puissance de calcul.

Vous trouverez ci-dessous le code de l’algo que j’utilise avec mon arduino DUE (le code fonctionne également pour un arduino MEGA) . Pour l’instant avec la puissance de calcul disponible, autant vous dire que la vitesse dans les virages n’est pas mon principal soucis, ni la marge de sécurité temporel avant impact sur un obstacle (en fonction de la vitesse de déplacement). Non ! mon principal souci, c’est de ne pas mourir d’ennui avant que le robot ait atteint son But ;))

Pour connecter l’arduino DUE au LIDAR j’ai utilisé le petit level shifters vendu chez adafruit pour 3.65$. En effet le DUE fonctionne en 3.3V, donc attention aux connections !!!

Il permet de transmettre les signaux série, entre le LIDAR et le RX3 du DUE (5V ->3,3V), ainsi que le signal pwm entre arduino et la petite carte contrôlant le moteur (3,3V -> 5V).
voici le branchement de mon arduino DUE :

Il faut encore que j’optimise le code pour le calcul des paramètres de vitesse et d’orientation, mais cela m’étonnerai que j’arrive à descendre sous la seconde. Pour l’instant je suis à 2 - 3 s de traitement pour une rotation du LIDAR. Dans l’idéal il faudrait que le temps de calcul soit inférieur à 0,2 seconde. En effet le LIDAR tourne a la vitesse de 5 tr/s.

Vos commentaires

Un message, un commentaire ?

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.