NAO suit une ligne

Résumé

Ce projet a été mené à bien par Stephane CAMUSSO et .

Le but du projet est de réaliser un suivi de ligne via un robot NAO.

Pour réaliser ce projet nous avons utilisé les éléments suivants :

  • Un robot NAO
  • Le logiciel Choregraphe d’Aldebaran
  • Le langage de programmation python
  • Les librairies pour python pour le traitement d’image

 

I. Introduction

A. La formation GEII

Le DUT génie électrique et informatique industrielle s’intéresse à la production d’énergie, sa distribution et l’électronique. Pour la partie informatique industrielle on s’intéresse particulièrement au traitement numérique de l’information et aux systèmes qui permettent ce traitement.

Au cours du troisième et du quatrième semestre nous avons réalisé des projets ayant pour but de nous enseigner une démarche de travail plus autonome qui se rapproche au mieux au type de travail qui peut nous être demandé dans une entreprise.

B. Robot NAO

Le robot NAO est un robot humanoïde conçu par Aldebaran. Il est programmable à l’aide du logiciel Choregraphe ou directement par des langages de programmation tels que Python, Java ou encore C++.

Afficher l'image d'origine

Il est équipé de nombreux capteurs et émetteurs ainsi que de 27 degrés de liberté, ce qui permet de réaliser tous types d’applications dans la limite de notre imagination.

 

Tableau récapitulatif des caractéristiques techniques du NAO :

Hauteur 58 cm
Masse 4,8 kg
Autonomie 90 min
Degrés de liberté 14 à 25
Processeur Intel Atom 1,6 GHz (V4) ou AMD Geode 550 MHz (V3.3 …)
Système d’exploitation intégré Linux
Systèmes d’exploitation compatibles Windows, Mac OS, Linux
Langages de programmation C++, Python, Java, MATLAB, Urbi, C, .Net
Connectivité Ethernet, Wi-Fi (b, g, n )
Vision 2 caméras 920p, 30 images par seconde
Audio 4 Microphones

II. Réalisation du projet

A. Problématique

Le projet réalisé à l’IUT nous permet de mettre en pratique les connaissances que nous avons acquises pendant ces deux ans. Dans le but de réutiliser nos connaissances nous réalisons un suivi de ligne impliquant la programmation du robot NAO.

Les points les plus importants à mettre en place sont le traitement de l’image et la transformation des données reçues depuis l’image pour faire marcher le robot dans la bonne direction.

B. Étude du projet

B.1. Étapes du projet

Notre projet se divise en plusieurs grandes étapes :

  • Phase d’étude
  • Réalisation du cahier des charges
  • Programmation du robot
  • Essais finaux en conditions réelles
  • Essais en conditions défavorables

B.2. Étude des méthodes de suivi de ligne

Pour réaliser un suivi de ligne il existe plusieurs méthodes possibles, voici deux solutions envisageables :

 Méthode 1  Méthode 2
1 1
 Avantages :

  • Précision
  • Peu de chance de se perdre
Avantages :

  • Traitement simplifié
  • Rapidité
Inconvénients :

  • Plus de points à traiter
  • Déplacement plus lent
Inconvénients :

  • Chances de se perdre
  • Suivi approximatif

La première méthode consiste à détecter un point sur la ligne et de s’y rendre, puis de répéter le processus. Alors que la deuxième méthode consiste à prendre plusieurs points sur la ligne et de créer une moyenne, c’est cette ligne que le robot suivra.

Notre code est fait en se basant sur la méthode 2.

Nous avons cependant trouvé une solution pour améliorer la précision. La caméra est pointée vers le sol pour que l’image acquise nous montre une plus petite portion de la ligne. Il aurait aussi été possible de couper l’image, mais nous avons choisi cette solution car le robot NAO dispose de plusieurs degrés de libertés sur sa tête, cela permet donc de régler le rapport précision/vitesse très simplement en inclinant plus ou moins la tête du robot.

B.4. Cahier des charges

Avant de commencer à travailler il faut établir un cahier des charges, ce cahier des charges permet de définir le travail qui devra être réalisé pour mener à bien notre projet.

Objectif : suivre une ligne au sol

Matériel mis à disposition : Robot NAO, Environnements de développement, Routeur, Playground (surface noir avec ligne blanche).

Étapes de programmation :

  • Acquisition d’une image du sol via la caméra du robot
  • Traitement de cette image en python avec la bibliothèque OpenCV
  • Codage en python pour le choix de la direction à prendre
  • Envoi des instructions vers les moteurs
  • Déplacement du robot

B.5. Présentation des logiciels et librairies utilisés

Pour la réalisation du projet nous utilisons :

Choregraphe :

1

Le logiciel Choregraphe développé par Aldebaran est un logiciel permettant de :

  • Créer des animations et des comportements (behaviors)
  • De les simuler sur un robot virtuel ou directement sur un robot NAO
  • Contrôler le robot NAO

Ce logiciel permet de développer des comportements pour le NAO de deux différentes façons :

Soit via une interface graphique comportant des codes déjà pré-programmés par Aldebaran soit en écrivant directement le code en langage Python.

Spyder :

Afficher l'image d'origine

Spyder est un environnement de développement pour le langage Python qui offre des outils similaires à MATLAB.

Nous l’avons notamment utilisé au début du projet pour développer nos codes avant de les intégrer dans le logiciel Choregraphe.

OpenCV :

http://1.bp.blogspot.com/-QSMSic3f_j8/TbwFSb4fJAI/AAAAAAAAAKk/zMNELOGe1_E/s1600/logoweblarge640_480.png

OpenCV est une bibliothèque graphique qui propose des outils de traitement d’image pour plusieurs langages, notamment Python. Elle nous sert pour le traitement de l’image.

NumPy :

https://bids.berkeley.edu/sites/default/files/styles/400x225/public/projects/numpy_project_page.jpg?itok=flrdydei

NumPy est une bibliothèque servant à utiliser des fonctions mathématiques et à gérer des matrices et des tableaux multidimensionnels.

NaoQi :

2014_digital_nao_resources_icones_naoqi_1

NaoQi est le système d’exploitation utilisé sur le NAO. Il permet d’interpréter le code que nous lui envoyons, que ce soit un comportement prédéfini dans chorégraphe ou alors un code écrit via un autre logiciel.

En effet il n’est pas nécessaire de se connecter un robot via Coregraphe pour lui envoyer des instructions, dans ce cas il faut simplement ajouter l’adresse réseau du robot dans le code.

C. Réalisation du projet

C.1. Acquisition de l’image

suiviligne

L’acquisition de l’image se fait via la camera situé au niveau de la bouche du NAO afin d’avoir une zone assez proche du NAO pour ne pas anticiper trop tôt les virages et donc augmenter la précision du déplacement.

Exemple d’image capturée :

camImage21

Dans le cas où la ligne serai beaucoup plus longue et ne comporterai que des virages légers, l’utilisation de la camera haute serait possible. Cela augmenterait la vitesse de déplacement au détriment de la précision qui serait moins utile dans ce cas.

C.2. Traitement de l’image

suiviligne

 

Une fois la méthode pour le suivi de ligne choisie, il faut réaliser le traitement de l’image. Pour cela nous avons décidé d’utiliser une bibliothèque OpenCV pour python.

OpenCV est une bibliothèque spécialisée dans le traitement d’image, elle nous permet de repérer la ligne et de déterminer une position ou une direction que le robot devra suivre.

Pour cela nous appliquons un filtre à l’image capturée (filtre de Sobel):

2014_digital_nao_resources_icones_naoqi_1

Le filtre de Sobel est un filtre permettant la mise en valeur des contours.

Exemple d’image filtrée :

camImage46

C.3. Calcul des coordonnées

conversion

 

Le calcul des coordonnées se fait en deux grandes étapes.

Dans un premier temps il faut récupérer deux informations brutes sur l’image capturée :

  • l’Offset, qui correspond à la distance horizontale entre le robot et la ligne
  • la Direction qui est une droite qui représente la moyenne des points de la ligne

1

Pour calculer ces coordonnées nous utilisons la librairie NumPy :

Le calcul de l’Offset s’effectue en mesurant la distance entre le bord gauche de l’image et le premier pixel blanc. Cette mesure est toujours réalisée sur une ligne horizontale au centre de l’image.

Pour la direction, on récupère les pixels blancs comme pour l’Offset, mais cette fois ci au point le plus haut et au point le plus bas de l’image. Ensuite on trace une ligne entre ces deux points.

Ensuite nous convertissons ces données en 2 coordonnées que la fonction de déplacement du NAO a besoin pour que le robot bouge.

C.4. Déplacement du robot

moveto

Pour se déplacer le robot a besoin de 3 coordonnées et d’un paramètre :

2014_digital_nao_resources_icones_naoqi_1

Tout d’abord, la coordonnée X qui correspond à la distance que le robot doit parcourir. Cette valeur est fixe cependant nous n’attendons pas de parcourir toute la distance pour renvoyer des nouvelles coordonnées.

Ensuite, la coordonnée Y correspond au placement horizontal du robot par rapport à la ligne à suivre. Elle a la même valeur que l’Offset calculé précédemment mais divisée par 2, cela permet de corriger les erreurs de trajectoire plus doucement. Lorsque cette valeur est trop grande le robot essaye de se déplacer trop rapidement sur le côté, cela risque d’entrainer un balancement du robot qui peut aller jusqu’à entrainer une chute.

Puis, la coordonnée T correspond à l’angle à prendre pour suivre la ligne.

Enfin, le paramètre « StepFrequency » permet de réguler la vitesse de déplacement du robot.

C.6. Détection de fin de ligne

ligneabsente

La détection de fin de ligne se fait en mesurant la quantité de noir sur l’image capturé. Pour cela on divise l’image en plusieurs portions, qui sont représentées dans une matrice. La valeur de chaque élément de la matrice représente la couleur de la portion.

Lorsque ce chiffre se rapproche de 0 la couleur est du blanc et lorsque que le chiffre se rapproche de 150 cela correspond à du noir.

Pour connaitre la quantité de noir dans l’image on supprime toutes les valeurs inférieures à 50 et selon la quantité d’éléments restant dans la matrice on peut savoir si il y a une ligne blanche ou non dans l’image.

Nous avons ensuite créé un seuil pour que le robot s’arrête lorsque la quantité de zones noires dans l’image devient assez importante. Cela permet d’adapter la quantité de noir à détecter en fonction des conditions de l’environnement.

De plus, pour améliorer les résultats de la détection de la fin de ligne on peut configurer la camera du NAO à l’aide du logiciel Monitor d’Aldebaran pour réduire les imperfections des images capturées.

Interface Monitor :

monitor

 

Exemple d’image capturée sans Monitor, puis avec des paramètres changés dans Monitor :

monitor

Pour arriver au résultat précédent nous changeons 2 paramètres :

  • Le temps d’exposition (137 au lieu de 333 par défaut)
  • Le gain (52 au lieu de 54)

C.7. Fonctions supplémentaires

Placement initial :

placement

Le placement initial permet tout d’abord de mettre le robot dans une position prête pour marcher, mais aussi d’orienter la tête du NAO afin d’avoir la camera dans un angle optimal pour la capture d’image.

Tête tactile :

head

Cette fonction permet de commander le NAO à l’aide des commandes tactiles placées sur le haut de sa tête. En effet on peut lancer la détection de ligne, le placement initial et aussi l’arrêt du traitement afin d’immobiliser le robot.

Alerte sonore :

alerte

Une fois que la ligne est perdue ou que le robot arrive en bout de ligne, l’alerte sonore intervient en faisant parler le NAO. Dans le cas présent nous lui faisons dire « ligne perdue ».

C.8. Problèmes rencontrés

Le principal problème que nous avons rencontré lors de notre projet est une erreur liée à l’acquisition de l’image, le code d’erreur renvoyé est « get item ».

Le robot réalise plusieurs cycles avec l’acquisition correcte de l’image, puis il arrête d’acquérir de nouvelles images et réalise donc tous les cycles suivants avec la même image. Après avoir fait tourner plusieurs fois le programme avec cette même image il plante.

 

 

Sans titre

La fonction Try/Except permet d’exécuter un code, mais dans le cas où une erreur survient dans le Try alors le programme ne plante pas et exécute le code dans Except. Nous réalisons donc la capture et l’extraction des données de l’image dans Try et si celui-ci plante, Except renvoie une valeur vide, ce qui stoppe le robot. Cette action est réalisée tant que le robot n’arrive pas à capturer de nouvelle image.

Au final le temps d’un cycle est assez court pour que nous ne remarquions pas les éventuelles erreurs dans l’exécution. En effet lorsque le traitement n’envoie plus de coordonnées le robot doit tout de même terminer son mouvement, ce qui laisse le temps pour capturer une nouvelle image et recommencer un nouveau cycle.

 

 

 

Un autre point qui nous a posé problème a été l’installation de tous les logiciels et librairies, en effet nous n’arrivions pas à lier correctement les librairies de traitement d’image avec Coregraphe pour que le logiciel puisse les chercher lors de l’exécution du programme.

Au final notre erreur a été de travailler sur un OS Windows XP, en passant sur Windows 7 les liens entres les logiciels et les librairies se sont créés normalement.

C.9. Fin du projet

Le projet est un succès, en effet le NAO suit la ligne et s’arrête lorsqu’il arrive au bout de cette dernière.

Vidéo du projet en fonctionnement :

Vidéo du projet en fonctionnement en boucle :

La distance pour effectuer un tour est de 689 cm que le robot parcours en environ 75 secondes.

On trouve une vitesse approximative de : 0.33km/h soit 9.2 cm/s.

 

Après avoir fait fonctionner correctement le robot sur une surface noire avec une ligne blanche nous avons réalisé des tests sur d’autres surfaces. Le sol avec des petits carreaux gris de l’IUT pose des problèmes, cependant avec une ligne réfléchissante et une source lumineuse au-dessus du Nao, celui-ci arrive à suivre la ligne.

III. Conclusion

20160526_153440_HDR

Tout d’abord, ce projet nous a permis de mettre en œuvre les compétences acquises lors de nos deux ans passés à l’IUT de Mulhouse. En effet les modules de robotique, de vision industrielle, de programmation comme le C ou la programmation orientée objet, nous ont étés particulièrement utile dans la réalisation de notre projet.

Pendant tout le projet nous avons fait face à différents problèmes, en essayant de résoudre ces derniers par nous-même et en réalisant les recherches nécessaires nous avons pu développer notre autonomie pour ce type de projet.

En plus de permettre de mettre en œuvre ces connaissances de la façon la plus autonome que possible ce projet nous permet d’étudier un sujet qui se développe de plus en plus dans le monde de l’industrie, la robotique. Les robots sont de plus en plus utilisés, que ce soit dans l’industrie ou dans la vie de tous les jours, de plus le suivi de ligne peut servir à la gestion d’un chariot de transport dans une industrie, par exemple.