IMA4 2018/2019 P38

De Wiki de Projets IMA



Présentation générale : Interface Graphique Robotino 2 Upgradé

Etudiants : François BRASSART & Jérome HAON

Encadrants : Vincent COELEN & Thomas DANEL

Description

Lors de notre 2ème année de PEIP, nous avons eu l'occasion d'utiliser des Robotinos lors d'un Bureau d'études afin de découvrir la spécialité IMA. Les Robotinos sont des robots mobiles produits par Festo, à entrainement omnidirectionnel ce qui leur permet de ce déplacer dans toutes les directions et de tourner sur eux-mêmes. Ils sont dotés de différents capteurs (infrarouges, optiques, inductifs...) ainsi que d'une Webcam et d'un gyroscope. Ils peuvent être contrôlés et programmés sur un PC via une connexion Wi-Fi ou directement grâce à l'interface Homme-Machine (IHM) intégrée.

Nous avons constaté durant ce bureau d'étude que les Robotinos, utilisés depuis une dizaine d'années en salle de TP commencaient à vieillir. L'objectif de notre projet est moderniser ces robots afin de les remettre au gout du jour. Les Robotinos bénéficieront d'un nouvel ordinateur embarqué, d'un nouveau logiciel, de nouvelles batteries et d'un écran tactile 7 pouces.

Objectifs

La modernisation des Robotinos à déja été commencée avant le début de notre projet. Les nouveaux composants ont déja été choisis et l'installation est en cours. Le but de notre projet est de concevoir la nouvelle interface Homme-Machine. Il s'agira d'une interface graphique directement accessible via l'écran tactile, programmée grâce au WebTool Kit qui permettra entre autre de :

  • Configurer le Robotino au réseau : pouvoir modifier facilement la configuration réseau du robot (interface filaire ou choix d'un réseau sans fil).
  • Afficher l’état et les données des différents capteurs (camera, laser, sharps, bumper) afin de faciliter la programmation et le débogage des programmes.
  • Lancer des programmes de démonstration que nous aurons préalablement programmé.

Cette interface graphique devra évidemment être fonctionnelle et agréable à utiliser.

Analyse du projet

Positionnement par rapport à l'existant

Les Robotinos utilisés depuis 10 ans en salle de TP sont des Robotinos de génération 2. Il existe actuellement des Robotinos de génération 3. Nos 2 concurrents sont donc le Robotino 2 et le Robotino 3.

Notre Robotino "amélioré" sera équipé d'un ordinateur embarqué Intel NUC, avec l'OS Ubuntu 18.04. Il disposera d'une IHM intégrée notamment grâce à un écran tactile 7 pouces que nous allons créer.

Analyse du premier concurrent : Robotino 2

Le Robotino 2 est équipé d'un ordinateur embarqué AMD Geode, avec l'OS Ubuntu 9.04.

Il dispose également d'une IHM sur son chassis composé d'un petit écran et de plusieurs boutons. Elle permet de  :

  • Selectionner la langue,
  • Afficher l'état des batteries
  • Sélectionner les adresses du réseau
  • Sélectionner des programmes de démonstrations pré-enregistrés.
Configuration Hardware Robotino 2
IHM Robotino 2

Analyse du second concurrent : Robotino 3

Le Robotino 3 est équipé d'un ordinateur embarqué Intel Core i5 ou Intel Atom, avec l'OS Ubuntu 12.04.

Il ne dispose pas d'IHM intégrée, il doit être contrôlé à distance par un PC.

Configuration Hardware Robotino 3
















Scénario d'usage du produit ou du concept envisagé

Samedi 2 février 2019, Journée Portes Ouvertes à Polytech Lille.

Pierre, étudiant en IMA est chargé de faire la démonstration de l'utilisation des Robotinos sur le terrain de Hockey/Football de la salle C305. Dès que tous les futurs étudiants et leur parents sont rentrés dans la salle, il n'a qu'à choisir en cliquant sur l'écran tactile d'un Robotino le programme qu'il désire dans l'onglet "programme". Il peut ainsi commencer sa présentation pendant que le robot suivra une ligne, contournera un obstacle ou fera demi-tour quand il rencontrera un mur.


Vendredi 25 Janvier 2019, Bureau d'études IMA

Léna et Clément, étudiants en PEIP2, ont choisi le bureau d'études IMA afin de découvrir cette spécialité et finaliser leur orientation. Il consiste en la commande d'un Robotino. La première mission est de le faire suivre une ligne. Léna et Clément ont beaucoup de mal à comprendre le fonctionnement de ce Robot. Clément à mis des sur-chaussures pour pouvoir marcher sur le terrain pendant que Lina commande manuellement le robot depuis le PC. En cliquant sur l'onglet "états des capteurs", Clément peut directement voir sur l'écran du robot l'état des capteurs, et ainsi comprendre leur fonctionnement en fonction de la position du robot et de son environnement.

Réponse à la question difficile

Question : Positionnement de Web Tool Kit WT par rapport à d’autres systèmes (ROS par exemple) mériterait d’être explicité. De même la difficulté (ou pas) de prise en main de Web Tool Kit WT n’est pas abordée.

Réponse :

  • Robot Operating System (ROS), est un ensemble d'outils informatiques open source permettant de développer des logiciels pour la robotique. Il s'agit d'un méta-système d'exploitation qui peut fonctionner sur un ou plusieurs ordinateurs et qui fournit plusieurs fonctionnalités : abstraction du matériel, contrôle des périphériques de bas niveau, mise en œuvre de fonctionnalités couramment utilisées, transmission de messages entre les processus et gestions des packages installés.
  • Un Web Toolkit est une interface web qui est met à disposition des fonctions pour le contrôle, la configuration et la maintenance du système de robot. WT est une bibliothèque d'interface graphique Web en C ++.

Notre objectif étant de concevoir une interface graphique sur l'écran tactile des Robotinos, WT semble plus adapté que ROS, qui est principalement axé sur la programmation des robots. De plus, connaissant déjà très bien le langage C, il nous parait plus réaliste d'utiliser un Web Toolkit.

Préparation du projet

Cahier des charges

Nous devrons répondre aux différents besoins des différents utilisateur. D'abord, l'interface graphique devra permettre de configurer le Robotino au réseau. En effet, différents modes de configuration du robot sont possibles : filaires ou réseau sans fil. Il faudra avoir le choix entre ses 2 modes et pouvoir régler les paramètres. Ensuite, pour faciliter la programmation, l'interface pourra afficher les états et les données des différents capteurs. Enfin, une interface de lancement des programmes de démonstration que nous aurons préalablement programmé devra être programmée. Cette interface graphique devra évidemment être fonctionnelle et agréable à utiliser.

Ce cahier des charges est susceptible d'évoluer en fonction de l'avancée de notre projet. En effet, nous pouvons envisager d'ajouter des fonctionnalités à notre interface graphique.

Choix techniques : matériel et logiciel

Comme indiqué dans la réponse à la question difficile, nous avons choisi d'utiliser le Web Toolkit WT. Les choix matériels ont déjà été réalisés par nos encadrants :

  • PC embarqué INTEL NUC,
  • écran tactile 7 pouces,
  • le choix des nouvelles batteries est en cours de réflexion.

Liste des tâches à effectuer

La liste des tâches à effectuer est pour le moment floue, nous allons programmer une rencontre avec nos encadrants pour les préciser. Nous estimons qu'il nous faudra d'abord apprendre à connaitre les nouveaux composants (mais également les anciens), puis apprivoiser le Web Toolkit pour finalement créer l'interface graphique finale.

Calendrier prévisionnel

La première étape de notre projet est une montée en connaissance sur WebToolkit (donc c++) et sur l'API2 du Robotino. -> deadline fin janvier.

Ensuite, nous allons réaliser l'interface en elle même grace a WebToolKit -> deadline mi-mars.

Enfin, utilisation de l'API2 pour récuperer les données de différents capteurs afin de les afficher sur l'interface développée precedemment -> deadline fin avril.

Pour terminer, nous réaliserons différents programmes de démonstrations utilisant notamment des nouveaux capteurs ainsi que ceux déja existant -> deadline mi mai (fin du projet).

Réalisation du Projet

Feuille d'heures

Tâche Prélude Heures S1 Heures S2 Heures S3 Heures S4 Heures S5 Heures S6 Heures S7 Heures S8 Heures S9 Heures S10 Total
Analyse du projet 3 3
Auto-formation Webtoolkit 4 2 6
Montée en connaissance sur API2 3 3
Conception de l'interface graphique 2 2
RDV avec encadrants 1 1 1


Prologue

Lors du semestre 7, nous avons commencé par une analyse détaillée de notre projet, en effectuant dans un premier temps la présentation de notre projet, ensuite nous avons positionner notre projet par rapport à l'existant et nous avons défini un scénario d'usage, enfin nous avons déterminé notre cahier des charges.

Egalement nous avons rencontré à plusieurs reprises nos encadrants afin d’approfondir au fur et à mesure les objectifs de notre projet. Les rencontres avec nos encadrants étaient aussi un moyen pour nous de voir l'avancement de la construction des robotinos qui aiguisait notre curiosité.

Planning prévisionnel

Janvier

  • Apprentissage du langage C++ en autonomie a travers des cours et vidéos tutorielles sur internet et des livres empruntés à la bibliothèque universitaire
  • Alimenter notre wiki

Février

  • Téléchargement de l'application Web Toolkit sur leur site internet
  • Autoformation sur le logiciel Web Toolkit a travers des vidéos internet et des exemples d'application donnés lors du téléchargement de Web Toolkit
  • Se renseigner sur la méthode de récupération des données des capteurs et des acteurs de Robotino dans l'API2
  • Faire une première esquisse sur papier de notre interface graphique en pensant aux différentes fonctionnalités que nous voudrions implémenter
  • Alimenter notre wiki

Mars (début de mois)

  • Commencer la programmation de notre interface graphique
  • Télécharger l'application API2 sur wiki.openrobotino
  • Alimenter notre wiki

Mars (fin de mois)

  • L'interface graphique est terminée ou en cours d'être terminée
  • Commencer à récupérer les données des capteurs et des acteurs de Robotino et les intégrer à notre interface graphique
  • Alimenter notre wiki

Avril (début de mois)

  • Finir l'interface graphique si elle n'est pas tout a fait terminée
  • Continuer la récupération des données de l'API2
  • Alimenter notre wiki

Avril (fin de mois)

  • Finir la récupération des données
  • Commencer à importer les démonstration sur le nouveau Robotino
  • Alimenter notre wiki

Mai

  • Finir d'importer les nouvelles démonstration dans le Robotino upgrader
  • Alimenter notre wiki
  • Soutenance de fin de projet

Semaine 1

Lors de cette première semaine, nous avons commencé par organiser un planning de travail pour les mois à venir, en nous imposant des objectifs semestriels afin de se repartir au mieux la charge de travail.

De plus nous avons téléchargé le packtage Web ToolKit avec les différents exemples d'utilisation, et effectué des recherches sur son fonctionnement avant de commencé à programmer notre interface graphique.

Capture 5.PNG

Enfin, nous avons pris rendez-vous avec nos encadrants de projet afin nous renseigner sur l’avancement de l'assemblage du Robotino, leur expliquer l'organisation des tâches que nous nous sommes données et de vérifier que notre cahier des charges est complet.

Semaine 2

Nous avons commencé cette deuxième séance avec un rendez-vous avec nos 2 tuteurs : Vincent Coelen et Thomas Danel. Ils nous ont rassuré sur l'avancée du prototype du Robotino. L'écran a été commandé et devrait arriver rapidement. Il sera également monté au plus vite, pour avoir le premier prototype prêt à fonctionner dans minimum 2 semaines.


Ensuite pour terminer la séance nous avons commencé à suivre des tutos sur Web ToolKit qui nous permettront de nous lancer sur la programmation de notre interface graphique : tuto 1 tuto 2


En parallèle nous avons commencé à nous documenté sur wiki.openrobotino pour avoir un accès complet aux capteurs et aux acteurs de Robotino via La deuxième version de l'interface de programmation d'application (API2). Cela nous permettra de récupérer les données et de les afficher sur notre interface graphique plus tard.

http://wiki.openrobotino.org/index.php?title=Cpp2
http://doc.openrobotino.org/documentation/OpenRobotinoAPI/1/doc/rec_robotino_com/annotated.html

Semaine 3

Lors de cette troisième semaine, nous avons continué à nous perfectionner, en analysant les exemples donnés via la plateforme Web Toolkit.

Ensuite il est venu le temps d'imaginer à quoi pourrait ressembler notre interface graphique, avec les différentes fonctionnalités que nous pourrions implémenter (voir schéma ci-dessous).

MENU PRINCIPAL

  • Aide

Expliquer les différentes fonctionnalité de notre interface comme par exemple comment connecter le robot au wifi, comment lire l'état des capteur ou alors lancer un programme de démonstration.

  • Quitter interface
  • Configuration réseau

Modifier facilement la configuration réseau du robot (interface filaire ou choix d'un réseau sans fil).

  • Visualisation état capteurs

Afficher les données des différents capteurs du Robotino directement sur l'interface graphique, par exemple lors de la suivi d'un mur nous pourrions voir en temps réels quel capteur de distance est utilisé ainsi que la valeur qu'il renvoie.

  • Lancement programme de démonstration

Exécuter un programme de démonstration directement enregistré dans le Robotino parmi une liste prédéfinie.


IMG 4517.jpg IMG 4518.jpg IMG 4519.jpg

Semaine 4

Nous avons commencé cette semaine avec un rendez vous avec nos 2 tuteurs afin de faire un compte rendu de notre avancement sur le projet. Premièrement il nous fait remarquer que sur l'esquisse de l'interface graphique que nous avions imaginé, il y avait des points manquants. Comme par exemple nous avions oublié de faire une bande avec des informations toujours visibles :

  • l'adresse IP
  • le programme en cours
  • l'adresse Wifi
  • l'état de la batterie

Également il nous a indiqué par question de praticité, qu'au lieu de faire une icône pour chaque capteur et pour chaque programme de démonstration, de penser un faire un menu déroulant dans la partie choix des capteurs et dans la partie choix du programme de démonstration. D'une part ce sera plus simple pour nous à mettre en œuvre et d'autre part ce sera plus dans le futur pour y ajouter de nouveaux capteurs ou de nouveaux programmes de démonstration, pour les personnes n'ayant pas implémenté l'interface graphique.

Nous avons donc refait des visuels pour l'interface graphique :

Menu principal.png Choix capteur.png Choix demo.png


Ensuite après de nombreuses recherches nous nous sommes rendu compte qu'il y a très peu d'exemples d’utilisation et de tutorats de WT, de plus les tutorats disponibles sur le site Web Toolkit concernent une ancienne version de celui-ci, ils ne sont donc pas à jour et nous sont donc peu utiles. Contrairement à QT où il y'a un grand nombre d'exemple, de cours disponible (open classroom par exemple). Cependant nous avons trouvé une application WtDesigner qui nous permet de créer une interface graphique avec WT facilement. Malheureusement avec cette application nous avions accès seulement au .H et non au code source, il nous était donc impossible de continuer avec cette application car nous devons récupérer le code pour que l’interface graphique s’adapte aux données du robot. Ce qui nous a fait prendre un peu de retard.

WTdesigner.JPG

Semaine 5

Suite à l'échec de l'utilisation du logiciel WtDesigner, nous avons commencé à coder nous même l'interface. Nous avons commencé par le menu principal. Nous sommmes partis de l'exemple Hello World, qui contient entre autre du texte et un bouton. Grace à la documentation de Wt, nous avons pu créer le bandeau qui affichera toujours les informations importantes. pour cela, nous avons utilisé la classe WContainerWidget, qui permet ainsi de diviser l'écran en plusieurs parties et d'ajouter des widgets dans ces parties. Pour le moment, nous avons ajouté du texte "statique", mais plus tard, le contenu sera modifié en fonction du robot (adresse ip, batterie, programme en cours...). Nous avons également ajouté les 3 boutons permettant de lancer les 3 fonctionnalités principales de notre interface.

Nous n'arrivons pour le moment pas à intégrer une feuille de style CSS. Cela est très problématique car, comme le montre la capture ci-dessous, le rendu n'est pas du tout esthétique. Malgré de nombreux tests, il nous est impossible d'ajouter une feuille de style externe. Nous pouvons cependant modifier la taille, la couleur... des Widgets grâce à des fonctions de Wt. Cependant, il n'existe pas de fonctions de Wt permettant de centrer et d'espacer le texte, d'adapter la taille des boutons en fonction de l'écran (taille en pourcentage de l'écran)... L'utilisation d'un fichier CSS parait donc être obligatoire pour mener à bien notre projet et nous devons trouver une solution.

Interface20190226.JPG

Semaine 6

Cette semaine à debuté avec un rendez vous tuteur. Lors de cet entretien nous avons commencé par présenter l'avancement de notre projet que nous avons effectué pendant les vacances et il a pu répondre à nos questions et nous apporter des solutions pour le futur. Egalement l'installation du Robotino est terminé, il nous a fait une démonstration pour l'allumer et l'éteindre ainsi que les différentes fonctionalités de la tablette tactile.

photo du robotino

De plus pour faciliter la communication entre nous et aussi avec notre tuteur, sur les lignes de code que nous pouvons effectuer et de garder dans le futur ce que nous avons fait, un GIT a été mis en place : Lien vers le GIT

css compilation 
commencer la programmation

Semaine 7

Lors de cette semaine nous avons fini de programmer le menu principal de l'interface graphique

photo du rendu
explication ligne de code

Semaine 8

Au début de ce projet nous avions téléchargé une machine virtuel de type debian, or avec debian la dernière version disponible de WT était la version 3.3.6. Lorsque nous avons voulu commencer à récuperer l'état des capteurs et des actionneurs sur le robotino, un problème est survenu. Enfet le robotino embarque une machine virtuel Ubuntu, qui lui permet d'avoir la dernière version de WT (4.0.3). Lors de la compilation nous avons eu de nombreuses erreurs de syntaxe du fait de la mise à jour. Pour coller au mieux avec le processus embarqué par le robotino nous avons donc choisi de telecharger une nouvelle machine virtuelle Ubuntu (celle utilisée par le robotino) et de télécharger la même version de WT, pour ne plus avoir de problème dans l'avenir. Nous avons réussi en très peu de temps à corriger les erreurs de compilation du à la nouvelle mise à jour et nous avons pu commencer à recupuerer les données des capteurs et des actionneurs du robotino. Pour récuperer les données des capteurs et de actionneurs, nous avons besoin de l'API2 que nous avons téléchargé la semaine dernière.

Avant de pouvoir commencer à retourner l'état des capteurs et des actionneurs, nous devons connecter le robotino à notre programme. Afin d'y parvenir nous avons annalysé les exemples donnés lors du téléchargement de l'API2.

PHOTO LIGNE DE CODE + EXPLICATION

Ensuite nous avons choisi de récuperer la donnée du Bumper du robotino. Le bumper est un capteur de collision, quand il subit une une pression, il renvoie un signal, cela permet au robotino de se stopper. Avec la fonction bool rec::robotino::api2::Bumper::value on obtient :

  • True quand le robotino heurte quelquechose (un mur par exemple)
  • False sinon
PHOTO LIGNE DE CODE + EXPLICATION

A la fin de cette séance nous avons réussi à connecter le robotino à notre programme et à récuperer l'etat du bumper, mais à l'instant t, il ne se met pas à jour si nous n'actualisons pas la page. Nous avons essayer de mettre une boucle while(1), mais sans grand succés, car nous supponsons que la boucle qui est une boucle infinie empêche notre interface graphqiue de fonctionner en même temps que le programme du bumper. Pour la séance suivante nou réfléchissons à un moyenne d'afficher la valeur du bumper en instantanée.

Semaine 9

Lors de cette neuvième séance nous avons réussi à transmettre l'état du bumper en instané, pour cela nous avons utilisé un timer.

PHOTO CODE + EXPLICATION


retour données capteurs de distances
expliqué comment on a fait pour avoir en temps réel 
expliqué capteur de distance + code

Semaine 10

Documents Rendus

Fichier:2018-11-26 Présentation du projet.pdf