On parle d’intelligence en essaim lorsque plusieurs individus sont capables de montrer des comportements de groupe alors même que chaque individu ne voit que ses voisins immédiats. On peut observer de nombreux exemples dans la nature, des comportements des fourmis construisant un nid à une foule d’humains se déplaçant dans une station de metro. Dans chacun de ces cas, des individus avec des comportements simples sont capables de s’auto-organiser pour réaliser des tâches complexes au niveau de la population, sans pour autant que chaque individu soit conscient de la tâche à réaliser.
La robotique en essaim étend ces idées pour dans le cadre de la programmation de groupe de robots autonomes, que ce soit pour reproduire et comprendre les comportements observés dans le monde animal, ou pour concevoir des robots capables de réaliser collectivement des tâches complexes. Ces comportements collectifs reposent sur la communication entre individus proches. Par exemple, un robot identifiera la direction dans laquelle va ses proches voisins pour aller dans la même direction, et ralentira s'il se trouve trop prêt des autres robots.
Dans le cadre de ce projet, on dispose à l'ISIR (tour 65-66) de 10 robots mobiles Thymio-2 avec Raspberry PI équipés de caméra, facile à utiliser et programmable en Python. Pour l'instant, nos robots disposent de capacité de traitement très simple (reconnaître une couleur dans le champ visuel). Le travail a réaliser dans ce projet consiste à trouver et implémenter une solution permettant à un robot d'identifier en temps réel les robots qui se trouve dans son champ de vision. Pour cela on utilisera la librairie OpenCV de traitement d'image qui peut être manipulée en python et pour laquelle de nombreux exemples et didacticiels sont disponibles sur le web.
Les étapes du travail à réaliser sont les suivantes:
- compter le nombre de robots visibles
- identifier les numéros d'identification des robots visibles (le mécanisme pour numéroter les robots est laissé libre. P.ex. une zone d'identification qui montre un code barre, QR-code, etc.)
- pour chaque robot identifié, calculer sa distance relative (sachant la taille de la zone d'identification, il suffira d'estimer la distance en fonction de l'occupation à l'écran)
- pour chaque robot identifié, calculer son orientation ((sachant la taille de la zone à identifier, il suffira de mesurer le rapport entre bords droit et gauche de la zone d'identification)
La solution proposée devra permettre d'utiliser un essaim de robots de 50 à 100 individus, devra être robuste aux conditions d'éclairage (ie. ne pas utiliser la couleur), et devrai pouvoir être utilisé à la volé, c'est à dire sans préparation (ie. on doit pouvoir ajouter un robot et qu'il soit immédiatement identifié par les autres).
En terme d'application test, il faudra implémenter (en utilisant les outils déjà disponibles) un algorithme très simple ou chaque robot envoie un message simple (la chaîne de caractère "bonjour") à tous les robots qu'il voit.
Si le temps le permet, il s’agit ensuite de programmer des comportements collectifs simples de déplacement coordonné (à l’image du déplacement d’un ban de poisson). D’un point de vue scientifique, il s’agit d’implémenter le modèle des « boids » sur les robots. D’un point de vue technique, il s’agit d’écrire et de mettre en place un système d'identification visuel des autres robots (chaque robot à une caméra embarquée qui lui permet de voir d’autres robots — la partie traitement d’image est déjà en partie résolue) permettant de changer de direction en fonction de son voisinage.
Outils utilisés: python, Linux
Intérêts pour les systèmes embarqués souhaités (Raspberry Pi, Linux)