Table des matières
Désormais, vous êtes capable de lire et de régler des capteurs et des moteurs dans votre robot, exécuter des scripts ou actions complexes et superposer des séquences de mouvements. Cela pourrait suffire pour la plupart des utilisateurs, mais URBI va plus loin en vous proposant l'ensemble des structures algorithmiques disponibles dans les langages de programmation modernes ainsi que de nouvelles adaptées à la robotique.
Le branchement conditionnel et les boucles disponibles avec le C et le C++ sont présents dans URBI : if ... else, for et while. Les exemples suivants illustrent ces constructions (la commande echo que vous trouverez parmi les exemples affiche tout simplement l'expression en tant que message-système).
if réalise un test et exécute la commande associée, à la condition que le test ait réussi:
if (backSensorM > 0) {
appuye = 1;
echo "Capteur du dos appuyé";
};
La dernière commande entre accolades ne nécessite pas d'être conclue par un point-virgule comme dans l'exemple précédent. En effet, les points-virgules sont des séparateurs de commande et non des terminateurs de commande. Vous pouvez conclure par un point-virgule comme en C, mais cela est inutile (cela ajoute une commande vide).
if (distance < 10) echo "Obstacle détecté" else echo "Aucun obstacle"; [167322:notag] *** Aucun obstacle
Remarquez qu'il n'y a pas de point-virgule avant else mais qu'il y en a un (ou tout autre séparateur de commande) après l'accolade finale.
distance et backSensorM sont deux devices: l'un pour le capteur de distance infra-rouge situé dans la tête de l'Aibo et l'autre pour le capteur du dos du milieu.
La construction d'une boucle while est similaire à celle du C:
i=0;
while (i<=2) {
i:echo i;
i++;
};
[151228:i] *** 0
[151228:i] *** 1
[151228:i] *** 2
La construction d'une boucle for est similaire à celle du C:
for (i=0;i<=2;i++) i:echo i; [151228:i] *** 0 [151228:i] *** 1 [151228:i] *** 2
Contrairement au C, URBI possède des constructions temporelles de for: for&, for| et while|. Ces constructions démarreront chaque itération en parallèle (avec &) ou en série (avec |) avec une garantie de contrainte temporelle. Plus de détails dans le document "URBI Language Specification".
Comme nous l'avons mentionné auparavant, il existe également foreach et foreach& pour énumérer les listes:
foreach i in [0,1,2] {
i:echo i;
};
[151228:i] *** 0
[151228:i] *** 1
[151228:i] *** 2
foreach est une exception: même quand il n'y a qu'une seule commande, comme dans l'exemple précédent, vous devez l'encadrer par des accolades.