Robair social

De fablab
Aller à : navigation, rechercher

Informations générales

Encadrants: Jérôme Maisonnasse, FabMSTIC

Contexte

L'interaction avec les robots fait déjà partie du quotidien des personnes. Alors, la façon dont ces interactions se passent est ce qui va amener une personne a la continuer ou l’arrêter, donc c'est un facteur que exige une attention spéciale lors du développement d'un robot sociable. Il y a plusieurs niveaux d'interactions selon l'application du robot: il est possible de ne pas avoir d'interaction, d'avoir des interactions limitées, et aussi de que le robot interagisse comme un humain.

Dans ces niveaux, il y a des facteurs importantes que définissent comment l'interaction va se passer:

  • L'intelligence du robot
  • L'apparence du robot
  • La similitude du robot avec un humain
  • La naturalité des mouvements du robot

Alors, le domaine de l'interaction humain-machine travaille dans l'analyse de comment ces facteurs doivent être implémentées dans un robot pour que le contact avec un humain se passe de la façon la plus natural possible. Le grand défi du domaine est que ces interactions sont fortement dependents de l'impression et les attentes que l'humain a de la machine, donc il a une relation étroite avec le domaine de la psychologie.

Sujet

Le projet a été un étude de cas de HRI (human-robot interaction) pour Robair. Nous avons pris des Robairs avec des différences matériels et nous les avons analysé de manière à définir l'application d'un robot avec le matériel donnée dans un contexte social, suivi du niveau d'interaction souhaité dans cette application.

Nous avons arrivé a des conclusions interessantes sur le sujet, parmi lesquels nous avons choisi de travailler avec un Robair destiné à l'aide des personnes avec des limitations, comme les personnes agés.

Cette application a été choisie basée dans une recherche faite pour un groupe partenaire avec des étudiants de l'IDL et de l'ENSE3, avec le thème de la robotique sociale. Nous avons pu connaître ces experiments avec une version du Robair téléopéré qui évaluait exactement le comportement des personnes en face à un robot qui pouvait être la chaîne de communication avec une autre personne. De plus, nous avons pu avoir une idée de comment le robot passerait du mode téléopéré au mode d'opération autonome.

En regardant ces recherches nous avons conclu que il y a un certain intérêt de la partie des personnes en avoir Robair dans leur environnement, il ne les dérange pas, par contre, il n'est pas assez grand pour faire qu'ils interagissent avec lui plutôt qu'avec des autres personnes. Donc, nous avons eu l'idée d'utiliser les capacités du robot et son acceptation par les personnes pour lui donner l'activité concrète de ne plus être seulement un robot social, mais un robot assistant.

Alors, l'idée du robot assistant est qu'il puisse regarder son environnement et voir des objets que puissent être utiles pour la personne dont il aide, et selon l'objet et les demandes de cette personne, prendre une décision. Nous pouvons, par exemple, avoir un robot qui peut guider une personne agée jusqu'à une table, ou une chaise.

Concrètement, l'idée est d'implementer la vision par ordinateur avec l'apprentissage machine pour réaliser ce type de tâche.

Solution implémentée

Logiciels utilisés

ROS (Robot Operating System) version Kinetic Le système d'exploitation optimisé pour les robots et utilisé sur Robair

lubuntu 16.04 Version de l'ubuntu 16.04 optimisé pour les ordinateurs avec des ressources matériels limités

OpenCV 3.3 Logiciel utilisé pour la vision par ordinateur

Installation des outils

L'installation des outils était une partie spécialement importante dans ce travail. Cela parce que nous voulions faire traitement d'image avec OpenCV, un logiciel lourd, dans une machine avec des ressources limités - potentiellement un Raspberry Pi. De plus, ROS est un système compatible seulement avec quelques version de Debian et Ubuntu, notamment ubuntu 16.04, donc nous avons choisi un système d'exploitation avec les mêmes ressources d'ubuntu mais que puisse s’exécuter dans une machine limité (nous remarquons que nous imaginons que Ubuntu Mate marcherait bien aussi, et en plus il est optimisé pour les Raspberry Pi).

Alors, nous avons utilisé lubuntu sur une clé USB de 32 GB, ce qui limitait bien nos ressources disponibles, notamment l'espace de stockage. Pour faire l'installation de ROS, nous avons suivi son propre guide et pour installer OpenCV (la partie la plus difficile parce qu'il faut beaucoup d'espace pour le compiler, c'est un'application vraiment lourde) ce guide, mais adapté à nos besoins.

Remarque: ROS a déjà une version de OpenCV 3 intégré. Nous avons installé OpenCV pour pouvoir l'utiliser hors ROS, mais nous croyons que celui de ROS devrait suffire.

Enfin, nous imaginons que tout ce que nous avons fait peut être porté à un Raspberry Pi sans beaucoup de problèmes.

Fonctionnement de la solution

L'application est relativement simple. Son fonctionnement consiste à utiliser un nœud qui a la fonction d'observer l’environnement, le nœud de la vision par ordinateur, et de publier des commandes cohérents avec le comportement souhaité du robot dans la situation dans laquelle il se rencontre.

Alors, un exemple serait que, lorsque le robot voit une table, le nœud de vision par ordinateur publie une commande sur les roues pour que le robot se déplace vers la table. Par contre, nous pouvons choisir l'objet que nous souhaitons (pour le moment via code), et le type de décision que le robot doit prendre selon ce qu'il peut faire - soit se déplacer, soit rester arrêté, soit envoyer l'information pour un autre nœud qui prendra la décision.

Communication par nœuds

Communication entre le noeud de vision et turtlesim

Plus spécifiquement, le nœud de la vision par ordinateur est un nœud de type Publisher que publie des messages dans un Topic choisi. Pour le moment, ce qu'il fait est de publier les propres commandes de vitesse - messages du type cmd_vel - mais dans une implémentation plus complexe, nous pourrions choisir d’envoyer des informations sur l’environnement pour qu'un autre nœud prend la décision.

De plus, une bonne façon de tester les nœuds crées sur ROS est d'utiliser turtlesim, le simulateur native de ROS. Nous l'avons beaucoup utilisé pour ce projet, et le nœud de vision publie de messages pour être prises par turtlesim.

Vision par ordinateur

Dans une première itération, nous avons utilisé les Haar Cascades du fait que son implémentation est simple et OpenCV possède déjà des modèles pré-entraînés pour plusieurs caractéristiques relevantes. Même si l'idée était d'abord de reconnaître des personnes, cette solution n’a pas satisfait nos besoins puisqu'il était nécessaire de faire passer l'image par plusieurs cascades (une pour détecter des personnes en face, une autre pour des personnes de profil, et ainsi de suite). De la même manière, une fois nous avons décidé de détecter la présence d’autres objets, nous nous avons rendu compte qu’il faut une cascade pour chaque objet additionnel. Faire passer une image pour telle quantité de cascades est une procédure coûteuse, qui a ralenti l'exécution du programme une fois mise en oeuvre.

Alors, pour pouvoir reconnaître des objets, nous utilisons le module de Deep Neural Networks de OpenCV avec un modèle préalablement entraîné pour reconnaître une série limitée d’objets (des personnes, des bouteilles, des tables, etc.) Après avoir chargé ce modèle, chaque frame pris de la caméra est extrait et prétraité avant de le faire passer par le réseau. Ce prétraitement de l’image donne comme résultat ce qu’on appelle un « blob », que c’est l’information de l’image dans le format que le réseau attend, et aussi traité pour normaliser les changements d’illumination et atteindre une meilleure détection.

Après avoir passé le blob au réseau, on aura un tableau avec les objets détectés, pourtant pour chaque détection il est nécessaire de confirmer si le niveau de confiance est assez satisfaisant (au-dessus d’un seuil établi), si oui, on peut confirmer que l’objet appartient à la classe détectée par le réseau. Tout ce processus est bien illustré avec du code dans ce guide.

Réflexions et travail à faire

Le projet a encore beaucoup de choses qui peuvent être implémentes, mais le but c'était d'abord de créer une base que puisse être utilisé. Quand même, les prochains pas à prendre dans le projet seraient d'implementer une interface utilisateur qui lui permet de spécifier au robot ce qu'il veut que le robot cherche, par exemple, d'améliorer la partie d’apprentissage machine. ou définir la communication entre le nœud de vision du robot avec des autres capteurs pour pouvoir mieux chercher des objets et prendre des décisions plus intelligentes.

Finalement, le projet a été intéressant dans le sens que nous avons pu voir la complexité du domaine de HRI. C'était spécialement intéressant de voir que nous pouvons créer des robots avec des différents niveaux d'interaction selon ce que nous voulons que le robot fasse, et en plus que cette interaction a une dependence très importante de la perception que les humains ont du robot.

Pour ceux qui veulent suivre avec ce projet ...

La principale difficulté dont nous avons rencontre sur ce projet était la configuration de l'environnement avec ROS et OpenCV en utilisant peu de ressources, pour qu'il soit portable à un Raspberry Pi, par exemple. Alors, le principal problème de faire cette configuration sont les versions des logiciels utilisées, qui doivent être compatible entre eux mais aussi fournir les ressources nécessaires au développement du projet. Donc, nous avons les conseils suivantes si vous voulez faire quelque chose de similaire:

  • Nous avons utilisé une clé USB pour notre OS, mais nous vous conseillons fortement d'utiliser un Raspberry Pi, il est beaucoup plus adéquat pour être intégré dans un robot.
  • Un bon système d'exploitation pour être utilisé avec le Raspberry Pi est Ubuntu Mate. La version 16.04 normalement est compatible avec ROS et ne doit pas vous posez des problèmes de compatibilité. De plus, il est un système optimisé pour le Pi.
  • C'est compliqué d'installer OpenCV 3 sur une machine avec peu d'espace de stockage car il faut le compilé. Alors, ce guide explique bien comment le faire, pourtant nous vous conseillons à utiliser la version qui est intégré dans ROS, qui ne vous posera pas de problèmes de compatibilité entre les deux logiciels - ce qui se passe dans leurs installations isolées.
  • Turtlesim est un simulateur intégré dans ROS. Il est un très bon moyen pour tester votre code sans avoir besoin d'un robot pour des fonctions basiques.

Par rapport à la vision par ordinateur:

  • La fonction blobFromImage de OpenCV, comme nous avons mentionné, réalise aussi un traitement à l’image pour adapter les niveaux de couleurs et la détection soit mieux. Ces valeurs sont complètement empiriques et pour cette raison la performance de l’algorithme peut varier selon les conditions d’illumination. De la même manière, le seuil de confiance que nous avons utilisé a été adapté à notre application, donc nous recommandons de donner attention à bien calibrer ces valeurs pour obtenir des résultats fiables.
  • Nous recommandons de chercher un modèle déjà entraîné pour l’objet souhaité, ou au cas échéant, entraîner un modèle original avec un dataset déjà validé, étant donné qu’il y a de chercheurs qui ont dédié une grosse partie du temps à créer des modèles fiables et ils les ont mis à disposition des autres, donc cela réduit les sources d’erreurs dans la détection d’objets.
  • Vu que l’objectif est d’aider les personnes à arriver à un objet une fois détecté, une politique de mouvement plus complexe doit être implémenté. En particulier, nous pensons qu’un bon point de départ est de diviser la scène en quadrants et bouger selon le quadrant dans lequel l’objet est situé.
  • Il faut tenir en compte que le code de la détection ne peut pas être tellement lourde, parce qu’il est situé entre la prise de deux frames consécutives, et augmenter le temps de calcul de la détection entraîne la perte d’information et de vitesse. Nous conseillons donc de ne pas faire de calculs coûteuses, et utiliser au maximum les structures de données et fonctions fournies par la librairie Numpy plutôt que ceux natives de Python.

Aussi, nous vous laissons le lien vers notre page github pour le projet. N'hésitez pas à utiliser nos codes comme base pour vos projet.