Contrôler Pepper avec Javascript

Cet article court explique comment utiliser Javascript pour piloter PEPPER.

JavaScript

Il est en effet possible de contrôler pepper depuis un navigateur web. Depuis la tablette, il est envisageable de parler au robot, de le faire parler, de la faire avancer ou reculer, de prendre une photos, de récupérer des données pour les envoyer à une base de données. Il est aussi possible, à distance, via une tablette ou un smartphone d’interagir avec le robot.

Comment est il possible de contrôler Pepper par Javascript ?

Il est possible de communiquer avec NAOqi via la librairie  qimessaging.js  appelée depuis les pages HTML hébergées sur la tablette. qimessaging.js envoie des message de l’environnement indépendant de la tablette vers le système d’exploitation du robot Pepper. L’intégration de QImessaging se fait par ajout assez classique d’une balise Javascript dans le code source de la page web. 

 <Script src = "/libs/qimessaging/1.0/qimessaging.js"> </ script>

En fait, on peut aussi utiliser  qimessaging.js depuis un autre serveur WEB indépendant de la tablette. C’est aussi un moyen de déporter la ressource de travail sur un ordinateur ou un serveur exterieur, un smartphone …

En pratique, comment faire

Il convient de prendre les sources qimessaging sur github.  De les décompresser et de les placer dans la structure de sous répertoires suivante

 pepper /
   ├── index.html
   ├── js /
   │ └── pepper.js
   └── libs /
        └── qimessaging /
               └── 1.0 /
                    ├── qimessaging.js
                    ├── socket.io.min.js
                    └── jquery.min.js

 

De créer le fichier index.html suivant

 <! DOCTYPE html>
 <html lang = "fr">
 <head>
     <meta charset = "UTF-8 " />
     JavaScript sample </ title> of the <title> Pepper
     <script src = "libs/qimessaging/1.0/jquery.min.js"> </ script>
     <script src = "libs/qimessaging/1.0/qimessaging.js"> </ script>
     <script src = "js/pepper.js"> </ script>
 </ head>
 <body>
     <input type = "text" id = "ip"> </ input>
     <button type = "button" id = "connect-btn"> connection </ button>
     <button type = "button" id = "test-btn"> test </ button>
 </ body>
 </ html>

De créer le fichier pepper.js suivant

 $ (Function () {
     var qis, ip;

     // Connect button click event
     $ ( '# Connect-btn' ). On ( 'click', function () {
         // Input IP acquisition
         . ip = $ ( '#ip' ) val ();
         // NAOqi Session generation
         qis = new QiSession (ip);
         // Connection
         qis. socket ()
         . On ( 'connect', function () {
             // Connection success
             . console log ( '[CONNECTED] ');
         })
         . On ( 'disconnect', function () {
             // Disconnection
             . console log ( '[DISCONNECTED] ');
         })
         . On ( 'error', function () {
             // Connection error
             . console log ( '[CONNECTION ERROR ]');
         });
     });

     // Test button click event
     $ ( '# Test-btn' ). On ( 'click', function () {
         // TODO: Write a check the operation of the code here
         . console log ( '[TEST] ');
     });
 });

 

Ouvrir le fichier index.html par son URL de type http//ADRESSE_IP/index.html  (presser le bouton thorax de Pepper pour avoir l’adresse ip) dans un navigateur web avec Javascript activé, rentrer l’IP du robot dans le champ de formulaire. Cette opération assure une communication des plus basiques entre JS et le NAOqi.

Comment faire des appels aux fonctions de l’API NAOqi

L’appel aux fonctions NAOqi via javascript qimessaging est assez standardisé. Pour simplifier, on fait appel à qis.service , puis le nom du module, puis le nom de la fonction. Voir le code ci-après.

sample01.js
 qis. service ( '<module name>'). done (function ( ins) {
     // TODO: write code that uses the module here
 });

 

Voici un code exemple pour faire parler pepper depuis un code .js

sample02.js
 qis. service ( 'ALTextToSpeech') . done (function (tts) {
     . tts say ( 'Bonjour, Je suis pepper et je perle depuis Javascript');
 });

 

L’implémentation dans pepper.js donne le code suivant

pepper.js
 $ (Function () {
     var qis, ip, als = { };

     // Connect button click event
     $ ( '# Connect-btn' ). On ( 'click', function () {
         // Input IP acquisition
         . ip = $ ( '#ip' ) val ();
         // NAOqi Session generation
         qis = new QiSession (ip);
         // Connection
         qis. socket ()
         . On ( 'connect', function () {
             // Connection success
             . console log ( '[CONNECTED] ');
             // Use ALTextToSpeech
             qis. service ( 'ALTextToSpeech') . done (function (ins) {
                 . als alTextToSpeech = ins;
             });
         })
         . On ( 'disconnect', function () {
             // Disconnection
             . console log ( '[DISCONNECTED] ');
         })
         . On ( 'error', function () {
             // Connection error
             . console log ( '[CONNECTION ERROR ]');
         });
     });

     // Test button click event
     $ ( '# Test-btn' ). On ( 'click', function () {
         // To speak to Pepper
         . console log ( '[TEST] ');
         .. if (. als alTextToSpeech) als alTextToSpeech say ( ' Bonjour, je suis pepper!');
     });
 });

 

Gérer les événements depuis javascript

Il existe une multitude de capteurs dans Pepper. NAOQi remonte des événements au travers des valeurs obtenues par ses capteurs. Il y a, par exemple, des capteurs qui vont lancer un événement quand un visage est détecté ou reconnue, quand on touche la tête ou la main du robot, quand il bute sur un bumper … Ces événements sont gérables depuis Javascript avec la possibilité de développer du code piloté par un événement déclenché par un capteur. ALMemory permet de contrôler les événements. Le code suivant détecte une pression sur le dos de la main gauche de Pepper.

sample03.js

 qis. service ( 'ALMemory') . done (function (alMemory) {
     alMemory. subscriber ( 'HandLeftBackTouched') . done (function (subscriber) {
         subscriber. signal. connect (function ( val) {
             It will be called when the // event occurs
             . console log ( '[EVENT] HandLeftBackTouched:' + val);
         });
     });
 });

L’insertion et l’utilisation de modules avec qimessaging en Javascript

Il est possible d’utiliser plusieurs modules NAOQi avec les methodes Javascript. Voir la documentation Aldebaran à ce propos.

Liste de modules NAOQI pour javascript

Module name function You could use methods
ALMemory NAOqi is key, the internal state with a combination of value and memory management. With ALMemory you will be able to access to their values. insertData
It registered a value in the memory
getData
Get the value of a memory
raiseEvent
Ignite the event
ALBehaviorManager Do the starting and stopping of applications installed on the Pepper (it is called Behavior). stopAllBehaviors
Exit all the Behavior of running
runBehavior
To start the Behavior of the specified ID
ALAutonomousLife Pepper has a mode of operation called auto Roh trout life, by default, has become a solitary mode. ALAutonomousLife controls this mode. getState
To get the current mode of
setState
To set the mode
ALTabletService You control the tablet, which is mounted on the Pepper. showWebview
To start the browser
enableWifi
Enable wifi tablet
loadUrl
Open the specified URL
showImage
To view the image
showInputDialog
Display of the input field with dialog
hideWebview
Close the browser
ALMotion Pepper or to take a pause, the other to control the physical movement and or move, or you can switch to sleep mode. rest
To sleep mode
wakeUp
To return from sleep mode
robotIsWakeUp
Returns true if the place
moveTo
Carry out the movement and rotation
setAngles
Moving the joint
ALAnimatedSpeech Let speak while accompanied by gestures. say
Speak with gestures
ALAudioDevice Make the settings for the voice. getOutputVolume
Get the size of voice
setOutputVolume
To set the size of the voice
ALSpeechRecognition Make a simple speech recognition. React to pre-registered vocabulary. setVocabulary
Set to recognize vocabulary
subscribe
Start listening
unsubscribe
Listening stop
ALTextToSpeech Let speak. say
To speak
ALBattery It gets the state of the built-in battery. getBatteryCharge
To get the remaining battery capacity