Envoyer des commandes URBI

La méthode send est la manière la plus simple d'envoyer une commande au serveur URBI. Elle possède une syntaxe similaire à la fonction printf. Pour envoyer une séquence de commandes sans risque d'avoir un autre thread qui envoi des commandes en même temps, vous pouvez utiliser les méthodes lockSend et unlockSend pour verrouiller puis déverrouiller le buffer (tampon) d'envoi.

int sleeptime = 50;

client->send("motoron;");

client->lockSend(); //send() appelé par d'autres threads sera bloqué
		    //à ce point jusqu'au prochain appel de unlockSend

for (float val=0; val<=1; val+=0.05)
    client->send("neck.val = %f;wait (%d);", val, sleeptime);

client->unlockSend();

Alternativement, la classe UClient hérite d'ostream. Ainsi vous pouvez utiliser l'opérateur <<:

 client << "headPan.val = " <<12 << urbi::comma;

Les constantes 'comma', 'semicolon', 'pipe' et 'parallel' sont définis respectivement pour ',', ';', '|' and '&' dans l'espace de nom urbi.

Une troisième manière possible est d'utiliser la macro URBI, qui utilise la connection par défaut (la première connection créée par votre programme):

 URBI((
   headPan.val = 12 ,
   echo "coucou" | speaker.play("test.wav") & leds.val = 1
   ));
 // Notez l'absence des doubles quotes. Pour délimiter le code URBI
 // les double-parenthèses sont requises
 URBI() << "headPan.val = " << 12 <<  urbi::semicolon;

La fonction urbi::setDefaultClientUClient *cl) peut être utilisée pour changer le client par défaut.