Introduction‎ > ‎

Protocole de communication avec les robots

Les échanges avec les robots (simulateurs ou robots réels) se font par le biais de messages 0MQ avec un serveur central se chargeant de les forwarder à qui de droit.

Le premier type de message envoyable à un robot est une commande. Chaque commande envoyée génère la réception d'un message de retour, un statut, qui indique soit un message d'erreur (224 caractères max), soit 'OK' si tout va bien.

Les envois de commande sont tous au format JSON, selon le format suivant :

 
{ "command" : "nom_de_la_commande",
    "target" : "identification_du_robot",
    arguments éventuels… }

  • Le nom de la commande ainsi que les arguments sont spécifiés dans la table ci-dessous
  • l'identification de votre robot est compose de vos initiales, prénom puis nom, en majuscules.
    Exemple : le robot de Nicolas Feignon a comme identifiant "NF"

Chaque commande donne lieu à une réponse au format JSON également, de deux types possibles :
  • { "status"' : "OK", "sensors" : [c1, c2, c3, c4, c5] } si la commande s'est terminée correctement.
    La réponse spécifie aussi l'état des capteurs en prime, c1 étant le capteur le plus à gauche, c5 le plus à droite quand on regarde le robot du dessus, capteurs vers le devant.
  • ou { "status" : "ERROR", "message" : "…" } en cas d'erreur

Que ce soit dans la commande ou la réponse, des champs supplémentaires peuvent être inclus et seront ignorés. Par exemple, le serveur central se chargeant de relayer les commandes aux robots ajouteront un champ "target" si cela est possible lorsqu'ils signaleront une erreur.

Commandes autorisées

 Commande
Argument(s)
Description
Exemple
 reset
 -
Indique que le robot a été replacé sur son sommet de départ et orienté vers le nord.
Pour indiquer que le robot de Ibrahim Diallo a été placé sur le sommet ID qui est son point de départ et a été orienté face au nord, on enverra :

{ "command" : "reset",
  "target": "ID" }
movehint
Dit au robot d'avancer jusqu'au prochain sommet.

hint est un chiffre optionnel représentant la distance supposée à parcourir (en millimètres), permettant au robot d'optimiser sa courbe de vitesse.

La réponse est envoyée une fois que le robot s'est arrêté, soit parce qu'il est à destination, soit parce qu'il est en situation d'erreur.
Pour dire au robot d'Alice Caron d'avancer jusqu'au prochain sommet, qui devrait se situer environ 20cm plus loin, on enverra :

 { "command" : "move",
  "target" : "AC",
  "hint" : 200 }

turndirectionDit au robot de tourner de 90° à gauche, 90° à droite ou 180°.

direction, argument obligatoire, est une des trois lettres suivantes : L (left), R (right), U (U-turn)

La réponse est envoyée une fois que le robot s'est arrêté, soit parce qu'il a tourné, soit parce qu'il est en situation d'erreur.
Pour dire au robot d'Hoan Pham de tourner de 90° à droite, on enverra :

{ "command" : "turn",
  "target" : "HP",
  "direction" : "L" }
display
line1
line2
Dit au robot d'afficher un message sur son afficheur LCD (composé de deux lignes de 8 caractères).

Tout caractère en trop sera ignoré. Toute ligne incomplète sera complétée par des espaces.

La réponse est envoyée une fois le message affiché.
Pour dire au robot de Benjamin Groeneveld d'afficher
Robot BG
Ready!
on enverra :

{ "command" : "display",
  "target" : "BG",
  "line1" : "Robot BG",
  "line2" : "
Ready! " }
buzznotes
Dit au robot de jouer la série de notes spécifiées.

notes est une liste de tuple (fréquence, durée).
La fréquence est exprimée en Hz, la durée en ms.

La réponse est envoyée immédiatement.
Pour dire au robot de Mouhcine Mbarki de jouer un LA 440Hz pendant une demi-seconde, puis le LA à l'octave au dessus pendant une seconde, on enverra :

{ "command" : "buzz",
  "target" : "MM",
  "notes" :
[[440, 500],
             [880, 1000]]
}
sensors
-
Demande l'état des capteurs.

Cette commande ne spécifie pas d'argument.
Pour demander l'état des capteurs du robot d'Alice Caron, on enverra :

{"command" : "sensors",
 
"target"  : "AC" }