Wiki » History » Version 72

« Previous - Version 72/77 (diff) - Next » - Current version
Jacques LAFFONT, 05/04/2020 11:37 AM


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. Étant donné que plusieurs membres du groupe souhaitent poursuivre dans une spécialité en robotique ou microélectronique, ce projet nous a permis 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 tous deux faits preuves 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 à ceux 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 120 cm de hauteur, 48,5 cm de largeur et 42,5 cm 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 5 km/h.
Étant 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 500 g.
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 Électrique (D207) et 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 toute une ou plusieurs entrée et sortie. 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éés 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.
    Étant 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. Étant 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 concordaient 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 termes 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’instructions que l’utilisateur donne au robot par l’intermédiaire de Chorégraphe. Le robot effectue donc la suite d’ordre donné sans prendre en compte les données de l’environnement. Les boîtes déjà préexistantes 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. Cette 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 permettant 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é 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éplacements.

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 ajustant les paramètres des boîtes. Mais cela marcherait dans le cas où le robot adopterait des trajectoires absolument parfaites. 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 envisageables sur des longs trajets 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és par l’ordinateur mais s’auto-ajuste en fonction du décor 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’environ 2 m de large, nous utiliserons des capteurs latéraux afin de mesurer la distance aux murs de chaque côté du robot et ainsi ajuster la trajectoire pour qu’il se trouve à 1m du mur à droite et 1m du mur à gauche.
Nous avons utilisé des boucles fermées 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 parler.
Pour passer une porte :
Nous avons utilisé la sécurité du robot. En effet si vous vous trouvez à 50 cm 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 joué avec cette sécurité en forçant le robot à faire 1 m, tant qu’il n’arrivait pas à faire ce mètre, et s'il renvoyait une erreur alors il recule de 10 cm, tourne de 15 rads 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 boîte “Redball Tracker”. Cette boîte prédéfinie consiste à placer des ronds rouges sur différents endroits 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élioré la boîte “ 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étecté 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 boîte suivant les nécessiter : 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 boîte, la création de celles-ci peuvent se faire des façons suivantes :

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


Diagram : à partir de boîte 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 mouvements sur machine virtuelle ou animation mode :
Ce mode permet de créer une bopite 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 n'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.

III - Les difficultées rencontrées et leurs possibles solutions

3.1. Difficulté au niveau de la programmation

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 anti-collision du robot. 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 utilisé 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 dû ajouter des APIs “wait” dans certaines situations où l’on utilisait les sorties “erreur” de certaines boîtes car sans cela, l’erreur parcourait toutes les boîtes suivantes sans les exécuter.

3.2. Les difficultés hors 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.
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 fixé sur le bras de façon à ce que la force de poussée ne soit pas exercée sur les doigts(fragile) du robot et donc pouvoir appuyer sur des boutons sans risque.

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 essayer 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