Le regroupement d'objets

Une possibilité importante offerte par URBI est de pouvoir regrouper les objets en hiérarchies. Cela se fait grâce à la commande group: group nomdugroupe { objet1, objet2, ...}, par exemple:

group patteavantgauche {legLF1, legLF2, legLF3};
group pattes {patteavantgauche, pattearrieregauche, patteavantdroite, pattearrieredroite};

Figure 4.1. Une hiérarchie typique de device moteurs

Une hiérarchie typique de device moteurs

Cette fonction de regroupement est associée à la notion de broadcasting, qui est utilisée pour différentes choses. L'une d'entre-elles est l'affectation multi-objets : toute affectation est exécutée pour le groupe et, récursivement, passée aux sous-groupes-enfants. En d'autre termes, en utilisant l'exemple précédent, la commande legLF.val = 0 règlera la valeur de legLF1.val, legLF2.val et legLF3.val à zéro (notez que les alias fonctionnent également si vous le souhaitez).

group ab {a,b};
ab.n = 4;
a:a.n, b:b.n,
[167322:a] 4.000000
[167322:b] 4.000000

Pour tout robot supporté, il y aura une hiérarchie de regroupement d'objets disponible au départ. Les commandes établissant cette hiérarchie se trouve dans le fichier URBI.INI ou le fichier std.u.

Par exemple, pour Aibo, il y a un groupe de l'ensemble des moteurs et un groupe de l'ensemble des lumières. Vous pouvez ainsi régler toutes les lumières à une valeur aléatoire avec la commande suivante:

leds = random(2);

Pour s'amuser, vous pouvez tenter: fun: loop leds = random(2), et admirer le résultat.

Il reste plusieurs choses à dire au sujet des groupes et du broadcasting, qui est une fonction très puissante d'URBI. Nous reviendrons sur le sujet dans le chapitre Les Objets avec URBI.