Tutoriel, apprendre à manipuler la mémoire avec python et chorégraphe

Le principe de ce tutoriel est d’expliquer simplement comment on peut passer une variable dans la mémoire du robot pepper via le proxy .

Le principe de cette opération consiste à appeler NAOQi depuis le proxy, de charger le module  ALMemory, puis d’y injecter le nom de la variable suivi de sa valeur. Un string, un integer ou autre peuvent être stockés.

Voici la marche à suivre avec Chorégraphe (exemple avec le robot virtuel)

Etape 1 : Choisir une boite text-edit pour définir la string à partir de laquelle on va jouer. On pourrait tout aussi bien prendre une boite qui sort un string (reconnaissance vocale, choix, fonction de manipulation de string…).  Nous allons définir la valeur : « Bonjour c’est moi » comme contenu de la string.

jeumemoire1-textedit

Vérifiez que la case de sortie ‘OnStop’  de la boite est bleue. Le couleur bleue indique que c’est du texte qui va sortir.

jeumemoire2-casebleue

Etape 2 : créer une boite Python en cliquant bouton droit de souris, curseur sur la plage de travail de Chorégraphe.

jeumemoire3-creer-boite_python

Créez un input supplémentaire ‘input’ que nous allons qualifier en OnStart. Nous allons le typer TYPE STRING et NATURE ONSTART

jeumemoire4-creer-input-definirletype

La validation de la boite laisse apparaître un pictogramme de boite avec une nouvelle entrée string à carré bleuté qui indique qu’on peut lui envoyer une valeur textuelle.

jeumemoire5-creer-inputsupplementaire

jeumemoire6-creer-inputsupplementaire-resultat

Etape 3 : double cliquez sur la boite python créée pour ouvrir l’éditeur python

Allez dans la fonction def onInput_input(self, p):

Copier le code :

memProxy = ALProxy(« ALMemory »)

memProxy.insertData(« myValeur », p)

self.onStopped() #activate the output of the box

jeumemoire7-ouverture-editeur

Explication de ces 3 lignes

  • La ligne 1 charge le module ALMemory
  • La ligne 2 appelle la fonction insertData avec en premier le nom de la variable, en second sa valeur. Le nom de ma variable mémoire sera myValeur
  • La 3ieme ligne déclenche le onStop pour sortir de la box

Etape 4 : création d’une boite python pour récupérer la valeur de la mémoire de Pepper et la reprendre pour la retravailler dans le script.

jeumemoire8-creer-boite-controle-recupmemoire

Comme pour la création de la première boite, cliquez droite, créez une boite python. Changer le type de sortie OnStopped et passez le de BANG à STRING. La petite case de sortie apparaît bleue confirmant que le bon format de sortie est choisi.

jeumemoire9-creer-boite-controle-recupmemoire-onstopstring

Valider sans rajouter de input particulier (puisqu’on va directement aller piocher dans la mémoire du robot. Dans ce tutoriel, on aurait pu faire la même chose en passant la variable de box à box, sans passer par la mémoire du robot, avec, au final le même résultat. Mais nous verrons dans un autre tutoriel que tout ca peut interagir avec des événements tablette Javascript, par exemple. Et là, il faut passer par la mémoire du robot).

Double cliquer gauche pour ouvrir la boite. Positionnez vous sur la fonction onInput_onStart(self) et copie le code suivant :

        memProxy = ALProxy(« ALMemory »)   

        val = memProxy.getData(« myValeur »)

        self.onStopped(val) #activate the output of the box  

jeumemoire10-creer-boite-controle-recupmemoire-codepython

Explication du code 3 lignes :

  • Ligne 1 : appel du module ALMemory comme avant.
  • Ligne 2 : création d’une variable appelée VAL et appel de la fonction getData de ALMemory pour aller récupérer la valeur de myValeur dans la mémoire pour transférer celle-ci à la variable val .
  • Ligne 3 : on a fini, on active onStopped en y ajoutant le paramètre (val). Ceci a pour effet de pousser la valeur de val (c’est-à-dire la valeur de myValeur) à la sortie de la boite python.

Etape 5 : ajouter une boite SayText pour vérifier que la valeur a bien été reçue

Etape6 : créez le script Chorégraphe en liant les différents modules

 jeumemoire11-conception du script

jeumemoire12-verification 

Le robot devrait dire le contenu de la variable