P7 Utilisation d'un Robot Nao pour les enfants autistes

De Wiki de Projets IMA
Révision datée du 11 mars 2015 à 11:50 par Rex (discussion | contributions)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)



Vidéo HD


RENDUS

Rapport de soutenance Mi-parcours [[Fichier:Fichier:Projetpfenaomi.pdf]]

Rapport de soutenance fin parcours [[Fichier:Fichier:Rapport PFE RodriguezTahry.pdf]]

Executable Programme NAO finale Fichier:Remote.zip "cliquer sur l'application Programme NAO finale"

Sources programmeFichier:Source.zip

ReadME des sourcesFichier:ReadmeNAO.txt

Manuel d'utilisation Remote Fichier:Remotenao.pdf

Cahier des charges

Contexte

De nos jours, la robotique envahi nos foyers de plus en plus. On peut les remarquer dans nos cuisines mais aussi dans nos salons. La société Aldebaran Robotics est allé plus loin en créant un robot humanoïde du nom de NAO. Véritable compagnon éléctronique, ce robot est entièrement programmable et autonome et mesure 60 cm et présente des intérêts dans tous les domaines qu'il soit industriel, pédagogique mais aussi sociologique. GAPAS est une associaciation de plusieurs services au personnes handicapées. Parmi ceux-ci, on retrouve l'aide aux enfants autistes avec des difficultés visuelles. L'éducation de ces enfants diffère de celle donnée dans les écoles régulières. Il est important de s'adapter à leur(s) déficience(s) et donc de s'adapter à chacun d'eux. L'autisme se caractérise par des difficultés cognitves, socio-affectives et motrices. Cela se reflète par des troubles de la communication et de mauvaise compréhensions des émotions de leurs interlocuteurs et entraîne un repli de l'enfant. Le robot Nao par sa voix neutre et son manque d'expression faciale peut aider un enfant atteint de ces difficultés à apprendre et interagir avec le monde

«  Les enfants autistes ont un besoin d’attention considérable et NAO permet de combler ce vide en proposant des jeux simples, sans jamais se lasser. Le robot et l’enfant autiste partagent un trait commun : une lassitude inexistante. NAO vient les aider en éduquant et en faisant jouer les enfants sans se lasser. » (site internet : robotique TPE)

Objectif

Imaginer une collaboration avec la création de séquences de jeux et d’exercices éducatifs spécifiques aux problématiques rencontrées par les jeunes en utilisant l’aspect ludique et novateur de Nao. Il s’agirait de développer, en lien avec les professionnels un programme dédié à l’éducation des enfants souffrants de l’autisme : utiliser un robot Nao dans le cadre de leur accompagnement, pour stimuler les apprentissages. Par l’intermédiaire du Robot, on vise à stimuler les capacités de concentration, la capacité d’écoute, les interactions donc le travail sur la reconnaissance et l’expression des émotions.

Il s’agirait de développer des applications éducatives ayant toutes un objectif thérapeutique bien précis.

Caractéristiques du NAO

Hauteur 58 cm

Poids 4,8 kg

Autonomie 90 min

Degrés de liberté de 14 à 25 selon la version

Processeur Intel ATOM 1,6 GHz (V4) ou AMD Geode 550Mhz (V3.3 ...) selon la version

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, 30ips (localisation, reconnaissance de visages ou d'bojets)

Audio 4 Microphones (reconnaissance vocale, localisation de source)

Capteurs:

-1 Capteur tactile au niveau de la tête et 1 au niveau de chaque main

-2 bumpers (capteur de contact) au niveau des avant-pieds

-2 sonars utilisant des capteurs ultrason (émetteurs et récepteurs)

-1 accéléromètre 3 axes

-2 gyromètres

-2 LED infrarouges

-2 Haut-parleurs (synthèse vocale)

Nao caract.png


Exemple de collaboration avec NAO [ https://www.youtube.com/watch?v=8BiayzQxTQA ]

Déroulement du projet

Semaine 1 : 15/09 - 21/09

Prise de contact avec les différents acteurs du projet.

Semaine 2 : 22/09 - 28/09

Recherche sur les besoins des enfants autiste. Constitution d'un dossier avec des méthodes de développement


Méthode ABBA [1]


Méthode de développement Fichier:Autisme.pdf


Méthode TEACCH Fichier:TEACCH.pdf

Semaine 3 : 29/09 - 05/10

Mise en place d'un cahier des charges et prise de rendez vous avec l'IME la pépinière

Semaine 4 : 06/10 - 12/10

Entretien avec notre professeur encadrant M. Grisoni. Différents points ont été abordés, notamment:

-La bonne prise en main du projet et l'élaboration du cahier des charges.

-La faisabilité du projet au regard des capacités techniques du NAO (Technologie embarquée, temps de charge, logiciels,... )

-Le déroulement des séquences de jeux et la prise en compte de chaque détail dans la réalisations de celles ci.

Semaine 5 : 13/10 - 19/10

Rencontre avec les représentants de GAPAS à l'IME la pépinière à Loos, en présence notamment des accompagnateurs des enfants et adolescents atteints d'autisme et de déficience visuelle, ainsi qu'une orthophoniste qui suit régulièrement le progrès de ces derniers.

-Présentation du robot NAO et discussion autour de ces différentes possibilités techniques.

-Débat autour de la faisabilité du projet et de l'influence d'un robot tel que NAO dans le processus d'épanouissement et d'éveil d'enfants atteints d'autisme.

- Discussion autour des différentes possibilités de séquences de jeux entre le robot et les enfants qui favoriseraient le développement dudit processus. Prise en compte des différences entre enfants et adultes (salle Esperenza et salle Argos)

-Dialogue autour de la technologie à utiliser pour que le NAO puisse reconnaitre chaque enfant en sa présence. Utilisation de la technologie RFID par exemple, notamment sous forme de patch à coller sur des vêtements.

-Choix d'une première séquence de jeu avec le robot qui permettrait une approche initiale avec les enfants.

-Visite des locaux et des salle de jeux


Semaine 6 : 20/10 - 26/10

Suite à la rencontre au sein de l'IME la pépinière, nous avons commencé un brainstorming autour des technologies à utiliser pour la réalisation de séquences de jeux avec le NAO et les enfants. Etant donnée le manque de fiabilité de la reconnaissance faciale ou vocale du NAO, il nous a fallu trouver une solution pour pallier à ce problème afin que le robot puisse reconnaitre et interagir avec les enfants présents lors des séances. Des lors, plusieurs solutions nous ont parues réalisables:

-Utilisation de puces BLE (Bluetooth Low Energy)

-Utilisation de la technologie RFID (Radio Frequency IDentification)

-


Nous avons également demandé l'accès au NAO afin que l'on puisse débuter la programmation de la première séquence.


Semaine 7 : 27/10 - 02/11

Vacances de la Toussaint.


Semaine 8 : 03/11 - 09/11

Discussion via emails avec GAPAS pour définir la technologie à utiliser lors des séquences de jeux. Ici, plusieurs paramètres ont été pris en compte, notamment le prix des composants, leur fiabilité et l'implémentation de la technologie en question.

Robot NAO toujours indisponible pour le début de la programmation.

Semaine 9 : 10/11 - 16/11

Récupération du robot NAO et prise en main du logiciel de programmation associé "choregraphe". Test des différents modes de connexion du robot afin de choisir le plus adapté aux futurs exercices.


Semaine 10: 17/11 - 23/11

Développement de la première séquence sur "choregraphe" qui permettra une première approche entre les enfants et le NAO. Naoprojet.png


Semaine 11: 24/11 - 30/11

Finalisation de la séquence, vérification et test.

Cette séquence sera réalisée de la façon suivante:

-NAO se lève puis, fait quelques pas et se présente en disant "Bonjour je suis NAO et je suis un robot, et toi, comment t'appelles tu ?"

-Un enfant arrive et lui répond. Lorsque c'est chose faite, un éducateur appuie sur la tête du NAO.

-NAO répond alors "Appuie sur ma main" en tendant la main droite.

-NAO attend un contact avec sa main droite puis répond "c'est bien".

-A ce stade, l'éducateur à deux possibilités: appuyer sur la tête du NAO pour que celui ci demande à un second enfant de se présenter puis d'appuyer sur sa main droite, ou appuyer sur sa main gauche afin que le robot exécute une danse et dise au revoir aux enfants.

Séquence réalisée afin de favoriser un premier contact visuel, tactile et auditif avec les enfants.

Prise de rendez vous avec les représentants de GAPAS afin d'effectuer un premier test avec les enfants.

Semaine 12: 01/12 - 07/12

Amélioration du programme précédent, notamment en ajoutant un bruitage encourageant lorsque l'enfant réussi a appuyer sur la main du robot, et en ajoutant une musique d'introduction lorsque le robot se lève et fait quelques pas.

Ajout de quelques mouvements afin d'accompagner les paroles de NAO.

Confirmation du rendez vous à l'IME pour la semaine suivante.

Semaine 12: 08/12 - 14/12

expérience avec les enfants

Mois de Janvier

Après avoir fait plusieurs exercices avec les enfants en touchant divers stimulis, nous avons donc pris la décision d'axer des exercices que sur l'audition et de mettre au point un remote controlable par un éducateur

Nous avons donc créé des fonctions de base de mouvements en langage c# afin de mettre une application intuitive sous Windows. Utilisation du langage C#

Mois de Février

Essais avec les enfants des exercices supplémentaires en améliorant l'expérience du coté utilisateurs et du coté cible Au final nous touchons deux sens principaux : la vue et l'ouïe. Malgré le fait qu'ils soit partiellement aveugles ou totalement, les enfants ressentes le robot et reste très enthousiastes quant aux exercices avec lui Avec les éducateurs, nous avons pu travailler sur un conte, sur de la musique et sur des bruits quotidien et d'animaux. Chaque exercices ayant pour but de calmer les enfants et de les faire prêter attention aux robots. Avec un groupe test de 5-6 enfants, nous avons pu observer des enfants réagir très rapidement et pour tous les exercices. Certains d'entre eux ont quant à eux réagis qu'a une musique très douce et d'autres (les plus voyants d'entre eux ) lorsque le NAO exécute une cascade

A la fin des divers tests, nous avons : Pour tout lier, nous avons programmé une télécommande sous Windows 7 et supérieur exportable sur une tablette (Andoid ou Apple) via le Wifi. Cette télécommande est complètement indépendante de chorégraph (logiciel spécifique du NAO ) et donc ne nécessite aucune licence supplémentaire.

Via cette télécommande il sera donc possible de diriger le robot Manuellement ( Avant arrière, a droite à gauche), de le faire changer de position (urgence debout , assis) mais aussi d'envoyer des message que le robot pourra dire.

A partir de cette télécommande il sera aussi possible d'enclencher les exercices cités plus haut. Nous avons fourni une documentation technique plus détaillée pour l'utilisation de cette télécommande

Le livrable est donc le suivant : Un exécutable de la télécommande, une documentation technique de cette télécommande, un récapitulatif des exercices (avec instructions de démarrage) et les codes sources des exercices.

Fonctions Remote du NAO

Fonction StandUp "Robot se lève peu importe sa position de base"

"using System; using System.Collections.Generic; using System.Linq; using System.Text; using Aldebaran.Proxies;

namespace StandUp {

   class StandUpExecuter
   {
       MotionProxy motionProxy;
       RobotPoseProxy robotPoseProxy;
       public StandUpExecuter(MotionProxy motionProxy, RobotPoseProxy robotPoseProxy)
       {
           this.motionProxy = motionProxy;
           this.robotPoseProxy = robotPoseProxy;
       }
       public bool Start()
       {
           NAOPositions curPosition = GetPosition();
           if (curPosition == null || curPosition == NAOPositions.Unknown || curPosition == NAOPositions.HeadBack)
           {
               return false;
           }
           motionProxy.stiffnessInterpolation("Body", 1, 1);
           while (curPosition != NAOPositions.Stand)
           {
               switch (curPosition)
               {
                   case NAOPositions.Sit:
                       ChangePositionFromSitToCrouch();
                       ChangePositionFromCrouchToStand();
                       break;
                   case NAOPositions.Crouch:
                       ChangePositionFromCrouchToStand();
                       break;
                   case NAOPositions.Belly:
                   case NAOPositions.Frog:
                   case NAOPositions.Knee:
                       ChangePositionFromBellyToStand();
                       break;
                   case NAOPositions.Back:
                       ChangePositionFromBackToStand();
                       break;
                   case NAOPositions.Right:
                   case NAOPositions.Left:
                       ChangePositionFromSideToBelly();
                       break;
                   case NAOPositions.HeadBack:
                       break;
                   case NAOPositions.Unknown:
                       return false;
                   default:
                       return false;
               }
               curPosition = GetPosition();
           }
           return true;
       }

Chaque fonction est relié à des commandes direct du moteur et non des behaviors du NAO. En conséquence, ces commandes sont prioritaires et plus rapides.


exemple : names.Add("HeadYaw");

           times.Add(new[] { 1.30000f, 2.40000f, 3.40000f, 4.30000f, 5.20000f, 5.90000f, 6.60000f, 7.20000f });
           keys.Add(new[] { -0.31605f, -0.44030f, -0.63358f, -0.62745f, -0.40962f, -0.18412f, -0.00004f, -0.02152f });

Fonction SitDown " Le robot s'asseoit peu importe sa position de base"

using System; using System.Collections.Generic; using System.Linq; using System.Text; using Aldebaran.Proxies;

namespace StandUp {

   class SitDownExecuter
   {
       MotionProxy motionProxy;
       RobotPoseProxy robotPoseProxy;
       public SitDownExecuter(MotionProxy motionProxy, RobotPoseProxy robotPoseProxy)
       {
           this.motionProxy = motionProxy;
           this.robotPoseProxy = robotPoseProxy;
       }
    public bool Start()
       {
           NAOPositions curPosition = GetPosition();
           if (curPosition == NAOPositions.Unknown || curPosition == NAOPositions.HeadBack)
           {
               return false;
           }
           motionProxy.stiffnessInterpolation(NAOBodyParts.Body.ToString(), 1, 1);
           while (curPosition != NAOPositions.Sit)
           {
               switch (curPosition)
               {
                   case NAOPositions.Belly:
                   case NAOPositions.Frog:
                   case NAOPositions.Knee:
                       ChangePositionFromBellyToCrouch();
                       break;
                   case NAOPositions.Back:
                       ChangePositionFromBackToSitDown();
                       break;
                   case NAOPositions.Right:
                   case NAOPositions.Left:
                       ChangePositionFromSideToBelly();
                       break;
                   case NAOPositions.Stand:
                   case NAOPositions.Crouch:
                       ChangePositionFromCrouchToSitDown();
                       break;
                   case NAOPositions.HeadBack:
                       return false;
                       break;
                   case NAOPositions.Unknown:
                       return false;
                   default:
                       return false;
               }
               curPosition = GetPosition();
           }
           
           return true;
       }

Chaque fonction est relié à des commandes direct du moteur et non des behaviors du NAO. En conséquence, ces commandes sont prioritaires et plus rapides.


exemple : names.Add("HeadYaw");

           times.Add(new[] { 1.30000f, 2.40000f, 3.40000f, 4.30000f, 5.20000f, 5.90000f, 6.60000f, 7.20000f });
           keys.Add(new[] { -0.31605f, -0.44030f, -0.63358f, -0.62745f, -0.40962f, -0.18412f, -0.00004f, -0.02152f });

Exploitation des behaviors

private void anibutt_Click(object sender, EventArgs e)
       {
           beh3 = new BehaviorManagerProxy(NAOIptxt.Text, NAOQI_DEFAULT_PORT);
           beh3.runBehavior("animaux");
       }


Au final nous avons - la présentation du NAO aux enfants - le conte des 3 petits cochons - la reconnaissance des animaux - la reconnaissance des bruits quotidiens - la reconnaissance des musique En ce qui concerne les " à coté" nous avons donc la Dance Thaï chi, La Macarena , la Dance Vengelis

Base de données des prénoms et formules

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
       {
         
       }
       private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
       {
       }
       private void buttonformula_Click(object sender, EventArgs e)
       {
           name = new TextToSpeechProxy(NAOIptxt.Text, NAOQI_DEFAULT_PORT);
           formula = new TextToSpeechProxy(NAOIptxt.Text, NAOQI_DEFAULT_PORT);
           name.say(comboBox1.Text);
           formula.say(comboBox2.Text);
       }
       private void refresh_Click(object sender, EventArgs e)
       {
           comboBox1.Items.Clear();
           comboBox2.Items.Clear();
           string[] lineOfContents =File.ReadAllLines("bddname.txt");
           foreach (var line in lineOfContents)
           {
               string[] tokens = line.Split(';');
               comboBox1.Items.Add(tokens[0]);
           }
           string[] lineOfContents2 = File.ReadAllLines("formula.txt");
           foreach (var line2 in lineOfContents2)
           {
               string[] toke = line2.Split(';');
               comboBox2.Items.Add(toke[0]);
           }
       }

Remote finale

Remote.png

Première étape : Entrer le nom du NAO dans la case NAO IP. Il y’a connexion dès que la case se grise. Seconde étape : Rafraîchir la Base de Données des noms et des formules Pour rappel, dans le dossier source, il y’a deux fichier texte (name.txt ; formula.txt). Le nom des fichiers n’est surtout pas à changer. Vous pouvez par contre les éditer afin d’enlever ou rajouter des noms et des formules à raison d’un groupement par ligne du fichier et de finir par le caractère « ; » Troisième étape : Utilisation de la télécommande en appuyant sur le bouton voulu Dans les commandes manuelles, une pression sur un des boutons va entrainer son action. Pendant cette action il n’est pas possible de faire autre chose (blocage de l’interface jusqu’au terme). Les deux boutons « Assis » et « Debout » sont des boutons d’urgence. La pression sur l’un des deux boutons entrainera l’action écrite et ceux dans n’importe qu’elle position de départ du robot. De plus, l’action se fera tant que le robot n’atteindra pas la position souhaitée. Dans les commandes automatiques, une pression entrainera le commencement de l’exercice choisi. A savoir qu’il sera impossible de l’arrêter. Pour la première zone de texte en haut à droite de l’interface, il suffit de rentrer le texte et d’appuyer sur « Envoyer message » pour que le robot dise le texte Pour rappel, il faut écrire en phonétique (exemple : Français <==>Franssais ; envoyer <==>envoyé) Dans la section en bas à gauche de l’interface, les deux zones blanches sont des listes de défilement ou sera noté les prénoms (à gauche) et des formules (celle de droite) . Une fois choisi la paire, une pression sur « Envoie » et le Nao dira le texte Les deux boutons « Réussite » et « Echec » envoie respectivement la musique de réussite de l’exercice et un message «  courage, essaie encore une fois ».