Guide utilisateur Chorégraphe

<< Débuter | Hide TOCShow TOCGreen Documentation

Guide utilisateur Chorégraphe

Introduction

Chorégraphe est une application cross-platformes qui vous autorise à éditer les mouvements et les comportements de Nao. Un comportement est un groupe d'actions élémentaires liés entre elles et suivant une approche évènementielle et temporelle.

La timeline (ligne temporelle) est plus adaptée à créer et éditer les mouvements et les données multimédia. Elle vous autorise à basculer entre différents contextes d'exécution, alors que le gestionnaire d'évènements permet de gérer les comportements et leurs déclenchements.

Installation

Environnement and contraintes

Chorégraphe tourne sous Linux Ubuntu, Mac OSX (Leopard) et Windows XP.

Matériel minimum requis.

  • 1.5 GHz CPU

  • 512 MB RAM

  • certified OpenGL graphics card

  • LAN avec DHCP

  • WiFi card (pour la connection sans fil entre l'ordinateur et Nao)

Installation

Vous trouverez Chorégraphe sur le CD-ROM fournis avec Nao.

Les instructions d'installation sont données dans Getting started.

Pour faire tourner les comportements, vous aurez besoin d'un interpréteur Python. Sur Mac et Windows, l'installateur s'en occuppe. Avec Linux, vous aurez à le faire manuellement.

Comme vous pourrez le constater, il reste quelques bugs minimes qui font planter Chorégraphe. C'est pourquoi nous vous recommandons fortement de sauver vos projets très souvent et ainsi vous ne perdrez pas votre travail. Essayez d'utiliser notre bug tracker pour nous aider à les fixer et améliorer le logiciel!

Windows

Lancez Chorégraphe à partir d'un alias sur le bureau ou du menu start.

Mac

Utilisez le package Chorégraphe (dans Applications) pour l'exécuter.

Linux

Pour lancer Chorégraphe, utilisez le script choregraphe.sh. Avant d'utiliser choregraphe.sh, vous devez obtenir la permission de l'exécuter. Entrez la commande suivante, à partir du dossier de Chorégraphe:

moi@localhost ~/choregraphe $ chmod +x choregraphe.sh

moi@localhost ~/choregraphe $ sh choregraphe.sh

La première fois que vous exécuterez Chorégraphe, vous devrez éditer les préférences, et changer le dossier de Naoqi ("Folders" tab) afin que Chorégraphe soit à même d'exécuter le Naoqi localement. Autrement vous ne pourrez pas tester vos comportements sur votre ordinateur.

Notice légale

The Python Software Foundation (PSF) holds the intellectual property rights behind the Python programming language.

Choregraphe : all parts of the products from Aldebaran-Robotics, including program and packaging, documentation, web pages and other related items are Copyright © 2006-2009 Aldebaran-Robotics, unless specifically noted. All rights reserved.

Vue d'ensemble de l'interface et de l'architecture

L'interface

Vue d'ensemble

Lorsque l'on ouvre un nouveau projet dans Chorégraphe, l'interface ressemble à cela:

L'espace de travail (worksheet) est divisé en trois grandes parties:

1 - Box library

2 - Flow diagram

3 - 3D Nao

Il est possible de réarranger la disposition de l'espace de travail. pour le faire, clickez sur Window puis sélectionnez le panneau que vous voulez afficher. Vous pouvez aussi les déplacer par click et drag/drop sur le nom du panneau.

Nous allons maintenant décrire brièvement les panneaux que vous pouvez afficher sur l'espace de travail.

La Box Library

Le panneau de la Box library affiche une liste de box rangées par catégories selon leur nature et leurs fonctions. Vous pouvez faire glisser ces boxes par drag/drop sur le flow diagram pour enrichir un comportement. Toutes les boxes de cette librairie ont été créées avec Chorégraphe. Une box est un objet fondamental dans Chorégraphe chaque chose que vous pouvez créer avec ce logiciel restera dans une box. Nous expliquerons la logique et les fonctionnalités des boxes ultérieurement..

Vous pouvez ouvrir, exporter et sauver toute box library simplement en cliquant sur File dans le panneau de la Box library. La Box library est aussi très simple à personnaliser dans le sens qu'elle vous autorise à réarranger la liste de Boxes comme vous l'entendez: vous pouvez déplacer les boxes et créer de nouveaux dossiers.

Grâce à la Box library, vous pourrez aussi accéder aux informations importantes d'une box en particulier en cliquant simplement dessus: une rapide description de la box est affichée dans une fenêtre en partie basse du panneau. Si vous voulez une descrition plus complète de la box, faire click-droit dessus et choisissez Library Box properties. Une fenêtre s'ouvrira et affichera tout ce que vous avez besoin de savoir à propos de la box qui vous intéresse.

Le Flow diagram

Le panneau du Flow diagram est l'endroit où vous créez les comportements pour Nao. Pour créer un comportement, faites glisser les boxes, depuis la box library, que vous voulez utiliser et déposer les dans le flow diagram. Vous pouvez aussi créer une nouvelle box du début par click droit sur le flow diagram et sélectionner “Add a new box”. Le panneau du diagram vous autorise à connecter une box à une autre, ou à l'entrée du comportement.

Le flow diagram suit une logique de multilevel graphique pour organiser les liens entre les boxes et la structure du comportement. A vrai dire, pour avoir un flow diagram plus lisible, il est possible de grouper les boxes liées entre elles en une seule et par conséquent créer des boxes multilevel. Maintenant observez la ligne supérieur juste au-dessus du diagram:

Cette ligne est très utile en vous montrant simplement le niveau du comportement affiché dans le panneau du diagram. Par exemple, le niveau racine affiche une vue d'ensemble du comportement avec les liens entre les boxes de premier niveau. Vous pouvez accéder aux différents niveaux de chaque box en double cliquant dessus. Cette approche vous autorise à définir plusieurs niveaux de diagram de box, comme nous le verrons plus loin.

Le Nao 3D

le panneau du Nao 3D est une représentation du robot utilisée pour créer et simuler les comportements.Ce modèle 3D peut être à la fois une représentation d'un Nao simulé (si vous êtes connecté à un simulateur) ou le miroir virtuel d'un vrai robot Nao avec lequel vous travaillez (si vous êtes connecté à l'adresse Ip du vrai robot).

Pressez les boutons de la souris pour zoomer et déplacer le model. Vous pouvez aussi sélectionner chaque partie du robot (tête, bras, corps et jambes) en cliquant simplement dessus.Cette action ouvrira une fenêtre de motion comme celle là:

the Motion window
1

la fenêtre de Motion

Cette fenêtre vous autorise à modifier la valeur des articulations de chaque membre. Vous pouvez voir le résultat de vos actions sur le model de Nao virtuel. Nous décrirons plus en détails les possibilités du panneau motion dans le tutoriel 4.2. Créer un mouvement depuis le début.

La librairie des mouvements prédéfinis

le panneau de La librairie des mouvements prédéfinis affiche une liste de positions préréglées pour Nao. Cliquer sur une position prédéfinie donnera automatiquement les valeurs prédéfinies aux articulations. Vous pouvez voir le model virtuel de Nao changer de position en temps réel. Cette librairie est très pratique par le fait qu'elle vous permet de définir et d'accéder facilement à des positions standards pour Nao pendant la création d'un comportement. Vous pouvez ouvrir et et exporter une position en cliquant sur File.

Vous pouvez aussi créer une nouvelle position prédéfinie at l'ajouter à la librairie. Pour le faire, en premier définissez la valeur des articulations de chacun des membres avec le panneau de motion. Une fois que c'est fait, cliquez sur File > Add position. Une fenêtre est maintenant ouverte. Donnez un nom et un descriptif à cette position. Vous pouvez aussi choisir une image que vous avez dans votre ordinateur ou prendre une copie d'écran du Nao virtuel pour illustrer la position. maintenant, cliquez sur OK et vous pourrez voir la nouvvelle position que vous avez créée dans la liste de la librairie, prête à être utilisée.

Principales fonctionnalitées

Détaillons maintenant le contenu de la bar de menu:

  • Dans le menu File, vous pouvez créer un nouveau projet, en ouvrir un que vous avez déjà sauvé dans votre ordinateur, sauver le projet sur lequel vous travaillez actuellement ou quitter Chorégraphe.

  • le menu Edit vous permet d'accéder à la fenêtre de préférences. Dans les préférences, vous pouvez éditer le profil d'un robot en donnant un nom au robot, l'adresse Ip du robot (robots réels ou simulés) et le numéro de port de Naoqi (le port standard est 9559). Vous pouvez aussi ajouter ou effacer le profil d'un robot. Motor speed règle la vitesse des moteurs de Nao (Il est déconseillé de dépasser 75% de la vitesse maximum pendant une utilisation prolongée de Nao ceci pouvant endommager les moteurs). La box library de l'utilisateur vous laisse choisir une box library sauvée sur votre ordinateur qui sera chargée à chaque ouverture de Chorégraphe. Display vous permet de modifier la couleur du graphique de chaque moteur qui apparaitra dans la timeline moteur (quand vous définissez les key frames dans une box de mouvement, par exemple).

  • Le menu Connection ouvre une liste de commandes dont vous aurez l'utilité pour connecter ou déconnecter un robot (un vrai robot ou un simulé). Vous pourrez aussi trouver un bouton Play et un bouton Stop pour démarrer ou arrêter un comportement ainsi qu'un bouton Warning qui ouvre une fenêtre explicative dans le cas ou le comportement que vous créez rencontre un problème. Les boutons play, stop et warning peuvent seulement être utilisés qu'une fois connecté à un robot. Connect to a local Naoqi devra être utilisé quand vous voudrez vous connecter à un Naoqi localement, ce qui se fait automatiquement quand vous exécutez Chorégraphe.

  • Le menu Behaviors vous permet de définir un comportement par défaut sur votre robot. Le comportement par défaut est celui qui tournera au démarrage. Vous pouvez aussi charger le comportement par défaut depuis votre robot et le réinitialiser (ce qui signifie qu'il n'y aura pas de comportement au démarrage). Enfin, vous avez un "Stop all behaviors" qui arrêtera tous les comportements tournant sur votre robot. C'est utile si vous avez exécuté un comportement sur votre robot au démarrage ou par script, et que vous avez perdu le contrôle dessus.

  • Le menu 3D View permet de changer l'angle de la camera dans la fenêtre du Nao virtuel.

  • Le menu Window vous permet de choisir quelle fenêtre ou panneau vous voulez afficher dans le worksheet.

  • Et en dernier, mais non par ordre d'importance: les boutons colorés en dessous de la barre de menu sont des raccourcis pour les actions que vous aurez (très) souvent besoin pendant la création des comportements dans Chorégraphe. Les boutons bleus sont pour les fonctions de projet générales (ouvrir ou fermer un projet). Les autres boutons sont utilisés pour se connecter à un robot et pour lancer, arrêter et relancer un comportement. Vous pouvez cliquer le bouton jaune de warning chaque fois qu'il y a un problème dans la structure de votre comportement. L'indicateur bleu de chargement de comportement est une barre de progression qui indique le chargement d'un comportement quand vous cliquez sur Play notez que les comportements complexes prendront un peu de temps pour se charger avant de se lancer).

    Indicateur de chargement de comportement

Fonctionnalités avancées

Il est fortement recommandé de lire d'abord les descriptions de Boxes, Inputs, outputs and links avant de lire cette partie.

Maintenant, laissez moi vous décrire les possibilités avancées de l'interface de Chorégraphe.

Dans le panneau du Flow diagram, faites un clic-droit dans le panneau du diagram ou sur une boite sélectionnée pour:

  • Couper, Copier ou Coller une boite.

  • Ajouter une nouvelle boite, pour créer une nouvelle boite et pour l'ajouter au panneau du diagram. Quand vous cliquez sur cette option, une fenêtre Create a new box est affichée.

    The Create a new box window
    2

    La fenêtre Create a new box

    Entrez un nom, une brève description et une image (vous pouvez chercher dans le dossier de Chorégraphe ou créer une nouvelle image). Puis définissez le nombre et la nature des inputs et outputs (entrées/sorties) que vous voulez voir attribuer à votre box en cliquant sur + ou -. Notez qu'une nouvelle box a automatiquement 3 entrées standards (onStart imput, onStop input et onStopped output) mais il est possible d'ajouter (+) ou d'effacer (-) autant d'entrées que vous voulez.

    Quand vous cliquez sur + pour ajouter une nouvelle entrée (input ou output) à votre box, la fenêtre Add a new input apparaît et vous autorise a donner un nom, une description et le type et la nature de votre nouvelle entrée.

    the Add a new input window
    3

    la fenêtre Add a new input

    Les options ALMemory et refresh period peuvent être définies seulement lorsque vous choisissez la nature d'un ALMemory input/output pour votre entrée.

    Finallement, vous avez à choisir un offspring pour votre box dépendant de sa nature (no offspring, timeline ou flow diagram). L'onglet Advanced de la fenêtre Create a new box autorise à définir notre box comme plugin: numberedit, textedit ou changelanguage plugin. Une box plugin box est une box qui offre une interface utilisateur, et génère automatiquement un script (voir tutorial 4.8 comme exemple).

    Quand vous faites un clic-droit sur un diagram box, le bouton Add to library vous autorise à sauver cette box dans le panneau de la librairie.

    Le bouton Convert to Box est utile quand vous voulez créer un diagram box de niveau supérieur pour encapsuler les autres boxes afin de réordonner votre diagram. Pour ce faire, selectionnez un groupe de boxes liées aux entrées principales du comportement et choisissez l'option Convert to box. une nouvelle box est créée (vous pouvez donner un nom et une image à cette box) avec les entrées générées automatiquement (notez que cette box n'aura aucune entrée si les box sélectionnées ne sont pas liées à une entrée de votre comportement principal). Cette nouvelle box encapsule les autres box que vous aviez sélectionnées.

    L'option Edit box vous autorise à accéder à la description et à modifier la nature de la box et de ses entrées. Cette fenêtre est similaire à la fenêtre Create a new box.

    Le Edit box script ouvre la fenêtre de script qui autorise à modifier le script de la box (voir le tutoriel sur l'édition de script pour plus d'informations).

    Faites clic-droit sur les différents inputs ou outputs d'une diagram box pour facilement ajouter, effacer ou modifier les inputs/outputs. Vous pouvez aussi faire un clic-droit sur les bords du panneau du flow diagram pour créer des entrées de niveau supérieur.

  • Sélectionnez Window > Timeline ou double-cliquez sur une box pour ouvrir le panneau de la Timeline:

    the Timeline panel
    4

    le panneau de la Timeline

    • 1 - Behavior layers - Cliquez sur + ou - pour ajouter ou effacer un behavior layer. Sur un behavior layer timeline, vous pouvez insérer des keyframes en double-cliquant sur l'index désiré ou par clic-droit dessus et en sélectionnant Insert keyframe. Le bouton Edit keyframe dans le menu de clic-droit (ou double-clic dans le keyframe) vous autorise à modifier le nom, image et start index d'une keyframe. Vous pouvez aussi couper/copier et coller un keyframe sélectionné dans votre behavior layer.

    • 2 - Motion layers - Vous pouvez ajouter ou effacer autant de motion layers que vous voulez en cliquant sur + ou -. Le bouton Play vous autorise à exécuter uniquement les motion layers en parallèle sur la timeline, et pas les behavior keyframes. Les motion layers sont très pratiques, vous pouvez insérer de nouvelles keyframes (clic-droit et insert keyframe ou double-click sur la timeline), editer un keyframe pour modifier son nom, image et index ou copier/couper et coller un keyframes (ceci peut être fait uniquement dans le même layer pour éviter des valeurs contradictoires d'articulations sur le même moteur).

      Si vous utilisez des raccourcis clavier pour couper et coller des keyframes, assurez vous d'avoir sélectionné l'index où vous voulez coller votre keyframe. Si le keyframe que vous avez coller est vide, cela peut vouloir dire qu'il y a un conflit avec des valeurs d'articulation contradictoires pour les mêmes moteurs au même index.

      Quand vous faites un clic-droit sur un motion keyframe, d'autres options peuvent être sélectionnées. Motion tween vous permet de choisir la nature de l'interpolation entre deux motion keyframes: linear ou spline. Export motion est seulement pour les utilisateurs avancés: il permet d'exporter le motion script de la motions layer en C++ (pour le moment). Le bouton Mirror layer permute les valeurs d'articulation des moteurs opposés dans une motion keyframe (les valeurs des moteurs de la tête ne sont pas modifiés). Store current position in keyframe est utilisé pour sauver les valeurs des articulations que vous avez définis avec le model Nao 3D dans le keyframe sélectionné (vous pouvez choisir entre Upper body (haut du corps), Lower body (bas du corps) ou Whole body (corps entier)).

    • 3 - Motors - la timeline Motors vous permet de voir l'évolution des valeurs d'articulation des différents moteurs dépendant des motion keyframes que vous avez créés: les timeline moteurs et les motion layers travaillent en parallèle. Les valeurs des Motors timeline sont en degrés. Vous pouvez modifier les valeurs de chaque articulation en cliquant dessus et en choisissant Edit ou en déplaçant le point de contrôle sur l'axe y de la Motor timeline. Vous pouvez ajouter de nouveaux points de contrôle au graphique par clic-droit sur une courbe: ceci ajoutera un nouveau keyframe à votre motion layer. Vous pouvez aussi mettre à l'échelle manuellement ou automatiquement la Motors timeline.

      Le bouton à côté de motors est utilisé pour choisir les moteurs que vous voulez afficher sur le graphique (seulement les moteurs que vous êtes actuellement en train de modifier dans votre comportement seront affichés). Vous pouvez aussi choisir la couleur d'affichage de chaque moteur. Show/Hide all motors est utilisé pour désactiver une motion/behavior layer ou pour montrer/cacher les moteurs dans la motors timeline. Quand une layer est désactivée(muted), cette layer n'est pas exécutée quand vous cliquez sur Play: c'est très utile quand vous voulez tester une layer en particulier.

      Le bouton Edit en bas à gauche vous permet de régler le paramètre des FPS de la (la valeur par défaut est de 15 frames par seconde).

    • 4 - Magnetize - Cliquer sur l'icone magnet pour magnetiser les courbes des moteurs sur la timeline Motors. Une ligne sera affichée tant qu'une keyframe sera au même niveau que les autres keyframes.

    • 5 - Rescale - Vous pouvez modifier ici les valeurs minimum/maximum de votre échelle pour un meilleur affichage.

Petite liste

Ceci est la liste des possibilités de l'interface utilisateur:

  • Drag and drop une box depuis la librairie dans un flow diagram.

  • Drag and drop une position depuis la librairie de positions dans un flow diagram (ceci créera une box avec une timeline qui donnera au robot la bonne position).

  • Double-cliquez sur une box pour y entrer (ceci ouvrira son script si elle n'a pas d'offspring). Double-cliquez sur un flow diagram en dehors de toute box pour revenir au niveau supérieur.

  • Clic-droit sur un diagram pour voir toutes les possibilités! Par exemple, clic-droit sur une box, et clic sur Edit box pour changer ses nom / description / imputs / outputs / offspring.

  • Copié et collé est possible dans les diagrams et la timeline.

  • Cliquez sur le membre du robot pour appeler le panneau de motion. Cliquez ailleurs pour le faire disparaitre.

  • Drag and drop sur une position depuis la position library vers une motion keyframe. Cela copiera tous les moteurs dans la keyframe.

  • Pour contrôler un comportement vous pouvez faire ce qui suit:

    • Cliquez sur Play pour le charger dans le robot.

    • Une fois qu'il a été joué, vous pouvez le stopper ou le relancer (cela va simplement stimuler l'entrée à nouveau, mais n'aura pas d'influence sur ce qui s'exécute à ce moment là).

    • Vous pouvez aussi double-cliquer sur une input ou output pour la stimuler (si ce sont de simple "bangs", plus tard vous pourrez le faire). C'est très utile pour débuger un comportement. Notez que c'est possible uniquement si le comportement en cours d'exécution.

    • Pour l'instant, si vous ajoutez une box pendant que le comportement s'exécute, et que vous la connectée à d'autre box, souvenez vous que cette box ne sera pas active jusqu'à ce que vous cliquiez sur Play à nouveau (ceci arrêtera l'ancien comportement, et en créera un nouveau avec les nouvelles box et liens). La programmation dynamique sera une fonctionnalité d'une future mise à jour.

  • Faites clic-droit quand vous éditez un script pour voir quelles fonctions sont disponibles dans le script.

  • Import/Export box et librairies de position. Notez que l'export n'est pas automatic, aussi si vous avez changé les librairies, assurez vous que vous les avez exportée AVANT de quitter Choregraphe, autrement vos changements seront perdus. Ceci sera bientôt amélioré...

Boxes

Toute la logique de Chorégraphe réside dans les box. Le premier élément que vous utilisez quand vous créez un comportement dans Chorégraphe est bien sûr une box. Avant toute chose, examinons ce qu'est une box dans Chorégraphe. Prenons la box de mouvement par exemple:

the Movement box
5

the Movement box

Une box a des inputs (sur le côté gauche) et des outputs (sur le côté droit). Ils sont utilisés pour faire communiquer les boxes entre elles. Dans les faits, pour activer l'input d'une box, vous avez à la connecter ou à l'entrée du comportement (en haut à gauche du diagram), ou à l'output d'une autre box. En dessous il y a un exemple:

Example of connected boxes
6

Exemple de boites connectées

La communication est basée sur les évènements, aussi un simple signal "event" peut être envoyé d'une box à une autre. Le signal peut aussi transporter des informations (comme une chaîne de caractères, un nombre, un tableau...). Voilà pourquoi il n'est pas toujours possible de connecter deux boxes: les informations envoyées par l'output doivent être compréhensible par l'input. Si cela n'est pas le cas, alors la connection sera interdite. Nous verrons plus tard les différents types de signaux que vous rencontrerez dans Chorégraphe.

Décrivons les 3 différents types de boxes que vous utiliserez dans Chorégraphe:

  • Script box.

    Drag and drop la FaceLeds box, par example, dans le flow diagram. Double-cliquez sur la box pour ouvrir l'éditeur de script:

    the Script Editor
    7

    the Script Editor

    Le script défini quand le flow diagram contenant la box est chargé et quand une de ses inputs est stimulée.

    Les scripts peuvent être rédigés en différents languages, mais pour l'instant vous serez limité à Python. Les possibilités sont à peu près infinies: les boxes ont la capacité de communiquer en utilisant chacune des fonctions de NaoQi (communiquer avec les autres modules, mettre en registre avec ALMemory...).

  • La diagram box.

    Avec les boxes de base que nous venons de décrire, vous pouvez construire des boxes plus complexes. Par exemple, une box peut être un container d'autres boxes. Ces boxes contiennent d'autres boxes liées ensembles. Ils sont très utiles pour structurer et organiser le diagram de comportement.

    Pour avoir un flow diagram plus lisible, il est bien entendu possible de grouper des boxes liées entre elles en une seule.

    Linked boxes in Flow diagram
    8

    Boxes liées dans le Flow diagram

    Dans la figure si dessus, nous avons ouvert une Walk box dans laquelle nous pouvons trouver 2 boxes liées ensembles: Distance et WalkStraight. Notez qu'à côté du bouton root en haut à gauche, il y a un bouton walk qui indique que vous êtes dans le second niveau de la structure du diagram, dans la Walk box.

    Utiliser cette approche vous permet de définir facilement plusieurs niveaux de flow diagram, comme nous le verrons plus loin.

  • Combinaison de la timeline et du flow diagram box.

    Dans une box, vous pouvez créer une timeline qui définira un mouvement. En utilisant les keyframes, dans lesquelles les valeurs des articulations peuvent être stockées, et l'interpolation entre elles (linear, spline), un mouvement peut être rapidement écrit dans Chorégraphe. Les Timelines seront étudiées plus tard dans le tutoriel Créer un mouvement depuis le début .

    Timeline with keyframes
    9

    Timeline avec keyframes

    Une box peut contenir une timeline avec deux types de keyframes:

    • Motion keyframes: contiennent les valeurs d'articulation ainsi que les interpolations depuis la précédente keyframe.

    • Behavior keyframes: contiennent un flow diagram qui tournera jusqu'à ce qu'un autre behavior keyframes soit rencontré.

    Ces deux types de layers existent dans des layers différents, comme affiché dans l'image suivante:

    Timeline and layers
    10

    Timeline et layers

    Il est aussi possible de créer plusieurs motions ou behavior layers, respectivement pour exécuter des flow diagrams ou des mouvements simultanément. Notez cela pour l'instant, il n'est pas possible de définir des valeurs pour la même articulation dans des layers différents. Le mode blend (mixage) sera une fonctionnalité dans une futur mise à jour. Le petit oeil à côté de chaque layer vous offre la possibilité de "mute"(désactiver) une layer: elle sera ignorée au lancement du comportement. ceci peut être utile quand vous voulez debuger votre comportement.

    Les images suivantes résument les possibilités:

    schematic view of boxes in
              Choregraphe
    11

    vue schématique des boxes dans Chorégraphe

Inputs et outputs

Nous avons déjà vu que les boxes peuvent communiquer entre elles à l'aide des liens qui sont connectés aux entrées inputs ou outputs, suivant une logique de communication évènementielle. Vous avez probablement noté qu'il y a différents types de liens et d'entrées dans Chorégraphe qui correspondent à différentes natures de signaux et d'actions. Dans cette section, nous décrirons ces différents entrées et liens.

En premier, nous regarderons la topologie des différentes entrées que vous pouvez utiliser dans Chorégraphe.

Une box aura toujours au moins 3 différentes entrées. En fait, ce n'est pas toujours vrai puisqu'il est possible de définir une box avec moins d'entrées et même pas d'entrées du tout (nous verrons cela plus tard). Mais pour l'instant, nous présumerons qu'une box normale a toujours un minimum de deux entrées (sur son côté gauche) et une sortie (sur sa droite).

les (presque) obligatoire entrées et sorties de box:

Inputs and output of a box
12

entrées et sortie d'une box

Entrées Sorties
onStart: cette entrée (input) peut être trouvée en haut à gauche de la box. Quand l'entrée onStart est stimulée par un signal, le comportement de la box est exécuté.
onStopped: cet sortie (output) est en haut à droite de la box. Quand onStopped est stimulée, cela signifie que le comportement de la box est fini. La sortie onStopped peut être liée à l'entrée d'autres boxes: ces entrées seront stimulées une fois que le comportement de la box précédente sera complètement fini.
onStop: cette entrée est représentée par une croix rouge en bas à gauche de la box. Quand cette entrée est stimulée par un évènement(event), le comportement exécuté dans la box, reçoit l'ordre de s'arrêter. Notez que, dans ce cas, cela peut prendre un peu de temps au comportement pour s'arrêter. Par example, si Nao marche, le comportement “Walk” que vous voulez arrêter, attendra que les pieds de Nao soient stables avant de stopper, de tel façon que le robot ne tombe pas.

Ces 3 entrées sont les plus communes dans Chrégraphe, mais elles ne sont pas seules.

Autres types d'entrées que vous pouvez rencontrer dans Chorégraphe:

  • onLoad est une entrée qui est cachée dans la structure de chaque box. Vous pouvez la voir quand vous ouvrez une box qui contient des flow diagrams. Cette entrée est stimulée quand le comportement de la box est chargé. En fait, quand vous cliquez sur Play pour démarrer votre comportement, quelques boxes de niveau inférieur doivent attendre la stimulation par onLoad avant d'être chargées.

    Prendre une box qui contient une timeline de comportement avec une keyframe par exemple, les boxes de la keyframe se chargeront une fois que la key frame est stimulée et pas avant. Notez que le niveau root du diagram peut aussi être considéré comme une boite. L'entrée onLoad que vous pouvez trouver en haut à gauche est l'entrée de votre comportement principal qui est stimulé chaque fois que vous cliquez sur Play. Si rien ne lui est connecté, rien (de visible) ne se passera.

  • Input connected to ALMemory sera stimulée chaque fois que la valeur souscrite dans ALMemory change, en respectant la période choisie de rafraichissement.

  • Quand la event Input est stimulée, le comportement tournant dans la box est modifié.

  • La punctual Output peut être stimulée à tout moment durant l'exécution d'une box de comportement.

Links

Dans Chorégraphe, évènements et boxes sont reliés ensemble par des liens. Par exemple, regardons la figure ci-dessous:

Colored links on Flow diagram
13

Links de couleur dans un Flow diagram

Dans Chorégraphe, les entrées et liens peuvent avoir 4 couleurs différentes. Chaque couleur indique la nature du signal d'évènement qui est transferré entre les entrées à travers les liens. Dépendant de la nature de ce signal, il n'est pas toujours possible de connecter deux boxes: l'information envoyée par la sortie doit être compréhensible par l'entrée.

Les différents types de signaux d'évènements:

  • Bang (noir): ce signal ne transporte aucune information. c'est seulement un stimulus.

  • Number (jaune): ce signal est, ou une chaine (chain) de nombres, ou une table (array) de nombres.

  • String (bleu): ce signal est, ou une chaine de caractères, ou une table de caractères.

  • Dynamic (gris): ce type est utilisé quand vous ne connaissez pas la nature du signal qui est envoyé. il peut être bang, number, string ou une combinaison de plusieurs de ceux là.

Vous pouvez connecter tout type de link à une entrée “Bang” (noire). Le signal sera toujours interprété comme un “bang”.

Tutoriels

Les exemples de comportements qui sont utilisés dans les différents tutoriaux peuvent tous être trouvés dans le dossier Tutorials de Chorégraphe.

Créer un comportement simple

Quand vous lancez Chorégraphe, l'interface affichera un diagram vide. Du côté main gauche, une librairie de boxes est là pour vous. Toutes les boxes de cette librairie ont été créées avec Chorégraphe. Vous devez réaliser qu'une fois que vous serez familiarisé avec ce logiciel, vous serez à même d'ajouter vos propres boxes à cette librairie et de créer des comportements plus complexes à partir de ceux-ci.

Quand vous cliquez sur Play, les entrées de votre comportement seront stimulées. Oui, c'est l'entrée en haut à gauche de votre diagram. Si rien ne lui est connecté, rien ne se passera (bien, en fait nous avons déjà expliqué cela et ce n'est pas complètement vrai, mais disons que pour le moment que c'est comme ça). Si vous faites drag and drop d'une box sur votre diagram, ce sera insuffisant. Elle sera chargée dés que votre comportement démarrera, mais elle a besoin d'être stimulée sur son entrée pour réellement faire quelque chose.

Par exemple faisons un drag and drop de ce sympatique exemple: l'exemple "Dance". Bien, maintenant cette box est dans notre diagram, mais il n'y a pas encore de connections.

-Cliquez sur l'entrée du comportement et, avec le bouton de votre souris maintenu appuyé, faites la glisser (drag) sur l'entrée de votre box. Un lien devra être apparu entre l'entrée et votre box, et en relachant le bouton de la souris à cet endroit.

Félicitations!, vous avez construit votre premier comportement.Il n'est pas complexe, mais quand même, le premier pas est franchi! Votre diagram devra ressembler à ça:

the Dance box with input and output
14

La Dance box avec input et output

Pour tester le comportement, cliquez sur Play! Le model 3D Nao est en train de danser, si vous êtes connecté à un vrai Nao, votre robot danse aussi.

Quand vous cliquez sur Play pour tester un comportement, le signal vert sur le diagram indique les évènements et les boxes qui sont stimulés en temps réel.

Après ce premier succès, passons à la prochaine étape et faisons parler Nao.

Le modèle 3D de Nao peut seulement simuler les mouvements, pas la parole ou les leds etc.Toutefois, si vous êtes connecté à un vrai Nao, vous serez bien sûr à même de tester tous les comportements que vous voulez et voir réellement leurs actions.

-En premier, drag and drop une Say box depuis la librairie vers le diagram.

-Connectez les entrées onStart et onStopped de la box aux input et output principal du comportement, comme montré dans la figure ci-dessous.

Dance and Say boxes
15

Dance and Say boxes

-cliquez sur Play et regardez (vous allez devoir vous connecter à NaoQi si vous ne l'avez pas déjà fait). Si vous êtes connecté à un vrai robot Nao, vous devriez voir Nao prendre vie, dire "Hello" et danser en même temps. Si vous êtes connecté à un simulateur, le Nao 3D commencera à danser mais ne dira rien: la Say box devient rouge. C'est normal, 3D Nao peut seulement reproduire les mouvements (voir la note juste en dessous).

-Si vous voulez que Nao commence par dire "Hello" puis se mettre à danser, vous avez simplement besoin de lier les 2 boxes ainsi:

Say then Dance boxes
16

boxes dire puis danser

Maintenant, vous voudriez que Nao dise quelquechose de différent que "Hello": ce ne sera pas un problème.

-Double-cliquez sur la Say box pour l'ouvrir et regardez la structure du comportement:

Inside the Say box
17

A l'intérieur de la Say box

-Pour changer le texte de Nao, cliquez sur toSay et écrivez ce que vous voulez.

Avant d'aller plus loin, décrivons la structure de la Say box.

Vous pouvez voir que 2 boxes sont encapsulées dans la Say box: SayText et toSay.

- Nous avons déjà vu que la toSay box autorise à écrire le texte que vous voulez que Nao dise. Cette box est liée à l'entrée onStart (1) de la Say box. Ceci signifie que, quand vous cliquez sur Play pour lancer le comportement, la toSay box est stimulée en premier.

- La sortie de la toSay box (2) est liée à l'entrée onStart (3) de la SayText box. Vous aurez noté que le lien entre la toSay box et la SayText box est bleu (de type String), la nature du signal qui est transmis étant une chaine de caractères.(texte).

-La sortie de la SayText box (4) est liée à la sortie onStopped (5) de la Say box.

Décrivons ce qui se passe quand l'entrée onStart de la Say box est stimulée:

-1. Le signal stimule l'entrée onStart de la toSay box et exécute le script: l'information "hello" est transmise à travers le fil de lien bleu à l'entrée onStart de la SayText box.

-2. Le script de la SayText box est exécuté: Nao dit Hello.

-3. A la fin du script, un signal est transmit à la sortie onStopped de la Say box. Ceci indique que le comportement de la Say box est fini.

-4. Quand le lien (6) entre l'entrée onStop de la Say box et l'entrée onStop de la SayText box est stimulé par un évènement (une autre box qui serait liée à l'entrée onStop de la Say box par exemple), le comportement de la SayText box reçoit l'ordre de s'arrêter: la lecture de Nao s'interrompt.

Create a movement from scratch

Dans Chorégraphe, il est très facile de créer des mouvements simples en peu de temps.

Prenez la Movement box par exemple:

- Juste drag and drop la movement box sur votre diagram.

-Puis entrez dans la box (double-click), et une timeline vide apparaitra.

-En premier, vous devriez mettre de côté la première motion keyframe. Avoir un keyframe a l'index 1 n'est pas judicieux: cela voudrait dire que le robot, partant d'une position indéterminée en entrant dans la box, devrait aller à cette position instantanément. Le keyframe sera probablement ignoré, aussi mettez la de côté.

-Puis, toujours avec la sélection, cliquez sur un des membres du robot : tant qu'un motion keyframe unique est sélectionné, le motion editing est activé.

Cliquez sur un membre vous donnera, en utilisant la fenêtre de Motion, la possibilité d'ajouter quelques valeurs d'articulation du membre dans le keyframe sélectionné.

Décrivons cette motion window.

the Motion window
18

La Motion window

  • 1 - Il y a un curseur pour chaque articulation du membre sélectionné. Vous pouvez aisément le déplacer, ou entrer une valeur dans la text box associée. La petite flêche verte que vous pouvez voir en dessous du curseur est la valeur actuelle de l'articulation sur le robot. Utiliser le curseur ou la textbox enverra une valeur au robot qui essayera de réaliser votre commande dés que possible. Si la flêche est bleue, cela signifie que le robot n'a pas encore atteint la commande que vous avez envoyé. Quand vous envoyez la commande en relachant la souris, cela prends habituellement à peu près une seconde au robot pour être à la bonne position. Si cela prends plus de temps, cela pourrait signifier que le robot a un problème (obstacle?).

  • 2 - Ceci est le bouton Record(enregistrement). Si le bouton est gris, cela peut vouloir dire deux choses: soit l'articulation n'est pas sauvée dans le keyframe sélectionné, ou vous n'êtes pas en mode édition de motion. Si c'est rouge, cela signifie juste que le keyframe est en cours de stockage de la valeur de l'articulation (la valeur actuelle de l'articulation, qui doit différer de la commande).

    Ce bouton peut être grisé si vous essayez d'ajouter une valeur d'articulation pendant que le layer que vous éditez ne peut pas utiliser cette articulation, parceque elle est déjà définie dans un autre layer.

  • 3 - Montrer/cacher un moteur dans l'affichage des courbes. Dans le bas du panneau de la timeline, sont affichés les courbes des moteurs qui sont commandés dans la timeline en cours. Ces boutons sont utilisés pour sélectionner, si vous voulez voir les moteurs un par un (voir en dessous).

  • 4 - Ce bouton vous autorise à afficher tous les moteurs du membre courant dans l'afficheur de courbes.

  • 5 - Mode miroir. Il existe pour les membres qui ont un membre symétrique sur le robot (toutes les articulations sauf la tête en fait). Cela signifie que quoique vous fassiez sur un membre (envoyer une commande, enregistrer une valeur d'articulation...), elle sera exécutée sur l'autre membre avec une exacte symétrie.

  • 6 - Enslave motors. Une fois que vous êtes connecté à un Nao, tous les moteurs sont automatiquement asservis. Utilisez ce bouton (ou le raccourci ctrl-U) asservira ou libèrera tous les moteurs. Quand un moteur est libéré, utiliser le curseur n'aura aucun effet sur Nao.

La fenêtre de motion vous permet de définir facilement des valeurs d'articulation pour votre keyframe courante. Après cela, vous pouvez insérer un nouveau keyframe à la suite de celui déjà défini, qui enregistrera automatiquement la même valeur d'articulation que le précédent. Pour modifier la seconde keyframe, vous pouvez garder en utilisation le panneau de motion ou l'afficheur de courbes, qui se situe en dessous des motion layers:

Motion layers with curves and
          keyframes
19

Motion layers avec courbes et keyframes

Ce panneau affiche les valeurs que vos articulations vont avoir si tout se passe bien.

En premier, vous pouvez voir que les courbes commencent avec la première keyframe. Avant cette keyframe, c'est indéterminé: le robot essayera d'atteindre la bonne position en utilisant le mode d'interpolation sur la première keyframe. Les petits rectangles sont les valeurs enregistrées dans les keyframes. Dans notre exemple, les valeurs des moteurs sont lisses et passent toujours par les rectangles.

Mais quelquefois, cela ressemblera à ça:

keyframe out of the curve
20

keyframe en dehors de la courbe

Il semble que Chorégraphe ne comprend pas complètement votre dernière commande, ainsi la courbe n'arrive pas à atteindre le rectangle.

Avant de prendre des mesures radicales, prenez une grande inspiration et essayez de penser à ce que vous essayez de faire. Entre la seconde et la troisième keyframe, il y a 5 frames. Si, par exemple, le FPS de votre timeline courante est 30, cela signifie que 1/6s sera le temps entre les deux keyframes. Et vous voulez que votre moteur aille de -52 à 37 degrés en ce lapse de temps. Bien, mais rappelez vous que vous utilisez ici des moteurs réels avec des limites de vitesse. Chorégraphe essaye de vous dire que ce moteur (ici HeadYaw) ne peut simplement pas faire ça: il faudra plus de temps pour le faire. Au lieu d'essayer d'aller à votre commande quoiqu'il arrive, Chorégraphe a choisi de favoriser la commande suivante. Aussitôt qu'une keyframe est derrière, il fera tout son possible pour atteindre la prochaine keyframe (plutôt que d'aller à la troisième position avec du retard). Toutefois si vous définissez une quatrième keyframe, la courbe ressemblera à ceci:

the keyframe is not reached in favor of the next
          one
21

la keyframe n'est pas atteinte en faveur de la suivante

Ces courbes sont bien sûre théoriques: si votre robot rencontre un obstacle, il ne pourra pas bouger. L'utilisateur a un contrôle complet sur les courbes: il peut insérer de nouvelles commandes (click sur la courbe), en effacer (clic droit et delete), move commands le long de l'axe y, entrer une valeur fixe en double-cliquant sur un rectangle, etc.

Modifier les FPS aura aussi un impact significatif: les courbes changeront probablement comme vous donnerez plus ou moins de temps pour changer. Une fois que vous en aurez fini avec votre mouvement, revenez juste au niveau supérieur, et connectez votre Movement box à votre comportement.

Créer un mouvement avec un vrai Nao pour définir la valeur des articulations

Dans le précédent tutoriel, nous avons vu qu'il est plutôt simple de créer un mouvement du début avec la fenêtre de motion. Il existe quand même une autre possibilité dans Choregraphe de créer des mouvements pour Nao d'une façon très intuitive. Vous pouvez utiliser un vrai Nao pour facilement définir les valeurs d'articulation pour vos keyframes. Voyons ce mode de fonctionnement.

- En premier, ouvrez Chorégraphe et connectez vous à un vrai robot Nao.

- Quand vous changez la position sur un vrai Nao, vous pouvez voir que le Nao 3D virtuel change de position aussi. Essayez le: si vous soulevez un bras de Nao, le 3D Nao soulevera son bras.

The real Nao's position is reflected in the 3D
        viewer
22

La position d'un vrai Nao est reflété sur la vue 3D

Ne serait il pas formidable d'utiliser cette fonction pour créer des keyframes de position sur une motion timeline?

- Maintenant, disont que nous voulons que Nao lève sa tête dans le premier keyframe et qu'il garde les bras vers le bas. Pour ce faire, cliquez sur la première keyframe, puis cliquez sur la tête du Nao 3D virtuel pour ouvrir la fenêtre de motion.

- Bougez la tête du vrai Nao à la position que vous voulez (enslave doit être off) puis enfin cliquez sur les 2 boutons d'enregistrement de la fenêtre de motion comme dans l'image ci-dessous.

Clicking the Record button
23

Cliquez sur le bouton Record

- C'est fait! l'articulation de la tête a été sauvé dans le premier keyframe.

- Maintenant, bougez les bras du vrai Nao pour les mettre vers le bas (enslave doit toujours être off). Pour sauver les valeurs des articulations des bras dans le premier keyframe, nous utiliserons une fonction très pratique de la motion timeline: l'option Store joints in keyframe.

- Cliquez sur Enslave all on/off dans une fenêtre de motion de tel façon que le robot ne bouge pas.

- Faire un clic-droit sur la première keyframe et choisissez Store joints in keyframe. Cette fonction vous permet de sauver les valeurs des articulations de Nao: les articulations de tous le corps, la tête, les bras ou les jambes, dépendant de ce que vous voulez.

Saving joint values (arms for example)
24

Sauver des valeurs d'articulation (les bras par exemple)

- Comme nous voulons sauver les valeurs des articulations des bras, vous devrez cliquer sur Arms. Les valeurs des articulations des bras ont été sauvées dans la première keyframe.

- Maintenant, disons que nous voulons que Nao monte ses deux bras dans une seconde keyframe. Pour ce faire, utilisons l'option Store joints in keyframe une fois de plus:

1. Insérez une seconde keyframe sur la motion timeline. Pour ce faire, faites clic-droit puis sélectionnez Insert KeyFrame.

2. Bougez les bras du vrai Nao dans la position que vous voulez (enslave doit être off). Cliquez sur Enslave all on/off dans une fenêtre de motion de tel façon que le robot ne bouge pas.

3. Faites un clic-droit sur la seconde keyframe et choisissez Store joints in keyframe.

4. Comme nous voulons sauver les valeurs des articulations des bras, vous devez cliquez sur Arms.

La valeur des articulations des bras ont été sauvées dans la seconde keyframe.

Grâce à l'option Store joints in keyframe, nous avons pû sauver les valeurs de 8 articulations (4 articulations par bras) dans une keyframe d'un simple clic. Pratique, n'est ce pas?

Quand vous faites clic-droit sur une keyframe, l'option Remove joints from keyframe vous autorise à retirer facilement les valeurs des articulations que vous avez sauvé dans la keyframe. Vous pouvez choisir de retirer les valeurs d'articulation du corps entier, ou seulement les valeurs de la tête, des bras ou des jambes.

Créer un mouvement avec des walk boxes

Si vous avez réussi les exercices précédents avec succès, vous devez savoir comment créer un mouvement avec des motion keyframes. Mais les motion keyframes ne sont clairement pas prévus pour éditer des mouvements complexes. C'est approprié pour danser, faire des signes, des flexions... Mais marcher est beaucoup plus compliqué.

Heureusement, nous avons développé d'autres outils qui pourront vous aider. Un des principaux modules du robot est ALMotion. Ce module a été créé pour interprété des ordres simples comme "met ce moteur dans cette position en tant de temps", mais aussi des ordres de marche: "va tout droit sur un mètre". Bien, en fait, les ordres doivent être un petit peu plus complexe, comme vous pouvez définir tous les paramètres des modèles de marche, mais nous n'irons pas dans les détails maintenant.

Pour l'instant, tout ce que vous devez savoir est que Chorégraphe offre des boxes de "marche" très simples.

1. Drag and drop la Walk box par exemple.

2. Double-cliquez dessus. vous entrerez dans cette box. A ce moment, votre diagram actuel doit ressembler à ceci:

Inside the Walk box
25

A l'intérieur de la Walk box

La première box transmettra un nombre à la seconde. Ce nombre dira à la première box combien de mètres le robot devra marcher. A partir de là, le changer sera très simple!

3. Revenez au niveau root et connectez l'entrée du comportement à votre box.

4. Cliquez sur Play et votre robot marchera.

Aller plus loin et tester turn (tourner), walk around (marcher en rond) etc. les boxes depuis le dossier Walk. Vous pouvez maintenant créer de remarquables mouvements très facilement.

La behavior layer (1): les bases

Dans le tutoriel, créez un mouvement depuis le début, nous avons appris comment utiliser la motion layers et les keyframes pour créer une box de simple mouvement. Maintenant, nous allons nous focaliser sur la behavior layer timeline.

Les behavior layers que vous pouvez trouver dans les boxes timeline vous autorise à créer des comportements en suivant une approche basée sur le temps et pas seulement basés sur les évènements. Le concept est simple et à peu près similaire à la façon dont la motion layer fonctionne. Comment cela marche t'il?

1. Drag and drop une Dance box sur le panneau du diagram et ouvrez la.

La timeline devra ressembler à cela:

Motion layer timeline
26

Motion layer timeline

Vous pouvez voir une motion layer avec des keyframes dessus où les valeurs d'articulations sont définies de façon à faire danser Nao.

2. Cliquez sur le + à côté du menu déroulant de la Behavior layers en haut à gauche. Une seconde timeline est affichée avec un nouveau keyframe.

Il est possible d'avoir plus d'une behavior layer sur la même timeline. Dans ce cas, les keyframes de comportement des différentes layers seront exécutées en parallèle. Assurez vous de ne pas donner d'ordres contradictoires à la même box.

Motion and behavior layers timeline
27

Motion et behavior layers timeline

Quand vous cliquez sur le behavior keyframe1, vous pouvez voir qu'il contient une zone flow diagram dans laquelle vous pouvez drag and drop des boxes. En fait, le comportement que vous créez à l'intérieur d'un behavior keyframe tournera jusqu'à ce qu'un autre behavior keyframe soit rencontré. Sur une timeline, les behavior layers et les motion layers sont exécutés en parallèle.

Sur une timeline, la behavior layers et les motion layers sont exécutés en parallèle.

Parcouront un simple exemple. Vous aimeriez que Nao danse et fasse clignoter ses leds en même temps, mais vous voudriez aussi définir précisément quand et pour combien de temps chaque type de led est allumé (face, ears et feet LEDs).

1. Ajoutez 2 nouvelles keyframes à votre behavior layer.

New keyframes in the behavior layer
28

Nouveaux keyframes dans la behavior layer

2. Cliquez sur keyframe1 et drag and drop une box FaceLeds sur la zone de flow diagram.

3. Connectez l'entrée onStart de la box FaceLeds à l'entrée onLoad de la Dance box, comme sur la figure:

Connecting onStart to onLoad
29

Connection de onStart à onLoad

4. Cliquez sur Play. Nao dansera et allumera ses face LEDs.

Quelquefois, un comportement peut prendre un peu plus de temps que prévu avant de finir de s'exécuter complètement. La raison à cela est que, si votre keyframe est trop courte (le lapse de temps est trop court), le comportement à l'intérieur du keyframe sera coupé ou même, pas exécuté du tout.

5. Cliquez sur keyframe47 et connectez les autres LED boxes comme vous pouvez le voir sur la figure ci-dessous:
Connecting the LEDs at keyframe 47
30

Connection des LEDs au keyframe 47

Si vous cliquez sur Play, Nao commencera à danser et fera clignoter ses face LEDs, puis, au keyframe47 (après 3.1 secondes comme nous travaillons actuellement à 15 FPS: 47/15≈3.1), Nao allumera ses autres LEDs, sans s'arrêter de danser.

Vous pouvez changer le réglage de FPS en cliquant sur le bouton d'edition bleu qui est à côté du panneau de la timeline. La valeur de FPS par défaut est de 10.

6. Cliquez sur la dernière keyframe du behavior layer (keyframe93) et connectez les LED boxes comme dans la figure ci-dessous:

Connecting LEDs at keyframe 93
31

Connection des LEDs au keyframe 93

Ce keyframe behavior éteint toutes les LED boxes, l'une après l'autre, avant de stimuler la sortie onStopped de la Dance box.

Maintenant, notre comportement est fini. Connectez la Dance box à l'entrée principale du comportement et cliquez sur Play.

Si vous êtes connecté à un vrai Nao, vous pouvez voir Nao commencer à danser (motion layer) et allumer ses face LEDs en même temps (behavior keyframe1). puis, 3.1 secondes plus tard (behavior keyframe47 à 15 FPS), Nao allumer ses autres LEDs (ears et feet). Finalement, au behavior keyframe93, Nao éteint toutes ses LEDs et arrête de danser (le 4th motion keyframe sur la motion layer a été atteint).

La behavior layer (2): Stop et Goto...

Dans ce tutoriel, nous allons voir comment utiliser des boxes très utiles que vous trouverez dans le dossier Timeline de la Box list: Stop et goto….

Quand on en arrive aux behavior keyframes, une chose très importante à comprendre est que le comportement que vous créez à l'intérieur d'un behavior keyframe a une durée de vie limitée: il tournera jusqu'à ce qu'un behavior keyframe soit rencontré et, alors, le comportement dans le premier keyframe sera interrompu et déchargé.

Cet état de fait peut sembler un peu frustrant mais, heureusement quelques boxes existent dans Chorégraphe qui vous permettent de jongler avec les behavior keyframes dans une box timeline: mettre en pause un keyframe ou aller à un keyframe spécifique.

Décrivons ces boxes.

the Stop box
32

La Stop box

La Stop box a une unique entrée. Quand cette box est stimulée dans un behavior keyframe, la timeline est mise en pause. Dans ce cas, la logique séquentielle de la timeline est mise en pause mais la logique évènementielle dans le keyframe à ce point, continu d'être exécutée jusqu'à ce ce qu'une autre timeline box soit stimulée.

the gotoAndStop box
33

La gotoAndStop box

La gotoAndStop box a aussi une unique entrée. Cette box est utilisée dans un behavior keyframe pour sauter directement à un index spécifique (frame number) sur la behavior timeline et, alors, stop la timeline à cet index (voir comment les Stop box fonctionnent).

Vous pouvez voir que ces deux boxes sont encapsulées dans le second niveau de la gotoAndStop box, comme montré dans cette figure:

inside the gotoAndStop box
34

A l'intérieur de la gotoAndStop box

La frame box vous permet de choisir le nombre index (frame number) vers lequel vous voulez sauter.

the gotoAndPlay box
35

La gotoAndPlay box

La gotoAndPlay box est presque similaire à la gotoAndStop box. La difference est que, une fois que la behavior timeline a sauté à l'index que vous avez spécifié, cet index n'est pas arrêté et la timeline continu de s'exécuter.

Pour illuster ceci, prenons un exemple:

1. Drag and drop une Movement box sur le panneau du diagram et connectons les entrées onStart et onStopped respectivement aux entrées input et output du comportement principal.

2. Ouvrez la box et ajoutez une behavior layer à la timeline.

3. Dans la behavior layer, ajouter keyframe1, keyframe40, keyframe75 et keyframe100.

4. Cliquez sur keyframe1 et créez la même box diagram que celle montrée dans la figure:

Flow diagram at keyframe 1
36

Flow diagram à keyframe 1

5. ouvrez la gotoAndPlay box et réglez le frame number à 40.

6. Ouvrez la gotoAndStop box et réglez le frame number à 100.

7. Cliquez sur le keyframe40 et drag and drop une Dance box sur le panneau du diagram. Connectez l'entrée onStart de la Dance box à l'entrée du behavior keyframe40.

8. Cliquez sur le keyframe75 et créez le même box diagram que celui montré dans la figure ci-dessous:

Flow diagram at keyframe 75
37

Flow diagram à keyframe 75

9. Ouvrez la gotoAndStop box et réglez le frame number à 1.

10. Cliquez sur le keyframe100 et drag and drop une FaceLeds box sur le panneau du diagram. Connectez l'entrée onStart de la Dance box à l'entrée du behavior keyframe100 et la sortie onStopped de la Dance box à la sortie du behavior keyframe100.

Ca y est! Le comportement est prêt à être testé.

Maintenant, avant que nous décrivions comment ce comportement fonctionne, concentrons nous sur la Bumper box.

the Bumper box
38

La Bumper box

La Bumper box est une sensor box (capteur). Vous devrez vous rappeler que Nao a quatre bumper sensors, deux à chaque pieds.

Double-cliquez sur la box pour ouvrir son second niveau.

inside the Bumper box
39

A l'intérieur de la Bumper box

Les boxes droites et gauches representent les bumpers droit et gauche.

Quand l'entrée input des Bumper box est stimulée, ces deux boxes sont chargées et attendent un signal pour être stimulées: Elles sont à l'écoute.

L'entrée input des boxes droites et gauches sont connectées à ALMemory (see Inputs and outputs). Ceci signifie que l'entrée input des deux boxes sera stimulée chaque fois que la valeur qui lui est attribuée dans ALMemory change (la valeur est 1 ou 0 dépendant de la position des bumpers: pressés ou non) respectant une période spécifique de rafraichissement.

Basiquement, quand les bumpers droit ou gauche sont stimulés, la boite droite ou gauche détecte un changement de signal venant d'ALMemory (par exemple: 0,0,1,0). Puis, cette box stimule sa sortie onstopped qui est liée à une des deux sorties ponctuelles de la Bumper box.

ALMemory est un module Naoqi qui correspond à la mémoire interne de Nao. Consultez la documentation de Naoqi pour plus d'informations sur ALMemory module.

Maintenant revenons à notre comportement.

-Quand vous cliquez sur Play, l'entrée onStart de la Movement box est stimulée et le behavior keyframe1 est chargé.

Movement box at keyframe1
40

Movement box à keyframe1

-Dans le keyframe1 behavior, la Stop box et la Bumper box sont stimulées. La Stop box donne l'ordre à la timeline de s'arrêter à keyframe1. La logique séquentielle de la timeline est mise en pause mais la logique évènementielle des boxes à keyframe1 est exécutée: Nao attend que l'un de ses deux bumpers soit stimulé.

-A ce point, il y a deux possibilités pour le comportement. Ou le bumper gauche est stimulé ou c'est le droit.

-Disons que l'on pousse le bumper gauche de Nao. La Bumper box stimule sa sortie ponctuelle gauche qui est liée à la gotoAndPlay box.

Les sorties ponctuelles top et bottom de la Bumper box correspondent aux bumpers droit et gauche, respectivement.

the left Bumper is stimulated
41

Le bumper gauche est stimulé

-Nous avons réglé le frame number de la gotoAndPlay box à 40. Ceci signifie que la timeline sautera à l'index 40 et chargera le keyframe40.

at keyframe40 the Dance box is
        stimulated
42

A keyframe40 la Dance box est stimulée

-Dans behavior keyframe40, la Dance box est stimulée: Nao commence à danser.

-Alors, parceque nous avons utilisé une gotoAndPlay box et non une gotoAndStop box pour sauter à index 40, la timeline n'est pas arrêtée et keyframe75 est chargé à la fin de keyframe40.

at keyframe75 the Walk box is
        stimulated
43

A keyframe75 la Walk box est stimulée

-Dans keyframe75, une Walk box est stimulée afin que Nao commence à marcher.

Une Bumper box est stimulée aussi mais, dés que la timeline est mise en pause (pas de Stop box n'a été stimulée), si les bumpers ne sont pas stimulés avant la fin du behavior keyframe75 sur la timeline (25 frames/15 FPS=1,7 secondes), keyframe100 sera chargé et keyframe75 sera interrompu et déchargé: Nao arrêtera de marcher et le Bumper box behavior sera déchargé.

Vous pouvez changer les réglages de FPS en cliquant sur le bouton d'édition à côté du panneau de la timeline. La valeur par défaut de FPS est de 10.

-Au contraire, si les bumpers à keyframe75 sont stimulés avant que keyframe100 soit chargé, deux choses peuvent survenir. Si le bumper gauche est stimulé, le comportement principal sera arrêté (la sortie ponctuelle est connectée à l'entrée de Movement). Si le bumper droit est stimulé, gotoAndStop est stimulé et la timeline reçoit l'ordre de sauter à l'index 1. Le keyframe1 est chargé et la timeline est mise en pause à nouveau.

left or right Bumper is stimulated
44

Le bumper droit ou gauche est stimulé

-Maintenant, disons que les bumpers n'ont pas été stimulés avant la fin de behavior75 sur la timeline. Keyframe100 est maintenant chargé et FaceLeds est stimulé: Nao allume les face LEDs. Alors, l'entrée onStopped de Movement est stimulée: le comportement principal est arrêté.

FaceLED is stimulated at keyframe100
45

FaceLED est stimulé à keyframe100

-Retournons au début de notre comportement à keyframe1 et disons que nous avons cliqué sur le bumper droit de Nao au lieu du gauche.

the right Bumper is stimulated
46

Le Bumper droit est stimulé

-La gotoAndStop box est stimulé et la timeline reçoit l'ordre de sauter à l'index 100 et de se mettre en pause. Behavior keyframe100 est chargé.

Behavior is loaded at keyframe100
47

Behavior est chargé à keyframe100

-Les Face LEDs sont allumées; alors, l'entrée onStopped de Movement est stimulé: le comportement principal est stoppé. Notez que nous aurions pu sauter à l'index 100 avec gotoAndPlay au lieu de gotoAndStop. Ceci n'aurais pas changé le fait que l'entrée onStopped est stimulé à la fin du behavior keyframe100: le comportement principal aurait stoppé dans tous les cas.

Logical boxes

Ce tutoriel décrit un exemple d'utilisation de 2 logical boxes que vous pouvez trouver dans Chorégraphe: Loop and Wait. Les logical boxes sont très utiles quand vous voulez créer des comportements plus complexe. Dans Chorégraphe,vous pouvez trouver deux logical boxes prêtes-à-l'emploi mais vous pouvez créer les votres.

Nous commençons avec la Loop box:

the Loop box
48

La Loop box

Loop a 4 entrées: les 3 entrées usuelles (onStart, onStop et onStopped) et une sortie ponctuelle Number-type (en jaune). Le comportement logique de Loop incremente un compteur interne et stimule sa sortie dépendant de la valeur du compteur comparée au max réglé initialement. Cette boite logique convient quand vous voulez, par exemple, répéter le même comportement pour un nombre déterminé de cycles. Double-cliquez sur la box pour ouvrir son second niveau.

Inside the Loop box
49

A l'intérieur de la Loop box

Vous pouvez voir que deux boxes sont encapsulées dans Loop: une Max box et une autre Loop box (cette box est différente de la principale Loop box behavior du fait que c'est une script box). La Max box vous permet de régler le nombre maximum de fois que la box exécutera la boucle. Quand la Loop box est chargée, ce nombre est transmit à la Loop script box par un lien de type Number. Supposons, par exemple, que Max = 3. Tant que l'entrée onStart de la Loop box sera stimulée durant l'exécution du comportement principal, la Loop script box stimulera sa sortie ponctuelle jaune, mais seulement trois fois.

Examinons la Wait box:

the Wait box
50

La Wait box

La Wait box est une script box avec un second niveau. Vous pouvez noter qu'il y a deux entrées onStart et une sortie onStopped. Comment cette box fonctionne est simple à comprendre: la Wait box attends que ses deux entrées soient stimulées avant de stimuler sa sortie.

Comment utiliser ces deux boxes logiques ensembles?

Exemple: vous voudriez un comportement simple avec Nao hochant de la tête trois fois en dansant avant de commencer à marcher. La façon la plus efficace de créer ce comportement est d'utiliser les deux boxes logiques prêtes-à-l'emploi.

-En premier, prenez une Movement box et créez un mouvement de hochement de tête avec la motion timeline. Référez vous au tutoriel Créez un mouvement depuis le début.

-Drag and drop une Dance box (vous pouvez changer le motion keyframes si vous voulez) et connectez les deux boxes à l'entrée du comportement principal ainsi:

Movement and Dance boxes
51

Movement et Dance boxes

Si vous cliquez sur Play, Nao hochera la tête une fois en dansant.

-Pour faire Nao hocher trois fois en dansant, vous devrez ajouter une Loop box à votre comportement (réglé le compteur interne à 3) et connectez la à votre Movement box ainsi:

Connect Movement and Loop boxes
52

Connectez Movement et Loop boxes

Maintenant, Nao hochera trois fois en dansant. ce n'est pas mal mais nous voulons aussi que Nao commence à marcher après qu'il ait fini de hocher et de danser. C'est assez simple: une Wait box sera utilisée.

-Drag and drop une Wait box sur le diagram et connectez la à Dance and Loop comme montré sur la figure ci-dessous:

Connect Dance and Movement to the Wait
        box
53

Connectez Dance et Movement à la Wait box

La Wait box stimule sa sortie une fois que ses deux entrées sont stimulées.

-Maintenant, ajoutons une Walk box à notre comportement et c'est fait:

Connect Wait and Walk boxes
54

Connectez Wait et Walk boxes

Nao commencera à marcher après qu'il ait fini de hocher et de danser.

Allons de l'avant: testez ce comportement avec votre stimulateur ou votre robot Nao réel!

Modifications simples d'un script de box

Vous devriez commencer à vous imaginer quelles sont les possibilités dans Chorégraphe. Mixer les movement boxes avec des boxes audio et vision sera très facile pour vous.

Toutefois, vous devez commencer à être frustré parceque vous voudriez modifier les script des boxes et les mettre au point.

Heureusement, toutes les boxes dans Chorégraphe ont leur propre script, aussi vous pouvez facilement les éditer et modifier leur script.

Décrivons la logique des script dans Chorégraphe.

Le language de script dans Chorégraphe est Python (d'autres language seront supportés dans le futur). dans la librairie, les boxes sont toutes écrites dans ce language de programmation.

Avant toutes choses, vous avez besoin de savoir que chaque box dans Chorégraphe est un module. Brièvement, un module est comme une aplication, complètement indépendant, il s'exécute indépendament et communique facilement avec les autres modules.

La création d'une Box se fait en plusieurs étapes:

  • Instantiation de la box

  • Enregistrement de la box comme module de tel façon qu'elle puisse être appelée depuis les autres boxes par des liens

  • Initialisation des Boxes

Les deux premières étapes sont automatiques; l'utilisateur n'a pas de contrôle par ses scripts. L'utilisateur a un contrôle total sur la troisième étape. En fait, cette étape exécute quelques parties du code que l'utilisateur à écrit dans le script de sa box.

Maintenant, examinons un script de box.

Drag and drop LEarLeds sur le panneau du diagram et double-cliquons dessus pour ouvrir la fenêtre de script.

the LEarLeds script window
55

La fenêtre de script de LEarLeds

Notez les différents boutons dans la partie supérieur de la fenêtre qui vous permettent de sauver les changements que vous apportez, fermez la fenêtre de script.

LEarLeds est codé en Python. Cette box donne l'ordre aux left ear LEDs de s'allumer (entrée onStart) ou de s'éteindre (entrée onStop) en 1 seconde.

Quand vous écrivez un script, vous devez vous souvenir que vous définissez les méthodes d'un module de classe. Une méthode est une fonction que le programme appel pour exécuter à chaque fois la même action.

Il y a 3 méthodes dans le script de LEarLeds:

  • initialize

  • onStart

  • onStop

Comment les scripts de LEarLeds fonctionnent?

En premier lieu, rappelez vous que vous ne devez jamais modifier les 3 premières lignes d'un script de box car elles sont obligatoires.

La méthode initialize est exécutée en premier, quand la box est chargée.

GeneratedClass.__init__(self) est une fonction qui réinitialise les paramètres de base de la box qui sont commun à toutes les boxes dans Chorégraphe.

self.time et self.ledName sont ce que nous appelons des attributs. Un attribut est une variable qui est attachée à une box.

En Python, vous n'avez pas besoin de créer un proxy pour appeler certain modules Naoqi. Ceci est fait automatiquement. (Cf. documentation Python).

Un proxy est un objet qui vous autorise à vous connecter à un module sur le robot et à exécuter ses “bound methods”. Par exemple, ALMemory, ALMotion etc. sont des modules. ALLeds est le module qui contrôle les LEDs du robot.

Pour voir une liste des modules et des méthodes que vous pouvez utiliser dans Chorégraphe, vous devez entrer l'adresse IP du robot suivie par le numéro de port du robot (habituellement 9559) dans votre browser internet. Pour voir les modules qui sont exécutés par Chorégraphe sur votre ordinateur local, vous devez entrer 127.0.0.1:54010.

self.time = 2.0 signifie que les LEDs prendront 2 secondes pour s'allumer.

self.ledName = "LeftEarLeds" indique que le groupe de LEDs LEarLeds est le groupe qui est stimulé quand l'attribut self.ledName est appelé. La méthode onStart est la méthode qui est exécutée quand l'entrée onStart de la box “LEarLeds” est stimulée.

ALLeds.fade(self.ledName, 1.0, self.time): cette ligne donne l'ordre aux LEarLeds de s'allumer, en une seconde, à la luminosité maximum (1.0 value).

A la fin de la méthode onStart, self.onStopped() stimule la sortie onStopped de la box “LEarLeds”.

La méthode onStop est exécutée quand l'entrée onStop de la box “LEarLeds” est stimulée. La structure de la méthode est très proche de la méthode onStart que nous venons de décrire. La seule différence est qu'un “0” remplace le “1.0” dans la fonction fade. Ceci veux tout simplement dire que lorsque l'entrée onStop est stimulée, les LEarLeds recoivent l'ordre de s'éteindre en une seconde.

Supposons que vous vouliez modifier ce script.

Des petites modifications dans le script de “LEarLeds” ne devraient pas être difficile à faire.

Par exemple, si vous voulez que les LEDs s'allument en 3 secondes au lieu de 2, changez simplement la valeur de l'attribut self.time à “3.0”. Puis sauvez les modifications en cliquant sur le bouton checkmark.

Un autre exemple: si vous voulez que les LEarLeds s'allument à 50% de luminosité, changez simplement la valeur 1.0 dans la fonction fade (dans la méthode onStart) à 0.5.

Maintenant, faisont quelque chose de plus difficile.

Nous voulons modifier le script de la box “LEarLeds” de façon à faire flasher les LEarLeds de Nao cinq fois avant de les éteindre.

Pour le faire, nous avons à modifier la script box ainsi:

Modifying the LEarLeds script
56

Modifions le script de LEarLeds

Vous pouvez voir que nous avons utilisé une fonction “while” dans la méthode pour arriver à nos fins.

Quand l'entrée onStart est stimulée, Nao clignotera 5 fois et éteindra ses LEDs.

Quand l'entrée onStop est stimulée, Nao éteindra ses LEarLeds.

C'est tout pour ce tutoriel. Maintenant, essayez de mmodifier les scripts de box qui sont dans la librairie de Chorégraphe pour créer d'impressionnants comportements!

Création d'un script de box depuis le début et utilisation de boxes Plugin.

Dans Chorégraphe, il est possible d'écrire vos propres boxes et de définir leur entier fonctionnement.

Nous avons déjà vu que la création d'une box est fait en plusieurs étapes:

  • instantiation de la box

  • enregistrement de la box comme module pour qu'elle puisse être appelée depuis d'autres boxes par des liens

  • Initialisation de la box

Les deux premières étapes sont automatiques; l'utilisateur n'a aucun contrôle dessus depuis le script.

>La seconde étape est faites à partir du lien que l'utilisateur a créé.

Ce sur quoi l'utilisateur a un entier contrôle est la troisième étape qui exécute quelques parties de code que l'utilisateur a écrit dans le script. Pendant l'écriture de script, vous devez vous souvenir que vous définissez des méthodes d'un module de classe. Attributs, subscribing sur data ALMemory... les possibilités sont immenses. Quand on initialise une box, la méthode d'initialisation que l'utilisatuer a écrit est appelée.

Une fois que la box est initialisée, la box est prête à recevoir des signaux. Chaquefois qu'une entrée est stimulée, une méthode est appelée dans votre script: "onInput_<name>". C'est ainsi que vous décidez quoi faire lorsqu'une entrée est stimulée.

Quand vous écrivez un script, vous pouvez décider à chaque moment de stimuler une sortie. Le nom de la méthode qui est appelée est <outputName>(paramètre).

Par exemple, si vous avez une sortie onStopped de type "bang", appeler onStopped() fera le boulot! Et si vous avez une sortie faceDetected(string), vous pouvez appeler faceDetected("Robert") pour prévenir que Robert a été détecté.

En Python, le script généré d'une nouvelle box devrais ressembler à ceci:

Basic script box
57

Basic script box

Derrière la méthode d'initialisation, vous avez une méthode associée avec chacune des entrées de la box.

Les 3 premières lignes sont complètement obligatoires, et les modifier conduira à un comportement imprévisible.

Ce que vous devriez modifier est le contenu de la méthode d'initialisation.

cette méthode est appelée quand la box est chargée, aussi il est fortement déconseillé d'avoir du code lourd ici. Signifiant que si l'initialisation d'une box prends trop de temps, le comportement entier sera ralenti. Si vous êtes dans une timeline, vous perdrez même le temps réel...

Aussi qu'est ce que vous pourriez faire dedans? Par exemple, vous pouvez initialiser les attributs (comme les variables, ou les proxies vers d'autres modules). Vous devriez faire tout ce que vous ne voulez faire qu'une fois en fait, parceque cette box ne sera pas déchargée (à moins qu'elle ne soit contenu dans un behavior keyframe qui a une durée de vie limitée).

Vous pouvez aussi voir une méthode "onUnload". Celle ci est appelée chaquefois que la box est déchargée, ce qui peut être causé par un de ces deux évènements:

  • le comportement est stoppé.

  • la box est contenue dans un behavior keyframe et un autre keyframe du même layer est en train d'être chargé (comme lorsque le keyframe parent de la box courante nécessite d'être déchargé).

Ceci vous permet de prévenir les autres modules que votre box va être détruite et peut par conséquent être très utile. Pour l'instant vous pouvez probablement oublier cela, vous n'avez pas besoin d'utiliser cette fonction pour de simples boxes.

Et à propos des méthodes d'inputs? Bien les possibilités sont illimitées. Vous tournez dans des threads séparés, aussi prenez votre temps, faites des calculs lourds, cela n'affectera pas le comportement en exécution... Souvenez vous que vos output(s) ne seront pas stimulés à moins que vous ne le fassiez explicitement. Ce qui veut dire écrire "onStopped" quelque part dans votre code. Aussi si vous utilisez plusieurs scripts de boxes que vous avez écrit, et que vous ne comprenez pas pourquoi le signal ne sort jamais d'une de vos box, la cause ne sera pas dure à trouver: vous avez oublié d'appeler la sortie une fois que vous avez fini l'exécution! oui c'est douloureux, mais de cette façon vous pouvez décider quand vous voulez votre stimulation, ce qui vous autorise à faire de puissantes choses (et aussi de pouvoir utiliser plusieurs sorties à votre guise).

Exemple: vous trouvez les LEDs de votre robot très belles, mais vous aimeriez les allumer. Malheureusement, les plugins de Chorégraphe qui pourraient vous permettre de faire cela (aussi simplement que pour les mouvements) n'existe pas encore. Ainsi vous êtes bloqué par le script... Bien, que devrais je faire? En premier, lire la documentation des ALLeds (disponible bientôt): c'est le module qui permet à l'utilisateur d'allumer et d'éteindre les LEDs. Si vous lisez la documentation, vous trouverez que les méthodes sont plutôt simples. Par exemple, commuter les LEDs du pied gauche nécessite la commande suivante: réglez("LeftFootLeds",r) avec r entre 0 and 1.

Mmm, alors comment faire tourner un petit script pour faire varier l'intensité en fonction du temps:

r = 0

while (r+ @step < 1)

r = r +@step

@leds.set("LeftFootLeds", r)

sleep(0.01)

end

while (r - @step >0)

r = r - @step

@leds.set("LeftFootLeds", r)

sleep(0.01)

end

with @step = 0.02 for instance.

Nous créons maintenant une nouvelle box que nous s'appelerons “LFootLeds2”.

-En premier, Clic-droit sur le panneau du diagram et clic sur “Add a new box”.

-Choisir un nom pour votre box: “LFootLeds2” et écrire une description de l'outil: “Augmente et réduit l'intensité des and LFootLeds en fonction du temps.”

-Editez une image pour illustrer votre box. Vous pouvez choisir une image standard (dans le dossier de Chorégraphe) ou vous pouvez créer une image.

-Cliquez sur OK. Notez que 3 entrées standards sont automatiquement créées dans votre box: onStart input, onStop input et onStopped output. Vous pouvez modifier ces entrées et en créer de nouvelles en éditant la box.

Votre box devrait ressembler à ceci:

the LFootLeds2 box
58

La box LFootLeds2

-Double-cliquez sur la box pour éditer son script. Notez que le script de la box est presque vide.

Vous avez à rédiger le script pour augmenter et diminuer l'intensité dans le temps. Le script “LFootLeds2” devra ressembler à ceci:

Modifying the LFootLeds2 script
59

Modifier le script de LFootLeds2

Ok, vous êtes content, votre box est belle comme tout. Mais comment faire si vous voulez donner à l'utilisateur la possibilité de contrôler self.step par exemple?

Et comme vous êtes une personne sympatique, clairement vous ne voulez pas que l'utilisateur ait à editer votre script. C'est ici que les plugins vont être utiles.

Une box plugin est une box qui offre un interface utilisateur et génère automatiquement un script. Par exemple, la numberEdit box transformera un signal "bang" en un signal portant un nombre (le nombre entré par l'utilisateur). Utilisons là!

-Drag and drop une “numberEdit” plugin box sur votre diagram et changeons son nom en “Step” (Editez la box pour le faire). Notez que le script de cette box est automatiquement généré étant une plugin box (vous ne pouvez pas modifier ce script).

-Editez votre box “LFootLeds2” et ajoutez une autre entrée qui attends un nombre (Number type).

Pour créer une nouvelle entrée de box, editez la box par clic-droit dessus puis sur l'Edit box. puis, choisissez le type d'entrée dans le menu Inputs/Outputs et cliquez sur +: une nouvelle fenêtre Add a new input est affichée. Choisissez le nom, description, type et nature de votre nouvelle entrée.

The Add a new input window
60

Fenêtre d'ajout d'une nouvelle entrée

Votre box devrait ressembler à cela:

the new LFootLeds2 box
61

La nouvelle box LFootLeds2

-Ouvrez le script de la box et rédigez une nouvelle méthode qui correspond à la nouvelle entrée ”onSetStep”:

In the script box
62

Dans la script box

-Connectez la Step box a votre entrée nouvellement créée, et connectez l'entrée du comportement à votre box. Votre diagram devrait ressembler à ceci:

Connecting the boxes in the flow
        diagram
63

Connecter la box dans le flow diagram

Ce n'est pas un bon diagram. Pourquoi? parceque l'entrée du comportement sera stimulée une seul fois, et vous ne savez pas quelle box connectée dessus sera stimulée en premier. Et comme deux boxes sont en série avant que la troisième entrée de LFootLeds2 soit stimulée, il est très probable que son entrée onStart soit stimulée avant que le nombre ne soit utilisé...

Une première option serait de connecter ensembles les entrées de onStart et de nSetStep (troisième entrée) de LFootLeds2 à la sortie Step. Comme ceci:

Another way to connect the boxes
64

Une autre façon de connecter les boxes

Bien, cela ne marchera pas vraiment à cause de l'entrée onStart qui doit être stimulée avant que onSetStep le soit. Toutefois, voulez vous changer le pas chaque fois que vous voulez utiliser cette box? Probablement pas...

Un autre problème est que step est toujours visible au niveau root. Vous voudrez probablement l'encapsuler dans une box privée, et si un utilisateur veux le modifier, il/elle aura a entrer dans votre box.

Faisont d'une pierre deux coups: créons une nouvelle box avec un block diagram dedans (clic-droit sur le panneau du diagram puis cliquez sur le bouton Add a New Box, choisissez “Flow diagram” dans les options offspring de la box). Coupez et collez vos deux boxes dedans, et connectez les comme dans le diagram suivant:

the right way to connect
65

La bonne façon de les connecter

Aussi, pourquoi est-ce la meilleur solution?

En premier, nous utilisons l'entrée onLoad de la box, et par conséquent nous assure que Step stimule l'entrée onSetStep de LFootLeds2 avant que onStart soit stimulée. Pourquoi? Parceque onLoad est stimulée ausitôt que la box est chargée, et par conséquent AVANT que l'entrée du comportement ne soit stimulée. Bien pour être complètement juste, ce n'est pas totalement certain, le signal onLoad pouvant être envoyé avant, mais l'appel est threadé, aussi si vous bouclez dans la step box, ce pourrait être à l'intérieur de la step box avant que l'entrée du comportement ne soit stimulée. Comme nous transmettons juste un nombre c'est hautement improbable. Il est aussi mieux d'utiliser onLoad, de ce que nous connaissons, il sera utilisé une seule fois quand la box sera chargée. Nous évitons des communications inutiles, comme nous voulons juste régler cet incrément(step) une seul fois.

Un autre bon point est que la step box est à l'intérieur d'une autre box, et par conséquent n'est pas visible d'un niveau supérieur, et donc n'encombre pas le niveau root.

Pour finir, jetez juste un coup d'oeil au nouveau script de LFootLeds2, pour voir comment nous avons utilisé la nouvelle entrée:

In the script box
66

Dans la script box

Rien de bien compliqué ici: nous utilisons juste le nombre que nous recevons... Si p n'est pas un nombre (et vous avez fait croire à Chorégraphe que vous lui aviez envoyé un nombre), la box enverra une exception et vous recevrez un avertissement.

Et voilà! Vous avez créé votre première box. Congratulation!

Problèmes

Il y a un bug connu qui arrive très rarement : quand vous cliquez sur play, Chorégraphe peut être complètement gelé. Et si vous regardez dans les API de votre robot, la tâche active sera "ALFrameManager : newBehavior". Malheureusement nous n'avons pas été capable de fixer ce bug. Quoiqu'il arrive, vous avez à redémarer NaoQi et relancer votre comportement à nouveau.

Notez que Chorégraphe sauve toujours un projet dans projects/lastProj.tmp.xar avant de l'envoyer sur le robot. Vous pouvez donc trouver une sauvegarde de votre projet si cela se produit.

Notez que la connection à un NaoQi local est un tant soit peu instable. il fera tourner un NaoQi dans le même process que Chorégraphe, et le redémarre chaque fois que vous cliquerez sur ce bouton à nouveau. Il est fortement déconseillé de le faire plusieurs fois, ou pendant que des tâche s'exécutent. Nous pensons que ce sera fixé dans la prochaine version.


Traduction en Français par zelig-NaoForge le 9 mars 2009 - Copyright © 2008 Aldebaran-robotics.
All rights reserved.