Aller au contenu


Contenu de GenRobots

Il y a 1 élément(s) pour GenRobots (recherche limitée depuis 02-mai 13)


Trier par                Ordre  
  1. Programmer un comportement complet pour le robo...

    En tant que membre assidus de ce forum, vous connaissez à coup sûr NAO, le robot humanoïde d’Aldebaran Robotics. Je suis sûr qu’en plus vous avez un petit faible pour lui. Et bien nous aussi !

    Quand nous avons eu notre premier NAO, on a tout de suite été convaincu par la qualité du produit, par la vision d’Aldebaran Robotics et une grande quantité d’idées ont tout de suite germé dans nos cerveaux.
    En parallèle, nous étions un peu déçus de ne trouver que des chorégraphies et danses comme exemple d’usage de NAO, même si elles sont très bien faîtes et qu’elles demandent du temps pour être réalisées. NAO pouvait faire plus que cela.

    En début de cette année, nous avons donc décidé de créer un premier comportement interactif où NAO utilisait réellement ses capacités humanoïdes : le jeu de Puissance 4.

    Après en avoir parlé avec Sébastien, le Webmaster de Robot-Maker et selon sa suggestion, voici un petite présentation de l’envers du décor, à savoir comment fonctionne techniquement ce comportement.
    Avant toute chose, si vous voulez voir les vidéos de NAO qui joue au Puissance 4, voici le lien : http://www.generationrobots.com/site/program-nao-robot/

    Image IPB


    Nous appelons une séquence l’ensemble des tâches à réaliser par le robot NAO pour mettre un jeton et revenir à son état initial. Nous n’abordons pas dans cet article la reconnaissance faciale de l’interlocuteur humain, la localisation de celui-ci, la reconnaissance vocale et enfin le moteur d’émotions. Pour tout cela, rendez-vous sur le site qui décrit le comportement.

    http://www.generationrobots.com/site/program-nao-robot/

    Séquences de jeu Puissance 4 pour NAO
    Voici les différentes étapes d’une séquence :

    • Trouver la planche de jeu dans son environnement
    • Analyser la planche
    • Déterminer le coup à jouer
    • Déterminer la distance à la planche
    • Avancer vers la planche
    • De positionner correctement en fonction de la colonne jouée
    • Mettre le pion
    • Reculer
    • Constater la réussite de la mise de la pièce

    La première difficulté que nous avons constatée est que la planche de jeu fait à peu près 2/3 de la hauteur de NAO. Ce qui fait que pour voir toute la planche de jeu et ainsi savoir où il en est, il doit reculer à une certaine distance (imaginez une planche de jeu qui fasse 2/3 de votre hauteur !).

    Donc première étape, trouver la planche de jeu. On se base sur les couleurs et la forme. Nous avons bataillé sur ce point et essayé plusieurs algorithmes différents. A chaque fois, et c’est vrai pour tout, nous devions choisir un bon compromis entre efficacité et temps de calcul. Nous avions à disposition des algorithmes très efficaces mais qui prenaient 30 secondes sur NAO, c’était donc inutilisable en pratique. Nous avons essayé quelques algorithmes disponibles dans des librairies graphiques et finalement, nous avons réalisé notre propre algorithme qui utilise la technique des filtres particulaires Bayésiens. Si certaines personnes sont intéressées par ces techniques, qu’elles nous écrivent, nous avons une personne qui adore parler de vision artificielle ;) .

    Une fois la planche positionnée, il faut que NAO l’analyse et déduise la position des jetons déjà en place s’il y en a. Un simple algorithme de couleur appris grâce à un algorithme génétique donne de bonnes performances. Tous les algorithmes de vision artificielle sont écrits en C++.

    Image IPB

    La troisième étape est une étape très simple, elle consiste à déterminer quel est le coup que NAO va jouer. L’algorithme utilisé est un algorithme de minimax que l’on apprend à l’école quand on a des cours d’intelligence artificielle, on n’a rien inventé de ce point de vue.

    Ensuite, c’est là que ça se corse. Il faut estimer la distance à la planche et faire en sorte que NAO se déplace vers celle-ci. De plus, le déplacement est différent en fonction de la colonne choisie. Si NAO choisit la colonne la plus à gauche ou la colonne la plus à droite, il ira directement se positionner au bon endroit. Pour déterminer la distance, on utilise de la trigonométrie toute simple à partir de l’image saisie par NAO. Les Bumpers dans les pieds sont mis à contribution afin d’arrêter la marche si d’aventure il heurte la planche.
    NAO est ensuite capable de se déplacer latéralement pour se placer de manière optimale. Pour ce faire, nous utilisons une combinaison d’analyse d’image (repère les coins de la planche), trigonométrie et déplacement. Dans ce cas précis, la trigonométrie utilisée est non triviale, croyez nous…

    Enfin, l’instant fatidique de la mise de pièce ! D’abord le robot demande à ce qu’on lui donne la pièce. A ce jour, ses doigts ne lui permettent pas de saisir un jeton posé sur le sol. On ne désespère pas pouvoir y arriver un jour en fonction des évolutions matérielles de NAO. Le dépôt de jeton se fait par une boucle d’asservissement visuel conjugué à de la cinématique inverse de manière à ce que le robot sache quelle est sa position par rapport à la planche. On débute par des mouvements grossiers et au fur et à mesure que l’on se rapproche de la fente de la colonne, on affine les traitements.

    Pour les lecteurs de Robot-maker uniquement, c’est un scoop, voici la capture d’écran de développement du comportement. Nous utilisons Chorégraphe, l’outil de programmation graphique d’Aldebaran pour orchestrer tous les processus entre eux, du Python pour paramétrer quelques éléments simples et pas mal de modules C++.

    Image IPB


    La programmation robotique nécessite en effet de pouvoir changer d’échelle de développement comme cela et donc une interface graphique de gestion de flux est totalement nécessaire au même titre qu’un bon vieux éditeur de code C++. Il serait utopique de vouloir tout gérer en code. D’ailleurs, si l’on regarde les autres plateformes de développement (URBI, ROS, MSRS), ils ne se trompent pas non plus et intègrent tous ces outils qui manipulent le code à différentes échelles.

    La version 0.4 du comportement

    La première version rendue publique est la version 0.4, c’est notre première version totalement fonctionnelle. Dans les prochaines versions, nous allons améliorer la robustesse aux conditions visuelles, diminuer le temps de chaque séquence et améliorer les fonctions d’interaction homme-robot qui sont, pour nous, tout aussi importantes, sinon plus, que le jeu en lui-même.

    Un mot sur nous : Génération Robots est un site de commercialisation de robots programmables (http://www.generationrobots.com). Nous proposons également des formations en robotique et allons bientôt lancer notre propre marque de capteurs et accessoires pour robots programmables. En plus de ces activités, une équipe de développement développe en propre des comportements pour les robots et propose ses services à des entreprises ou fabriquant de robots. La partie service de Génération Robots se nomme Humarobotics (http://www.humarobotics.com).

    Nous sommes passionnés par ce que nous faisons et nous adorons partager cette passion, alors si vous avez des questions, des remarques, des encouragements, n’hésitez pas à commenter cet article.
    Merci à Robot-Maker de nous avoir proposé cette tribune.

    @GenerationRobot