Interface de communication entre robots
Cahier des charges
Présentation générale du projet
La Robocup Logistic League est une compétition internationale de robotique où s'opposent deux équipes,
dans une simulation d'usine de production.
Celles-ci ont pour but de développer des algorithmes pour des Robotinos (Robots Festo d'une dizaine
de kilo équipé de multiples capteurs) afin qu'ils déplacent
les pièces de manière autonome
au sein de l'usine. L'usine et les machines sont partagées par les deux équipes qui ne peuvent
pas communiqué entre elles.
Il y a 3 robots par équipes, et un "serveur" principal qui donne les ordres de production.
Le but des équipes est de produire au maximum,
tout en respectant les ordres imposés.
Usuellement l'équipe utilise le protocole de communication sans fil ssh avec les robotinos, il s'agit,
cette année, d'utiliser une interface "maison" pour regrouper et simplifier les communications.
Contexte
Actuellement, sous ROS, pour démarrer un robot ceux sont une grosse quinzaine de programmes
avec leurs paramètres qui sont lancés un à un.
De plus il est impossible de suivre chaque
programme durant un match.
Cependant il est crucial de pouvoir suivre le comportement des robots,
durant l'épreuve,
afin de pouvoir dénicher les problèmes liés au terrain.
De plus en cas de défaillance il est
nécessaire de pouvoir intervenir rapidement et lancer les programmes adéquats.
Objectifs
Dans ce cadre l'interface doit présenter de manière claire et concise les processus sur chaque robot,
avec éventuellement un traitement (affichage graphique ou autre).
Elle doit aussi simplifier l'accès aux commandes du robots:
programmes, actions, services et paramétrages disponibles avec une précision sur les éléments attendu.
Récupération des éléments du type "rostopic list", "rostopic info" ou "rosmsg show".
Présentation sous forme de fenêtre, simple à comprendre et intuitive.
Cryptage de la communication entre les robots et l'interface.
Flexibilité et ajout de module possible (commande au clavier ou lien avec d'autre outils disponibles).
Description
Choix techniques
Étant donné que le projet tourne sous ROS, j'ai choisi d'utiliser un module réseau déja existant pour ROS: ros_bridge_suite.
Ce package crée un serveur websocket sur le système où il est lancer et convertit les informations ROS en json.
Son homologue pour le traitement web est roslibjs, une bibliothèque javascript qui permet de créé des objets lisibles pour ROS.
Étapes du projet
Calendrier prévisionnel
1ère semaine | 2ème semaine | 3ème semaine | 4ème semaine | 5ème semaine | 6ème semaine | 7ème semaine | 8ème semaine | 9ème semaine | 10ème semaine | 11ème semaine | 12ème semaine | 13ème semaine | 14ème semaine | 15ème semaine | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Proof Of Concept (Basic ROS) | |||||||||||||||
Connexion sécurisée à un robot | |||||||||||||||
Intégration traitement (Robotino) |
Avancement du projet : Page github
Proof Of Concept (Basic ROS)
Le fonctionnement de ROS est basé sur 5 principaux piliers: les nœuds, les topics, les services, les paramètres et les actions.
Il s'agit ici d'utiliser la libraire roslibjs connectée en local avec un web-socket sur ROS pour développer les fondations de l'interface vis à vis des 5 piliers cité précédemment.
L'organisation Robotwebtools fournis au travers de son Github un package open source destiné à ROS: la rosbridge suite, qui permet de créer un web-socket sur un système où tourne ROS qui permet la conversion et le transfert des informations ROS <=> JSON.
Du coté client, ils fournissent la librairie Javascript roslibjs qui permet d'interpréter les informations et formater les données à destination de ROS.
Interface minimale
Une première interface minimale hmtl/js permet de présenter un cadre similaire à un chat avec connexion par ip, choix d'action, fenêtre de retour, et formulaire adapté (interactif).
Une liste déroulante permet de sélectionner le type d'élément concerner par la requête: service, topic, paramètre. En fonction du choix, les éléments disponibles sur le serveur sont récupérer est stockés pour générer une complétion automatique. Le programme est capable à partir de l'objet attendu dans la demande de générer le formulaire qui va avec (formulaire interactif) si il s'agit d'un envoi d'ordre ou de développer l'objet retour quand il s'agit de récupérer des informations.
Interface avancé
Intégration de page de style css pour créer des onglets. Ci-dessous mise en page stylisée avec l'autocomplétion.
Et ci-dessous le formulaire interactif généré par le choix de l'action. Pour arriver à cela des fonctions analysent les objets en provenance de Ros via Roslibjs et parcourt l'arbre de l'objet en question. Pour chaque feuille rencontrée, il génère un input sauf en cas d'exception: pas d'arguments. L'input récupère le type demandé et une autre fonction rempli un objet à partir du formulaire pour transmettre l'information.
Contrôle d'une simulation de robot : turtlesim
Pour les tutoriels Ros, un programme simple avec une tortue permet de s'initier aux bases de Ros. Dans le cadres du projet on l'utilise pour vérifier le fonctionnement du système.
Connexion websocket
Connexion websocket simple
La réalisation d'une connexion websocket se réalise assez facilement dans un réseau local, en n'oubliant pas de passez les adresse ip en exception (vis à vis du proxy) pour le navigateur.
Sources
Architecture rosbridge
http://wiki.ros.org/rosbridge_suite https://github.com/RobotWebTools/rosbridge_suite
Connexion sécurisée
http://www.linux-france.org/prj/edu/archinet/systeme/ch24s03.html