Le fonctionnement d’Urbi au démarrage est simple :
– démarrer l’engine Urbi
– assurer la connexion avec la brique Mindstorms NXT
– charger les fichiers de configuration
Le fichier principal est "global.u" qui se trouve dans le répertoire data. Faites une copie de ce répertoire avant de commencer vos propres modifications.
Voici la partie minimale d’un bon fichier global.u :
// Here we load NXT driver.
load("nxt.u");
// To load the model of the robot
load("SimpleBot.u");
// To load our own scripts
load("pobot.u");
echo("Loading successfull.");
Il y a trois étapes :
– le driver obligatoire
– le modèle du robot
– les programmes persos
On peut charger plusieurs fichiers différents. Ainsi vous pouvez séparer vos projets en deux fichiers : les fonctions génériques et le programme spécifique que vous voulez charger.
Définir un modèle
Le modèle est tout simplement une déclaration du contenu de votre robot : on définit les noms de variables pour chacun des éléments qui compose le robot Lego NXT qu’on va utiliser.
Ce modèle est important : on ne peut pas faire un modèle générique (ex : réutiliser le Tribot fourni avec Urbi) et ne connecter à la brique que les moteurs et les capteurs qui vous intéressent, car cela provoque des erreurs (le serveur n’obtenant pas les valeurs attendues).
Mais c’est très simple : il suffit de suivre les exemples. Le principe est le suivant : déclarer chacun des éléments selon son type, puis les regrouper en différentes structures qui peuvent en inclure d’autres afin d’avoir des accès directs à tout ou partie du robot.
SimpleBot
Voici le contenu du fichier "SimpleBot.u" que j’ai créé pour préparer les ateliers du vendredi soir : un seul moteur et un seul capteur, mais autant de variables. Cette idée de groupes n’est pas originale, c’est celle qui est fournie avec Urbi.
// le moteur connecté sur la sortie A
// il s'agit d'un servomoteur tel que Urbi pour NXT le propose.
var Global.motA = Servo.new("A");
// tous les moteurs : garder ce groupe permet d'écrire des scripts réutilisables,
// par exemple un "motors.speed = 0;" pour tous les arrêter en même temps.
var Global.motors = Group.new(motA);
// les deux composants internes à la brique : pas besoin de connexion
var Global.beeper = Beeper.new();
var Global.battery = Battery.new();
// le capteur de son, paramétré en mode DBA et connecté sur l'entrée 2
var Global.decibel = SoundSensor.new(2,"DBA");
// comme pour les moteurs, un groupe pour tous les capteurs,
// par exemple pour des fonctions génériques qui feraient "sensors.val;" pour tout afficher
var Global.sensors = Group.new(decibel);
// et finalement, un groupe global pour tout le robot.
// notez qu'un groupe peut contenir d'autres groupes
var Global.hardware = Group.new(beeper, battery, sensors, motors);
Note : tous ces exemples suivent la licence GPL version 2 telle qu’indiquée dans les fichiers Urbi NXT.
A chaque modification, vous devez relancer le serveur.
Vérifiez bien qu’il n’y a pas de délai trop important ou de message d’erreur entre la connexion au NXT et le message de bon chargement : cela indiquerait un possible problème qui vous causera plus tard des soucis (ralentissements, valeurs erronées) donc corrigez-le dès que détecté.