Deux chercheurs du LIP6 (laboratoire d'informatique paris 6 - Jussieu), Jean-Michel Ilié et François Pêcheux (équipes MoVe - CIAN) souhaitent développer des objets intelligents autonomes, au sens où ils auront la capacité de repousser à leur maximum l'intervention humaine. L'objet considéré ici dans ce projet est un robot roulant représentant un véhicule terrestre intelligent sur lequel s'appuiera un acteur humain pour mener à bien ses missions, comme par exemple livrer des médicaments à des pharmacies réparties dans une ville dont on connaît la topologie. Il existe déjà une version de ce robot (voir photo jointe), et le projet proposé consiste à l’améliorer, en restructurant les différentes couches logicielles du robot de manière à ce que le robot soit plus facilement programmable, i.e. que l’on puisse ajouter ou modifier simplement la planification d’actions, au moyen d'apprentissages obtenus à partir de situations concrètes, une capacité d'adaptation permettant de réagir à des situations variées. De manière simplifiée, le robot est composé d’une couche basse contenant capteurs, actionneurs et moteurs ainsi que l’électronique embarquée, et d’une couche haute plus informatique construite autour d’un ordinateur de la taille d’une carte de crédit et fonctionnant sous Linux. Cet ordinateur permet d’exécuter les programmes gérant la couche basse (avec un sur-ensemble de l’OS nommé ROS, Robotic Operating System) et la couche haute écrite en Java. Dans l’état actuel, le robot peut se déplacer, distinguer son environnement au travers de différents dispositifs matériels (caméras, lidar, ...), reconnaître des QRcodes plaqués sur des éléments de l’environnement proche du robot, statiques ou dynamiques. Projet proposé Le projet consiste à implémenter deux modules informatiques « reactive context process » et « action process ». Le premier module permet de reconstruire dynamiquement et en temps-réel le modèle symbolique du monde, de telle manière que celui-ci puisse être aisément utilisé par les couches logicielles basse et haute. Pour la couche logicielle basse, le modèle du monde servirait à gérer les arcs réflexes (obstacle qui apparaît soudainement, qui implique d’arrêter les moteurs). Pour la couche logicielle haute, le modèle du monde servirait à définir ou mettre à jour des stratégies de fonctionnement plus élaborées dans le temps et l’espace. Le deuxième module exploite les informations et notifications proposées par le reactive context process . En fonction des tâches proposées par la couche haute, il définit et ordonnance les actions élémentaires que le robot va successivement faire. Ce module s’assure également de la bonne complétion d’une tâche complexe. Le projet de décompose en trois parties : 1) Formaliser ce modèle du monde, identifier les éléments, les événements 2) Proposer une API nommée « reactive context process » permettant dynamiquement : • D’ajouter des éléments avec des propriétés à ce modèle du monde (avec leur date) • De modifier les propriétés d’éléments existants • De supprimer des éléments obsolètes • D’agréger ces éléments pour en construire d’autres plus complexes (itinéraires globaux à partir d’informations locales) • De vérifier si des actions élémentaires sont terminées ou doivent être abandonnées. Les vérifications produisent des notifications permettant de donner immédiatement ou à court terme des ordres au robot. 3) Proposer une API nommée « action process » permettant dynamiquement de : • Piloter le robot dans un environnement contextuel changeant • Décomposer une tâche de déplacement complexe avec éventuellement des préconditions et des postconditions à satisfaire en actions élémentaires sur le robot. • Vérifier en permanence qu’une tâche complexe a été terminée ou doit être abandonnée • Réagir lorsqu’un événement asynchrone se produit, en exécutant une ou plusieurs tâches complexes en fonction du type de l’événement. Prérequis • 3 personnes maximum • Intérêt pour la robotique, et l’interaction avec du matériel mécanique et électronique • Connaissances en C, C++, Java, Python • Connaissances en Unix et programmation système (process, appel système, réseau, driver de matériel) Résultats attendus • Implémentation des deux APIs • Document de programmation sur ces APIs • Démonstration de cheminement et d’adaptation dynamique au contexte