Chapitre 3. Premiers pas

Table des matières

Affecter et lire une valeur associée à un moteur
Régler la vitesse, la durée ou la gestion sinusoïdale des mouvements
A la découverte des variables
Structure générale des variables
Les valeurs d'un device et l'alias .val
Créer une variable globale
Les expressions
Les listes
Exécuter des commandes en parallèle
Affectations conflictuelles
Variables et propriétés utiles des devices
Quelques commandes utiles

Dans ce qui suit, nous allons étudier des exemples prévus pour l'Aibo, mais vous pouvez les transposer pour votre propre robot. Chaque partie du robot (capteurs, moteurs, caméra, ...) est un objet et possède un nom. Par exemple, en ce qui concerne l'Aibo, il existe deux moteurs dans sa tête qu'URBI nomme headPan et headTilt. L'objet associé à la caméra est appelé camera. Par la suite, nous emploierons le terme device pour désigner un objet qui gère une partie matérielle du robot. Ainsi nous parlerons du camera device, des motor devices, etc.

Vous trouverez la liste des devices pour votre robot en consultant sa documentation associée sur (http://www.urbiforge.com/doc), ou simplement en tapant la commande group objects;.

Affecter et lire une valeur associée à un moteur

Nous allons utiliser les moteurs dans ce qui suit, donc, avant toute chose, nous les mettons en route :

motors on;

motors off est bien sûr également disponible, comme normalement n'importe quel device ou objet avec nom_du_device on/off. Commençons par déplacer le moteur HeadPan à 30 degrés:

headPan = 30;

Maintenant, demandons quelle est la valeur du device HeadPan:

headPan;
[139464:notag] 30.102466

Le serveur répond avec un message (écrit ici en italique pour le distinguer des commandes) précédé d'une marque temporelle (timestamp) et d'une étiquette (tag) entre crochets. Ici la commande n'a été associée à aucune étiquette, par conséquent le terme notag est utilisé par défaut. Il est très simple d'associer une étiquette à une commande en URBI. Il suffit de précéder la commande d'un mot suivi du symbole deux-points (:):

monetiquette:headPan;
[139464:monetiquette] 30.102466

Le message possède maintenant l'étiquette monetiquette. Cela va s'avérer indispensable lorsqu'il s'agira de déterminer qui envoie quoi dans un contexte de commandes s'exécutant en parallèle, ou pour arrêter une commande en cours d'exécution en tâche de fond.

Vous pouvez essayer d'agir ainsi sur différents moteurs de l'Aibo tels legRF1 ou tailTilt, ou bien vous amuser avec les lumières (leds) telles ledF1 ou ledBMC, ou bien encore lire les valeurs de capteurs comme le détecteur de distance distanceNear ou l'accéléromètre avec accelX, accelY et accelZ. La syntaxe est toujours la même: device = value;.

En réalité device = value est compris par URBI comme device.val = value; qui affecte le paramètre val du device à value. Mais, afin de simplifier encore les choses pour les débutants, tous les devices d'Aibo ont un alias construit de la façon suivante:

alias headPan headPan.val

Du coup, vous n'avez pas à vous préoccupper d'ajouter le paramètre val pour les travaux basiques sur les moteurs. Il est toutefois possible de retirer ces alias (définis dans le fichier URBI.INI) avec la commande unalias.