Les possibilités de geler, arrêter et bloquer les commandes avec URBI forment un outil très puissant pour contrôler l'exécution du comportement. Par exemple, si les transitions, exprimées avec une commande at sont préfixées par une étiquette, comme ceci:
transition_de_suivi:
at (ball.visible ~ 100ms) {
stop recherche;
speaker = trouvee;
suivi: suis();
};
transition_de_recherche:
at (!ball.visible ~ 100ms) {
stop suivi;
speaker = perdue;
recherche: cherche();
};
Il devient très facile de suspendre temporairement ou de ré-activer une transition de la manière suivante:
freeze transition_de_suivi; ... unfreeze transition_de_suivi;
D'autrepart, il est possible de bloquer l'exécution d'un état, sans pour autant empêcher les transitions vers lui (attendant silencieusement une autre transition qui fera passer le robot à un autre état):
block recherche; ... unblock recherche;
En utilisant freeze, block et stop, il est simple de modifier les comportements et ré-affecter les priorités en direct, ce qui est très pratique en robotique. Les possibilités sont innombrables car ces réglages peuvent être contrôlés par des évenements ou par d'autres programmes tournant en parallèle, ou même par un programme de contrôle à distance, ou encore une session telnet.