QiMessaging & Javascript

jq4QiMessaging JavaScript

Introduction

Cet article est valable pour les vieilles versions de QiMessaging.

QImessaging propose un pont pour utiliser les services (modules) QiMessaging dans un navigateur web. ceci permet de créer des applications HTML5 pour le robot Pepper.

La librairie a été conçue de manière à fonctionne en asynchrone. La plupart des fonctions retourne un objet différé (Deferred object), comme spécifié par jQuery, mais réimplémenté pour éviter de renvoyer toute la librairie. Socket.io est utilisé pour permettre une communication bidirectionnelle entre le robot et le navigateur. Il est intéressant de se familiariser avec jQuery et Socket.io avant d’aller plus loin.

 

Démarrer

Le client nécessite l’inclusion de QiMessaging qui est hébergée sur le robot

<script src=« /libs/qimessaging/1.0/qimessaging.js »></script>

QiSession

Le lien ne fournit qu’une seule classe: QiSession. Cet objet se connecte au robot et obtient un accès proxy vers les services.

Si la page est hébergée sur le robot, le constructor n’a pas besoin d’argument. Si la page n’est pas hébergée sur le serveur du robot, il est nécessaire de fournir le hostname ou l’adresse IP du robot vers qui se connecter. (Exemple: « 192.168.1.15 » ou « pepper.local » etc …)

var session = new QiSession();

Quand la connection est établie, il existe 2 méthodes pour communiquer: socket() and service().

 

socket()

Cette  fonction retourne l’objet Socket.io sous-jacent. C’est utilisé pour gérer des socket events de bas niveau.  unction will return the underlying Socket.Io object.

session.socket().on('connect', function () {
  console.log('QiSession connected!');
  // now you can start using your QiSession
}).on('disconnect', function () {
  console.log('QiSession disconnected!');
});

 

service()

Vous pouvez utiliser cette fonction pour obtenir un accès proxy via javascript à n’importe quel service, aussi appelé module. Les services sont des fonctions objets fournissant la correspondance vers NAOqi API au moyen de CALLS et de SIGNALS (Calls and Signals).

En cas de succès, cette méthode appelle le retour done() avec un objet correspondant au service demandé. E,n cas d’échec, le rertour fail() est déclenché.

 

session.service("ALTextToSpeech").done(function (tts) {
  // tts is a proxy to the ALTextToSpeech service
}).fail(function (error) {
  console.log("An error occurred:", error);
});

Utiliser les services

 

Calls

Les services calls sont de appels de fonctions Javascript qui retournent des Deferred promises.  Elles sont entièrement asynchrones. Comme exposé précédemment les retour done() et fail() sont activés selon le succès ou l’échec.

tts.getLanguage().done(function (lang) {
  console.log("I speak " + lang);
}).fail(function (error) {
  console.log("An error occurred: " + error);
});

 

Signals

Les Signals sont des Objet Javascript à l’intérieur d’un service qui proposent 2 methodes, connect() and disconnect(),  pour souscrire ou se retirer. La première retourn un id qui doit être utilisé par la seconde pour se désenregistrer.

L’exemple suivant connecte à un signal et, une fois fait, se deconnecte.

var signalLink;
var serviceDirectory;

function onServiceAdded(serviceId, serviceName)
{
  console.log("New service", serviceId, serviceName);
  serviceDirectory.serviceAdded.disconnect(signalLink);
}

session.service("ServiceDirectory").done(function (sd) {
  serviceDirectory = sd;
  serviceDirectory.serviceAdded.connect(onServiceAdded).done(function (link) {
    signalLink = link;
  }).fail(function (error) {
    console.log("An error occurred: " + error);
  });
});

Compatibilité entre Signals etMemory

Les events ALMemory ne peuvent directement être utilisés comme signaux QiMessaging signals. Une étape supplémentaire est nécessaire, où les events ALMemory events  sont convertis en signaux pouvant utiliser ALMemory::subscriber.

session.service("ALMemory").done(function (ALMemory) {
  ALMemory.subscriber("FrontTactilTouched").done(function (subscriber) {
    // subscriber.signal is a signal associated to "FrontTactilTouched"
    subscriber.signal.connect(function (state) {
      console.log(state == 1 ? "You just touched my head!" : "Bye bye!");
    });
  });
});

 

 

Page source de la documentation en Anglais sur le site Softbank

Jquery tutorials: www.w3schools.com/jquery/

Formation Jquery en Français: openclassrooms.com

L’API Jquery: api.jquery.com

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*