Wiki » History » Version 43

Version 43/77 - Next » - Current version
Thibault BUFFIERE, 04/26/2020 04:02 PM


Projet Polytech :

Pepper facteur

Introduction

Nous sommes un groupe de quatre étudiants en PeiP 2A (2ème année de cycle préparatoire de Polytech) et nous devons, dans le cadre de nos études, effectuer un projet dans un domaine de l’ingénierie. Notre choix s’est porté sur le robot Pepper et plus précisément, sur sa mission de récupération d’un colis de manière entièrement automatisée. Etant donné que plusieurs membres du groupe souhaitent poursuivre dans une spécialité en robotique ou microélectronique, ce projet nous a permit d’avoir une première approche de la programmation dans le domaine de la robotique.

Remerciements

Avant tout développement sur cette expérience, nous tenons à commencer ce rapport par des remerciements. Nous souhaitons tout d’abord remercier l’école Polytech pour nous avoir permis de travailler sur ce projet mais aussi sur un tel robot qu’est PEPPER. Mais aussi, nous remercions particulièrement M.Laffont et M. Lengagne. D’une part pour avoir tout deux fait preuve de grande patience et de beaucoup de pédagogie. D’autres part, pour leur investissement dans le rôle de client et tuteur ainsi que pour l’aide apportée durant ces trois semestres en nous donnant toutes les clefs nécessaires à la réussite du projet.

I - Présentation du projet

1.1. Présentation du robot Peppers

Pepper est un robot humanoïde développé par la société Softbank Robotics. Celui-ci a la particularité de pouvoir reconnaître certaines émotions de son interlocuteur et également de pouvoir communiquer avec lui dans plusieurs langues. Il possède également une tablette intégrée au niveau de son torse afin d’interagir avec les humains. Le robot a également un comportement se rapprochant de celui des humains : ses mouvements de la tête, des bras et du corps similaires à celui d’un humain (en mode «autonomous life»), sa proactivité mais également sa sympathie ou encore son expressivité en font un robot fait pour avoir des interactions avec des humains. Pour finir, son design rond et épuré ainsi que sa ressemblance à l’homme lui permettent d’avoir plus facilement de liens et d’empathie avec les humains.

Détails techniques :
Pepper est un robot assez imposant puisqu’il mesure 120cm de hauteur, 48,5cm de largeur et 42,5cm de profondeur pour un poids total de 28 kg.
Sa base est composée de 3 roues omnidirectionnelles pour se déplacer et il peut atteindre une vitesse maximum de 5km/h.
Etant donné que ce n’est pas un robot industriel, Pepper n’a pas été construit avec comme fonctionnalité de porter des objets. Il peut supporter, à bout de bras, une charge maximale de 500g.
Il possède une batterie au lithium qui lui offre une autonomie de 12h environ.
Pour éviter au robot de perdre l’équilibre, il possède une centrale d’inertie (en cas de bousculade par exemple).
Le robot est composé de 2 types de capteurs différents : les capteurs d’interactions et les capteurs de mouvement

Capteurs d’interactions :

- 4 microphones (reconnaissance vocale)
- 2 caméras RGB HD (1 sur la bouche et 1 sur le front pour la reconnaissance faciale)
- 5 capteurs tactiles (3 au niveau de la tête et 1 dans chaque main)
- 1 écran tactile sur le torse

Capteurs de mouvement :

- 1 caméra 3D (derrière les yeux pour la détection d’obstacles en mouvement)
- 2 sonars (jambes)
- 6 lasers (jambes pour la détection d’obstacles immobiles)
- 1 capteur gyroscopique

1.2. Présentation du trajet

Le projet Pepper facteur consiste à récupérer de manière complètement automatisée le courrier ou un colis se trouvant à l’accueil du bâtiment. Son point de départ est la salle robotique au deuxième étage du bâtiment Génie Electrique (D207) est son point d’arrivée est également cette salle avec le colis. Pepper va donc interagir seulement à l’intérieur du bâtiment Polytech.
Le projet se découpe de manière chronologique en une succession de plusieurs étapes. Tout d’abord, le robot doit sortir de la salle, traverser le couloir et se positionner devant l’ascenseur. Ensuite, il doit appuyer sur le bouton pour appeler l’ascenseur et entrer dedans. Il devra pouvoir sortir de l’ascenseur lorsqu’il est arrivé au rez-de-chaussée et traverser le hall d’accueil de Polytech pour arriver jusqu’à l’accueil où il récupère le colis.
Pour la récupération du colis, nous avions pensé à une interaction avec la personne à l’accueil via la tablette intégrée à Pepper ou alors par un contact au niveau de la tête par exemple.
Pour le chemin retour, les déplacements et les mouvements des bras sont similaires mais avec des paramétrages différents (distances, hauteur des bras pour le bouton …)

1.3. Les langages de programmation

Le robot Pepper peut se programmer grâce à trois langages de programmation : Chorégraphe, SDK et ROS.

  • D'une part,Chorégraphe est le logiciel de programmation conseillé par Softbank Robotics car c’est le plus simple à prendre en main et maîtriser. Le principe du logiciel est de réaliser un programme à l’aide de “boîtes” préprogrammées. Ces boîtes ont des spécificités et des paramétrages différents selon leur fonction et possèdent toutes une ou plusieurs entrée(s) et sortie(s). On peut relier les sorties et les entrées entre plusieurs boîtes pour créer une suite d’actions à faire. On peut les relier “en série” afin d’avoir une boucle ouverte ou bien en faisant un cycle (c’est-à-dire que la sortie d’une boîte retourne dans l’entrée boîte précédente) afin d’avoir une boucle fermée. Nous développerons les fonctionnements détaillés et les utilités des boucles dans la partie suivante.
    Les boîtes préprogrammées se trouvent dans des bibliothèques (“libraries”) qui sont dès le départ dans le logiciel. On peut également trouver des informations sur ces bibliothèques sur le site officiel du développeur du robot (Softbank Robotics)
    Voici ci-joint le lien du site : http://doc.aldebaran.com/2-4/naoqi/index.html
    Les bibliothèques sont divisées selon des familles d’actions ( ex : Core, Interaction Engine, Motion …) et des sous-familles (ex : AL Behavior Manager, AL ConnectionManager …). On peut même trouver des “sous-sous-familles” lorsque ce sont des actions basiques nécessaires dans la plupart des cas comme par exemple dans la sous-famille permettant de faire des mouvements (Motion > ALMotion). C’est ici que l’on trouve la liste des “boîtes” aussi appelées de manière plus technique API (Application Programming Interface). Si l’on choisit une API, on peut y voir les programmes internes en Python et C++ et les paramètres du robot (entrée(s) et sortie(s)). Ce site nous permet d’avoir des informations techniques sur les boîtes du robot et ses paramètres mais reste assez incomplet à notre niveau car il n’y a aucun exemple d’application concrète de la fonction pour le robot.
  • D'un autre côté, SDK (Software Development Kit) est l’ensemble des outils que Softbank Robotics a créé pour permettre aux développeurs et programmeurs de créer et d’améliorer des fonctions du robot. Il est possible de programmer sur trois langages : Python,C++ et Java mais ce sont surtout les deux premiers qui sont utilisés.
    Etant donné que nous avons seulement appris la programmation en Python lors de notre première année, nous avons seulement essayé Python SDK. Cependant, la prise en main est très difficile et nous n’avions pas assez de connaissances de manière générale donc nous avons rapidement abandonné le développement du projet par cette voie. De plus, nous n’avons pas réussi à trouver d’informations, de documentations ou d’aide sur Internet ce qui a confirmé notre décision.
  • Enfin, ROS (Robot Operating System) est un ensemble d’outils permettant le développement des logiciels de robotique. Etant donné que ROS a été spécialement conçu pour la robotique, il permet beaucoup de possibilités car il est plus précis que Chorégraphe, que ce soit pour la réception des informations via les différents capteurs du robot mais aussi pour les mouvements que doit faire le robot.
    Nous pensons que ROS est l’outil le plus approprié pour ce type de projet car il est le plus complet. Cependant, nous ne sommes pas en études de robotique et le logiciel demandait trop de connaissances techniques pour pouvoir le maîtriser. De plus, nos emplois du temps ne concordait pas avec les cours de ROS que donnait M. Lengagne donc il était impossible de faire le projet avec cet outil de programmation
    Nous n’avons donc pas essayé de faire faire des actions au robot avec ROS et avons également rapidement éliminé la possibilité d’accomplir le projet avec ce logiciel.

II - Les différentes étapes du projet

Pour mener à bien le projet, nous avons décidé de le découper en fonction de types de tâches, en terme de programmation, à effectuer.
Nous avons quatre domaines de tâches principales : les boucles ouvertes, les boucles fermées, la création de mouvements et les interactions.

2.1. La Boucle ouverte

La boucle ouverte correspond à un ensemble d’instruction que l’utilisateur donne au robot par l’intermédiaire de Chorégraphe. Le robot effectue donc la suite d’ordre donnée sans prendre en compte les données de l’environnement. Les boîtes déjà préexistante sur Chorégraphe sont par exemple : Move to, Look at ou Say. Mais, le robot possède une fonction intégrée de sécurité afin d’éviter toutes les collisions possibles. Ce sécurité permet d’assurer en partie la sécurité du robot. En effet, grâce à ses différents capteurs présents au niveau de ses jambes, il peut détecter lorsqu’il s’approche trop prêt d’un obstacle comme une table, un mur ou encore une personne. Cependant, ces capteurs ne permettent pas de détecter le vide, le robot ne pourrait donc pas s'arrêter s’il se dirigeait vers un escalier. C’est pour cela qu’il faut toujours être très vigilant. Par ailleurs, cette sécuritée pouvait parfois nous restreindre au niveau de certaines actions notamment dans les déplacements en milieu assez étroits.

Dans notre projet, ceci a eu lieu lorsque nous voulions faire sortir le robot de la salle de départ : les tables étaient trop rapprochés et le robot n’est pas assez précis au niveau de ses déplacements alors parfois, il s’arrêtait avant d’avoir atteint sa destination prévue.Il est vrai que le robot n’est pas extrêmement précis au niveau de ses mouvements et de ses déplacement.

On peut donc en conclure que par hypothèses, utiliser des boucles ouvertes serait la meilleure option puisque l’on aurait juste à donner une suite d’actions au robot en ajustants les paramètres des boîtes. Mais cela marcherais dans le cas où le robot adopterais des trajectoires absolument parfaite. Or ce n’est pas le cas, et un décalage de quelques centimètres au début du trajet donnerait un écart de plusieurs mètres à la fin. Les boucles ouvertes ne sont donc pas envisageable sur des longs trajet comme il est question dans notre projet. En revanche, on peut les utiliser pour faire des petites parties du projet.

2.2. La Boucle fermée

Contrairement à une boucle ouverte, la boucle fermée ne fait pas qu'obéir aux ordres données par l’ordinateur mais s’auto ajuste en fonction du décors et des évènements extérieurs. En effet, le robot, à l’aide de ses capteurs, va effectuer des mesures sous différents angles afin d’ajuster sa trajectoire. Par exemple, si l’on souhaite que le robot se déplace toujours au centre d’un couloir d’environs 2m de large, nous utiliserons des capteurs latéraux afin de mesurer la distance au murs de chaque côtés du robot et ainsi ajuster la trajectoire pour qu’il se trouve à 1m du mur à droite et 1m du mur à gauche.
Nous avons utiliser des boucles fermés dans notre projet pour passer une porte et se déplacer dans un milieu restreint. Cependant nous n’avons pas créé de boucle fermée à proprement parlé.
Pour passer une porte :
Nous avons utiliser la sécurité du robot. En effet si vous vous trouvez à 50cm du mur et que vous lui dites de faire 1 m dans la direction du mur, le robot effectuera une courte distance avant de s'arrêter et de renvoyer une erreur par sécurité.
Nous avons donc jouer avec cette sécurité en forçant le robot a faire 1m, tant qu’il n’arrivait pas à faire ce mètre, et si il renvoyait une erreur alors il recule de 10 cm, tourne de 15 rad et recommence l’opération. Ainsi le robot pouvait passer la porte sans encombre.
Pour se déplacer dans un couloir :
Sous Chorégraphe, nous avons utilisé la boite “Redball Tracker”. Cette boite prédéfinie consiste à placer des ronds rouges sur différents endroit afin que le robot les détecte et se déplace en boucle fermée jusqu'à ces marqueurs.
Afin que Pepper ait toujours un marqueur rouge dans son capteur visuel, nous avons améliorer la boite “ Redball tracker” pour que pepper “cherche” ce marqueur. Le robot va tourner la tête sur la gauche et sur la droite en cherchant le marqueur simultanément. Lorsqu’il l’aura détecter alors il se déplacera jusqu’à celui-ci.

2.3. Création de mouvement sous Chorégraphe.

Sous Chorégraphe il existe 4 manières de créer une boite suivant les nécessitées : Diagram, Timeline, Python et Dialog.
Dans notre projet nous ne nous sommes pas penchés sur la création de boite Dialog et avons très peu abordé la création en python. Peu importe la boite, la création de celles-ci se font de la même façon :

Python : écriture de code
La création de boite en python est comme indiquée dans le nom : rédigée en python. Cependant cette manière de créer des boites est très technique c’est pour cela que nous ne l’avons pas utilisée.

Diagram : à partir de boite existante
Le principe de cette méthode est d’utiliser plusieurs boîtes pour en créer une autre. On va assembler plusieurs boîtes déjà existantes dans le logiciel Choregraphe pour former créer un seul mouvement à partir de ces boîtes.
Cette boîte peut être créée en boucle ouverte comme en boucle fermée. Cela permet notamment de gagner du temps lorsqu’on a un nombre important d’actions similaires à faire. On peut alors directement réutiliser cette boîte déjà existante.

Timeline : Création de mouvement sur machine virtuelle ou animation mode :
Ce mode permet de créer une boite permettant d’effectuer un mouvement pour une durée déterminée. Il est possible de le faire de 2 façons différentes, soit en passant par une machine virtuelle disponible sur le logiciel Choregraphe ou en utilisant directement le robot si on en a l’accès.

  • Machine virtuelle :

L’avantage de travailler sur une machine virtuelle est de pouvoir travailler avec un robot fictif directement sur l’ordinateur si l’on a pas accès au robot.

Comment accéder à ce mode ?
- Ouvrir Chorégraphe
- Se connecter au robot (Qi le robot est NAO et pas Pepper, vous pouvez choisir le bon robot dans Edition → préférences → robot virtuel → modèle robot : pepper).
- clic droit → créer une nouvelle boite → timeline → « insérer un nom et valider »
- double clic sur la nouvelle boite → sélectionner le temps souhaité sur la timeline → cliquer sur la partie que l’on veut bouger sur le robot virtuel → répétez l’action autant de fois que nécessaire en fonction du mouvement voulu.

Contrainte : On a besoin de connaître toutes les mesures afin que le robot puisse atteindre son objectif précisément.(exemple du bouton)
Avantage : Possibilité de faire bouger tous les membres.

  • Animation mode :

Dans ce cas, le prérequis est d’avoir accès au robot et de pouvoir se connecter dessus afin de travailler avec.

Comment accéder à ce mode ?
- Ouvrir Chorégraphe
- Se connecter à → Pepper (il se peut que l’adresse IP soit erronée, dans ce cas là, il faut appuyer sur le bouton en dessous de la tablette de Pepper pour qu’il donne son adresse IP et entrez la bonne IP dans “Use fixed IP /hostname”).
- Clic droit → create new box → timeline → « insérer un nom et valider »
- Double clic sur la nouvelle boîte → sélectionner le temps souhaité sur la timeline.
- Cliquer sur le logo « Animation mode » → les yeux du robot deviennent rouge puis passeront au vert quand le capteur sera recouvert et que le mouvement pourra être enregistré.
- Le principe ici est que, lorsqu'un capteur du robot sera recouvert, les moteurs de cette partie de son corps vont se désactiver et vous pourrez lui faire effectuer un mouvement manuellement.
- Pour enregistrer le mouvement: clique droit sur la timeline, puis cliquez « store joins in keyframe » et cliquer sur « whole body ».
- Répétez l’action autant de fois que nécessaire en fonction du mouvement voulu.

Contrainte : Impossible de faire bouger le bassin car il n’y a pas de capteurs connu.
Avantage : Pas besoin de connaître toutes les mesures, c’est à vous de faire bouger et de placer le robot afin de créer le mouvement pour un cas précis.

Par exemple, on peut utiliser timeline pour lui faire bouger le bras gauche.
VIDÉO ICI

III - Les difficultés rencontrés et leurs possible solutions

3.1. Difficulté au niveau de la programmation

Nous avons rencontré plusieurs difficultés lors de notre projet.
Tout d’abord, étant donné que nous étions dans des classes différentes cette année et que notre projet se faisait lors de notre temps libre en dehors des cours, il était difficile de trouver des plages horaires qui puissent correspondre à tout le monde.

Au niveau technique, la batterie du robot était parfois déchargée à notre arrivée alors que l’on faisait bien attention à toujours le mettre en charge à notre départ. Nous devions donc le mettre en recharge ce qui nous faisait perdre du temps lors de nos séances.
Ensuite, le robot a été changé de salle au cours de notre projet ce qui nous a obligé à changer nos mesures pour le faire sortir de la salle et à modifier des paramètres pour les distances notamment. De plus, nous nous sommes donc retrouvés sur un autre ordinateur qui ne possédait pas de session PEIP pour se connecter mais aussi Chorégraphe n’était pas installé. Il a fallu l’installer mais le logiciel ne marchait pas correctement car il n’avait pas la bonne configuration.

Enfin, à l’intérieur du logiciel Chorégraphe, nous avons mis du temps pour enlever la protection interne du robot anti-collision. Nous avions besoin d’enlever cette sécurité car celle-ci nous empêchait de réaliser l’étape “appuyer sur un bouton”. En effet, le bouton d’ascenseur assez haut si on considère la taille du robot, il fallait que le robot s’avance très proche du mur pour pouvoir atteindre avec son bras le bouton ce qui, était impossible avec la sécurité. On a alors utiliser la boîte Set External Anti-Collision qui permettait de désactiver les sécurités sur différentes parties du robot. Nous avons également due ajouter des APIs “wait” dans certaines situations ou l’on utilisait les sortie “erreur” de certaines boîtes car sans cela, l’erreur parcourait toutes les boîtes suivante sans les exécuter.

3.2. Les difficulté hors programmation

Au niveau du robot, ses mains et notamment ses doigts ne sont pas suffisamment articulés et n’ont pas assez de puissance ni de résistance pour pouvoir être utilisés comme nous le souhaitions au départ. En effet, nous pensions pouvoir appuyer sur le bouton de l’ascenseur à l’aller et au retour pour appeler l’ascenseur et choisir l’étage auquel nous voulons aller. Nous avons dû nous adapter et nous avions pensé à créer un système composé d’une tige ainsi que d’un ressort(voir schéma ci-dessous) qui serait fixer sur le bras de façon à ce que le la force de poussé ne soit pas exercée sur les doigts(fragile) du robot et donc pouvoir appuyer sur des boutons sans risques.

Une autre contrainte cependant est le temps d’ouverture de l’ascenseur, il reste ouvert seulement 5 secondes ce qui est un temps trop court pour le robot car celui-ci met beaucoup de temps à rentrer dans un espace et encore plus un espace restreint comme l’intérieur de l’ascenseur.
De plus, il aurait été compliqué pour le robot de se placer correctement à l’intérieur de l’ascenseur pour pouvoir appuyer sur les boutons du rez-de-chaussée ou de l’étage. Malgré le grand nombre de capteurs que contient le robot, ceux-ci ne sont pas assez précis pour pouvoir le déplacer en un point donné à coup sûr en boucle ouverte. C’est la principale raison pour laquelle nous avons décidé de faire le déplacement dans le couloir en boucle fermée.

Conclusion

Au niveau de l’état d’avancement du projet, nous avons réussi à créer un programme pour faire sortir le robot de la salle de départ lorsque le robot était au premier étage. Nous avons également un programme qui marche pour “Redball Tracker” donc le robot peut se déplacer en boucle fermée vers un ou plusieurs points rouges. Nous avons pu essayé le programme à l’intérieur de la salle de départ et celui-ci fonctionnait correctement donc il devrait également marcher pour le déplacement du robot dans le couloir en boucle fermée.
Pour concrétiser ce projet, il resterait donc à assembler tous les éléments et les paramétrer afin d’en faire un programme complet. Pour que celui ci se déroule au mieux il faudrait trouver une solution concrète pour appuyer sur un bouton et être sûr que le robot peut entrer dans l’ascenseur dans le temps imparti.
On espère que le fruit de notre travail vous permettra de vous aider à arriver au bout de ce projet.

test_photo.PNG (74.3 KB) Thibault BUFFIERE, 04/26/2020 04:09 PM

test foto.PNG (74.3 KB) Thibault BUFFIERE, 04/27/2020 10:44 AM

photo 2.PNG (208 KB) Thibault BUFFIERE, 04/27/2020 10:51 AM

photo 1.png (355 KB) Thibault BUFFIERE, 04/27/2020 10:51 AM

photo 3.PNG (237 KB) Thibault BUFFIERE, 04/27/2020 10:51 AM

photo 4.PNG (231 KB) Thibault BUFFIERE, 04/27/2020 10:51 AM

photo 5.PNG (11.9 KB) Thibault BUFFIERE, 04/27/2020 10:51 AM

photo 6.PNG (11.1 KB) Thibault BUFFIERE, 04/27/2020 10:51 AM

photo 7.PNG (31.3 KB) Thibault BUFFIERE, 04/27/2020 10:51 AM

photo 8.PNG (42.7 KB) Thibault BUFFIERE, 04/27/2020 10:51 AM

photo 9.PNG (70.3 KB) Thibault BUFFIERE, 04/27/2020 10:51 AM

photo 10.PNG (74.3 KB) Thibault BUFFIERE, 04/27/2020 10:51 AM

photo_2r.png (151 KB) Jacques LAFFONT, 05/04/2020 11:37 AM