RoboCup 2015
Cahier des charges
Présentation générale du projet
Lors de la compétition de l'Open German, prélude de la Robocup, il faudra mettre en place un système d'autonomisation de production à l'aide de Robotinos (robots mobiles de Festo ayant un système d'exploitation Linux). Comme dans toutes compétitions, le but est de gagner, par conséquent, il faudra faire en sorte de gagner un maximum de points. C'est pourquoi il faut créer un manager à l'aide de ROS, c'est-à-dire un nœud ou ensemble de nœuds permettant de pouvoir recevoir les informations envoyées par les autres nœuds, de les traiter, tout cela afin de donner les ordres que doivent exécuter chaque Robotino. Ce manager devra également être capable d'optimiser le nombre de points à obtenir.
Contexte
La compétition de l'Open German se déroule en quatre phases spécifiques : phase de début-de-jeu, phase d'exploration, phase de production, phase de fin-de-jeu. Le manager aura des tâches spécifiques à remplir suivant les différentes phases. La RefereeBox est un système d'arbitrage auquel il est nécessaire d'envoyer périodiquement des données à tout moment du jeu et qui donne à chaque instant l'état du jeu ainsi que les produits demandés en priorité durant la phase de production.
Objectif du projet
- Assurer un maximum de points suivant les aléas du jeu (panne de machine, produits demandées, rupture de stock d'une matière première, …)
- Assurer la pérennité du projet (chaque année des candidats de Polytech Lille y participent)
Description du projet
Pour le projet, autre le fait de gagner le plus de points possibles, il faudra valider les trois contraintes suivantes :
- Communication avec le nœud de la RefereeBox à tout moment du jeu
- Contrainte de robustesse (il ne faut qu'à un moment ou à un autre il n'y ait un blocage de tous les robots)
- Coopération entre les trois robots
Le manager devra interagir avec les différents nœuds suivants ayant chacun leurs rôles spécifiques :
- RefereeBox Comm : recevoir les données envoyées par la RefereeBox et envoyer des données suivant l'état du jeu à la RefereeBox
- Robots Comm : communiquer aux autres robots les informations concernant ce que chacun font
- Traitement des TAGs : lire les TAG
- Traitement des feux : lire l'état des colonnes de feu
- Pince de préhension : ouvrir et fermer la pince et renvoyer l'état de la pince
- Approche finale : s'adapter au banc de charge ou de décharge de produits
- Génération trajectoire : détermine une trajectoire pour aller au lieu (X,Y)
- Réalisation trajectoire : parcourir la trajectoire
- Localisation : savoir périodiquement (faible période) où se situe le robot
- Détection d'obstacle : détecter les obstacles fixes et mobiles
Choix techniques : matériel et logiciel
- Utilisation de trois robotinos
- Utilisation de ROS (Robot Operating System), c'est un ensemble d'outils informatiques open source permettant de développer des logiciels pour la robotique. Il est disponible sous environnement Linux en version stable. Ce système travaille en utilisant des nœuds qui communiquent entre eux à l'aide de services (requête-réponse) et de topics (fichiers).
- Utilisation de différents langages : C++ ou Python (nœuds)
- Travail sous Linux Ubuntu 12.04 car utilisation de la version HYDRO de ROS
Etapes du projet
- Prise en main de ROS et du C++
- Élaboration de l'algorithme du manager pour la phase d'exploration
- Élaboration de l'algorithme du manager pour la phase de production
- Coopération entre robots
- Répartition des tâches
- Codage du manager
- Tests et corrections
Avancement du Projet
Semaine 1
- Prise en main de ROS
- Réalisation des tutoriels ROS disponibles au lien http://wiki.ros.org/fr/ROS/Tutorials
- Réalisation de différents tutoriels C++
- Connaissance plus aiguë du sujet de l'Open German 2015
Semaine 2
- Réflexions autour de la structure du manager : deux nœuds
- Un nœud exécuteur de tâches
- Un nœud générateur de tâches
- Réflexions sur l'algorithme général du manager concernant la phase d'exploration
- Fonctionnement par zoning pour la répartition des tâches des trois robots
- Réflexion autour d'une alternative de répartition par distances les plus courtes entre machines
- Recherche de solutions pour la phase de production
- Documentation autour de la planification de tâches et la génération de tâche pour une équipe
- Recherche autour de la coopération et de l'allocation de rôles à des robots multi-tâches
- Organisation générale
- Structuration d'un échéancier numérique sous Asana
- Demande d'autorisation pour l'ouverture de la salle C002 auprès de M. Scrive
Semaine 3
Voilà un lien permettant d'accéder au sujet provisoire de la Robocup 2015 : Sujet
- Réflexions au sujet des infos à communiquer au nœud AutresRobotsComm :
- Ce que le robotino fait
- Quelle machine le robotino est en train d'utiliser
- Réflexions au niveau de l'algorithme de la phase de production
- Proposition de le faire sous le principe de "Diviser pour mieux régner" (validé par M. Vincent Coelen)
- Diviser la tâche principale en sous-tâches, les sous-tâches en sous-sous-tâches et les sous-sous-tâches en sous-sous-sous-tâches élémentaires.
- Détermination des tâches à réaliser pour un exemple particulier
- Proposition de le faire sous le principe de "Diviser pour mieux régner" (validé par M. Vincent Coelen)
On souhaite produire, pendant une durée déterminée par la refBox, le produit suivant :
Le produit est composé d’une base bleue, d’un ring rouge, d’un ring vert et d’un cap noir.
Obtenir Base Bleue
->Aller à la Base Station générateur trajectoire exécuteur trajectoire ->Vérifier si machine OK approche finale traitement feux ->Prendre produit RefBoxComm (dire à la Base Station quelle base est souhaitée et à quelle banc le robotino est) approche finale pince (prendre)
Obtenir ring rouge
->Aller à une Ring Station Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm) générateur de trajectoire exécuteur de trajectoire ->Vérifier si machine OK approche finale traitement feux ->Prendre produit RefBoxComm (pour dire quel produit et quel banc de livraison) approche finale pince (déposer) pince (prendre)
Obtenir ring vert
->Aller à une Ring Station Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm) (Du coup la plus proche sera celle où on vient de faire le ring précédent) générateur de trajectoire exécuteur de trajectoire ->Vérifier si machine OK dire à la Ring Station quelle base est souhaitée ( ici, la verte ) approche finale traitement feux ->Prendre produit RefBoxComm (pour dire quel produit et quel banc de livraison) approche finale pince (déposer) pince (prendre)
Finaliser produit
->Aller à une Cap Station Laquelle ? laquelle est inoccupée ? la plus proche ? (RobotsComm) générateur de trajectoire exécuteur de trajectoire ->Vérifier si machine OK dire à la Cap Station quelle cap est souhaité ( ici, le noir ) approche finale traitement feux ->Prendre produit RefBoxComm (pour dire quel banc de livraison) approche finale pince (prendre) ->Déposer à la Delivery Station générateur de trajectoire (vers la Delivery Station) exécuteur de trajectoire approche finale pince (déposer)
- Organisation générale :
- Création de la page Facebook de l'équipe PYRO Team
Semaine 4
- Écriture des sous-tâches à réaliser
- Pseudo-codes de certaines sous-tâches réalisées
- Recherche d'ordonnancement optimisé pour la fabrication du produit
- Recherche d'algorithmes
- Visualisation du problème d'ordonnancement concernant l'exemple précédent (base bleue, ring vert, ring rouge, cap noir)
Ici, on a pris en plus en hypothèse le fait que la Ring Station (RS1) est capable de mettre des rings rouges ou verts et que la RS2 est capable de de mettre des rings bleus et rouges. Afin de mieux appréhender le problème, nous nous sommes attachés à effectuer un tableau récapitulant les tâches à effectuer pour le produit exemple et à réaliser un graphe mettant en avant les contraintes de précédence de chaque tâche.
Tâches | Ressources utilisées | Contraintes de précédence | |
---|---|---|---|
T0 | Ramener à CS base avec cap | Robot 1, 2 ou 3 | Aucune |
T1 | Décapsuler | Cap Station 1 ou 2 | T0 |
T2 | Ramener base supplémentaires à RS | Robot 1, 2 ou 3 | Aucune |
T3 | Chercher base bleue | Robot 1, 2 ou 3 | Aucune |
T4 | Ramener à RS pour ring vert | Robot 1, 2 ou 3 | T7 |
T5 | Ramener à RS pour ring rouge | Robot 1, 2 ou 3 | T8 |
T6 | Ramener à CS pour cap | Robot 1, 2 ou 3 | T9 |
T7 | Ramener Base | Base Station | T3 |
T8 | Ajouter ring vert | Ring Station 1 | T4 |
T9 | Ajouter ring rouge | Ring Station 1 ou 2 | T5 et T2 |
T10 | Ajouter cap | Cap Station 1 ou 2 | T6 et T1 |
T11 | Traiter le produit fini | Delivery Station | T12 |
T12 | Ramener à DS | Robot 1, 2 ou 3 | T10 |
Semaine 5
Durant cette semaine, nous avons réfléchi sur le choix de structures pour nos données :
- Une liste principale de tous la produits demandés par la RefBox à un instant t. Cette liste principale a les caractéristiques suivantes :
- Un Ratio sera calculé pour chaque produit de la manière suivante : avec :
- PointsTotals : Points que peut apporter la production d'un produit de A à Z.
- TempsEstimeDeProduction : Une estimation de la production d'un produit de A à Z.
- On trie cette liste en fonction du Ratio. En effet, plus le Ratio sera grand plus le produit aura une priorité à être produit immédiatement.
- Quand la RefBox demande un produit, une cellule sera ajoutée dans cette liste. Et de même, quand un produit sera terminé, on le supprimera de cette liste.
- Un Ratio sera calculé pour chaque produit de la manière suivante : avec :
- Chaque produit de la liste principale va contenir une liste de tâches correspondantes à la production de ce produit. Cette liste de tâches a les caractéristiques suivantes :
- Chaque cellule correspond à une tâche de la production d'un produit ( Par exemple, ajouter une base ).
- A chaque fois qu'une tâche est réalisée, elle sera supprimée de la liste de tâches. Ce qui veut dire, qu'on va devoir calculé à nouveau le Ratio de la liste principale, donc de trier à nouveau la liste principale.
- Afin de respecter les contraintes de précédence, on considérera que la tâche en tête de la liste de tâches peut être exécutée seulement. C'est à dire, par exemple, qu'on ne peut pas ajouter un Ring si on n'a pas de base.
Semaine 6