NAO d’accueil

Membres du projet

Ce projet est réalisé par:

Fanny Ringler Et Benjamin Hervé

Introduction

 

Étant étudiants en deuxième année de DUT GEii (Génie électrique et informatique industrielle) , nous sommes amenés depuis courant novembre à suivre un projet en fonction de la spécialité choisie.

Ayant choisi la spécialité robotique, nous avons eu la chance de pouvoir réaliser ce projet avec un robot Nao.

 

Présentation du Sujet

 

Nao est un robot entièrement programmable, ce qui nous offre de multiples choix de sujet totalement différent. Pour notre projet, nous avons décidé de programmer Nao afin qu’il puisse diriger une personne dans le bâtiment B de notre département.

 

Ce projet va permettre de nous familiarisé avec le logiciel Choregraphe, qui est le logiciel fournit avec le robot, ainsi qu’avec le langage de programmation python.

 

Présentation du Robot

 

Le robot Nao est un petit robot humanoïde développé par la société française Aldebaran Robotics en 2006.

Nao est entièrement programmable et est fourni avec un logiciel Choregraphe qui permet de contrôler le robot par bloc préprogrammé par Aldebaran mais qui permet aussi de créer des nouveaux blocs avec le langage de programmation python ou java.

Le robot possède 25 degrés de libertés et des capteurs qui permettent à Nao de recueillir des informations internes (sa position, l’état de ses moteurs…) ou externes (comme le son).

Nao_caract

Cahier des Charges

 

Afin que Nao puisse guider ses clients vers la salle de leur choix, il faut qu’il:

  • communique avec le client
  • se place de manière à suivre le couloir
  • trouve le chemin qui aboutit à la destination
  • dirige cette personne dans la salle de son choix
  • gère la présence d’un obstacle
  • communique avec un Raspberry

Gestion de Projet

 

Répartition des tâches:

Fanny:

-Le placement de Nao de manière à suivre le couloir

-Trouver le chemin qui aboutit à la destination

-Diriger la personne dans la salle de son choix

Benjamin:

-Communiquer avec le client

-Gestion de la présence d’un obstacle

-Communication avec un Raspberry

 

 

Développement

 

Communiquer avec le client :

Pour la communication avec le client on utilise directement le bloc de commande Dialogue qui nous permet de déclencher des consigne en fonction de ce que Nao a entendu. Dans notre cas les consignes correspondent aux numéros des markers choisie pour désigner les  salles du couloir

 

Sans titre

bloc de commande du Dialogue

communication client

Les mots entre parenthèse sont ce que Nao peut reconnaitre lorsqu’on lui parle, on peut voir que pour la première ligne de dialogue il y a plusieurs mots que Nao détecte.

Une fois que le client dit un mot qui est dans le  script du bloc dialogue, le robot le détecte et dit la phrase correspondant au mot et ensuite il active la consigne.

 

 

Le placement de Nao de manière à suivre le couloir :

1ère étape: Recherche d’un repère

Au départ, Nao ne connais pas sa position dans le couloir. Pour la connaître il devra rechercher autour de lui un repère qu’il connaît. On dira qu’il va scanner la zone autour de lui.

Pour les repères, deux solutions sont possibles:

  • L’utilisation de markers (qui sont des repères connu par le robot mais limités en nombre)

    marker

  • L’utilisation de la reconnaissance visuelle (qui pourront être de repères divers mais nécessite un apprentissage)

Nous allons utiliser les markers afin que le programme puisse être injecter dans n’importe quel robot sans avoir besoin de faire l’apprentissage de la reconnaissance visuelle à chaque fois.

Maintenant le repère choisit, Nao va devoir scanner la zone.

Le principe de ce scan est simple: le robot va tourner la tête si au bout d’une seconde s’il n’identifie pas de marker . Si détection la phase de scan se termine.

diagram scna

Voici comment le scan de la zone est programmé:

Dans le script est codé la rotation de la tête de Nao.

L’interaction entre le Naomark et le script fonctionne de la sorte:

Nao tourne la tête, puis reste fixe pendant une seconde. Si avant ce temps aucun marker n’est détecté , Nao va tourner la tête à nouveau. Ainsi de suite jusqu’à la détection d’un marker.

scrip tete rot

Dans l’entrée onStart, l’orientation de la tête est initialisée à 0 (le robot regarde devant lui)

C’est dans l’entrée input qui sera activé lorsque le robot ne détecte pas de marker. Un paramètre x rentré par l’utilisateur détermine l’écart de la rotation de sa tête à chaque incrémentation.

A chaque fois que cette entrée est activée, la rotation de la tête va s’incrémenter ou se décrémenter .

La commande motionProxy.angleInterpolation s’occupera alors de faire tourner la tête de Nao.

 

2eme étape : orientation du corps de Nao

Une fois la position spatiale déterminée , il faut que le corps de Nao soit orienté de manière à pouvoir marcher le long du mur où sont positionnés les markers.

Pour cela on récupère l’orientation de la tête du robot et on fait pivoter son corps afin que son torse soit à + ou – 90° du marker en fonction de la consigne de la salle à atteindre.

 

3eme étape :

On replace correctement la tête de Nao pour qu’il puisse à nouveau regarder le mur où sont placés les markers .

L’association du dialogue et du positionnement de Nao donne:

Trouver le chemin qui aboutit à la destination :

plan markers

Ce schéma est un plan simplifié du bâtiment B. Il indique où sont situés les markers et dans quelles salles Nao peut aller.

 

Après la phase du placement du corps de Nao, il faut déterminer le chemin qu’il devra suivre afin d’atteindre sa destination.

 

Pour cela six tableaux sont nécessaires. Ces tableaux indiqueront la direction à prendre en fonction de la position initiale du Robot de l’orientation de la tête:

Si le robot regarde à droite (le mur de marker est à sa droite) les deux directions possibles seront celles qui suivent le chemin de la sortie au secrétariat et de la sortie à la salle B6.

Si le mur de marker est à sa gauche, quatre directions sont possibles:

– de la salle B6 à la sortie

– de la salle B6 au secrétariat

– du secrétariat à la salle B6

– du secrétariat à la sortie

 

Une fois que le corps de Nao est placé correctement , la direction qu’il devra suivre (sous forme de tableau ) sera choisi en fonction de la consigne, de sa position initiale et de l’ordre sa tête.

 

Diriger la personne dans la salle de son choix :

La dernière étape pour orienter Nao vers la salle demandée est de lui indiquer les mouvements qu’il doit effectuer en fonction du marker qui visualise.

En fonction de sa consigne, Nao va effectuer divers mouvements: Marcher tout droit, tourner à droite, tourner à gauche, indiquer du bras et regarder la salle voulue. Il doit aussi indiqué oralement à son client qu’il est arrivé à la salle de son choix.

Un programme scrutant le tableau de la direction que doit suivre Nao va alors s’occuper d’indiquer quand chaque mouvement doit être effectué. Ce programme est appelé à chaque détection  de marker.

 

Il vérifie tout d’abord si le marker détecté est le marker de la consigne ou le marker en face de la salle voulue.

Sinon il vérifie si ce marker demande au robot de tourner à gauche ou à droite.

Sinon le robot continuera à marcher tout droit.

 

Gestion de la présence d’un obstacle :

Pour que le Robot évite les obstacles plusieurs choix s’offre à nous:

-utiliser les capteurs du robot afin de localiser l’obstacle et de le contourner

-Faire stopper le Nao devant l’obstacle grâce a ces capteurs et ensuite dialoguer avec le Nao pour l’aider à continuer son chemin.

Le problème de la première solution est qu’il y a trop de possibilité à programmer pour que le robot puisse esquiver l’obstacle.

Donc on optera pour la deuxième solution, pour cela on va utiliser le bloc de commande « dialogue ».

 

code dialogue

 

Capture sert pour que le client soit obligé de répondre au question précédente avant d’arriver à la ligne du dialogue suivante. Dans notre cas il faut que le client dise « oui » avant de dire au robot « c’est bon ».

 

bloc evitement

 

Dès qu’un capteur qui a été sélectionné détecte quelque chose il envoie une impulsion pour stopper la marche du Nao. Ensuite le robot nous demande de l’aider grâce au bloc de commande dialogue

et il y a plusieurs possibilités pour aider Nao :

-Déplacer l’obstacle qui gêne Nao.

-Demander à Nao de reculer pour qu’il puisse repartir en avant par la suite.

Voici une vidéo de la détection d’un obstacle par Nao.

 

 

Communication avec un Raspberry :

Le but de cette partie est de communiquer avec un Raspberry pour que le robot lui envoie sa position dans le couloir où il devra guider les clients.

Notre partie est uniquement de crée la connexion entre le robot et le Raspberry, toute la partie base de donnée est géré par un autre groupe de projet.

Communication avec la raspberry par le réseau de l’IUT et par protocole UDP

UDP_IP = ‘IP Raspberry’

UDP_PORT_emission =Port du robot
sock_emission = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP

Difficultés rencontrées

 

Les difficultés rencontrées au cours de notre projet ont surtout été lié au faite que le Nao ne marchais pas tout le temps droit ce qui nous posais beaucoup de problème, cela était lié au sol qui n’avait pas tout le temps une surface plane. Donc il faut souvent l’aider à se recentrer dans le couloir pour garder la même trajectoire.

Des problèmes de connections ont aussi été très présents, ce qui entrainais un arrêt de l’exécution de la tâche que devais faire Nao.

Lorsque le robot a peu de batteries, ses mouvements sont plus faibles, plus lents voir plus exécutés.

 

Conclusion

 

Ce projet a été très intéressant au niveau de la programmation, car il nous a permis d’appliquer les connaissances acquises en cours. Tel que robotique avec le langage python et la prise en main du logiciel Choregraphe.

Au cours de ce projet il a fallu résoudre les problèmes que nous avons rencontré, ce qui nous a permis d’améliorer notre autonomie ainsi que le travail en équipe.

Ce projet était très intéressant à développer malgré les difficultés rencontrées au cours de celui-ci.