IMA3/IMA4 2021/2023 P3

De Wiki de Projets IMA
height:1000px




Fichier:VideoDemonstration.mp4



Cahier des charges

Résumé

La fonction principale de notre projet est de permettre de simuler un processus physique composé d’un convoyeur, de 2 capteurs de présences, de 2 vérins d'une caméra permettant de transmettre des informations jusqu'à une deuxième application qui celle-ci permet de communiquer avec le simulateur du processus physique. Elle permet grâce aux échanges, de tester un programme externe sur le simulateur du processus physique.

Contexte

Dans le contexte actuel de la crise sanitaire, les entreprises industrielles sont très sollicitées et nécessitent l'automatisation du mouvement des marchandises et potentiellement de leur tri. C'est pourquoi la simulation de notre système de gestion de marchandises par traitement d'images s'avère nécessaire dans ce contexte industriel pour la formation du personnel.

Objectif du projet

  • Le projet consiste à réaliser une application simulant virtuellement un processus industriel avec un convoyeur, une caméra, des vérins et des pièces déposées sur ce convoyeur. Il s'agit de développer un simulateur de ce processus physique destiné à être couplé avec une application de commande (seulement la communication en réseau avec cette dernière est inclus dans le projet). Celui-ci doit permettre une visualisation 3D du processus, la transmission des mesures des capteurs virtuels, comme par exemple : détecteur de présence, image de la caméra et la réception des ordres transmis aux actionneurs qui correspondent aux moteurs et vérins du convoyeur.
  • Ce projet est réalisé dans le but de pouvoir tester un programme sans avoir à programmer le processus industriel réel.

Cela peut être très utile dans plusieurs cas, par exemple, pour tester des améliorations ou des mises à jour d’un processus existant, sans avoir le risque en cas de bug de mettre en danger les machines, les produits, ou encore les personnes. Également, afin de tester le fonctionnement d’un processus réel pas encore existant, ce qui permettrait de pouvoir voir en amont les problèmes que l’on pourrait rencontrer lors de la réalisation et de la mise en place du processus réel et donc de les anticiper.

Livrables attendus

  • Un compte rendu hebdomadaire de l'avancée du projet.
  • Fournir un exécutable sous Windows permettant la simulation du système se mettant en place en moins de 2 minutes.
  • Exemple de commande simple pour montrer l'utilisation de l'entrée et de la sortie de l'application.

Description du système

SCH1.jpg

Schéma simplifié du système

SCH2.jpg



Réalisation des résultats

Matériel à disposition

Pour la partie simulateur, nous avons utilisé le logiciel Godot, un logiciel de conception d'environnement 2D et 3D abordable pour les débutants et très utilisé dans le monde du jeu vidéo avec un moteur physique très solide.
En ce qui concerne la partie communication, nous avons utilisé le logiciel Spyder, un IDE qui permet de gérer des fichiers en Python.

Partie Simulation

Le convoyeur:
L'élément principal du système est le convoyeur. Celui-ci permet de déplacer les pièces à trier vers les différents bacs de récupérations. Nous décidons donc de commencer par modéliser cet élément et d'y associé un programme qui permet de donner du mouvement aux objets posés dessus. Ce mouvement doit pouvoir aussi être modifié par l'utilisateur. Nous décidons pour le moment d'ajouter une interface 2D au simulateur avec deux premiers boutons: "Marche" et "Arrêt" du convoyeur modifiant directement sa vitesse.

Les vérins:
Les vérins permettent de gérer le tri en poussant les pièces dans leurs bacs respectifs. Nous commençons pour le moment avec un seul vérin pour simplifier le système de départ. Après avoir modéliser l'apparence 3D de celui-ci, nous lui associons un programme permettant au vérin de rentrer au sortir. Comme pour le convoyeur, nous ajoutons deux boutons poussoirs: "Vérin Pull", et "Vérin Push" modifiant directement la position de la tige du vérin.

Les bacs de récupération:
Ces bacs permettent de récupérer les pièces triées en fonction de leur couleur. Après avoir modélisés l'apparence 3D de ces bacs, nous décidons d'ajouter une zone dans ces derniers afin de faire disparaitre les pièces qui y entre. Cette méthode permet de ne pas saturer les capacités du moteur physique si l'utilisateur venait à stocké un grand nombre de pièce.

Enfin, voilà à quoi ressemble la première version de notre simulateur vers la fin du semestre 7:

Convoy2.jpg

Ce simulateur permet de générer aléatoirement des pièces grises (par exemple des pièces de 1€) et jaunes (par exemple des pièces de 2€) à l'appuie du bouton "Nouvelle pièce". Le convoyeur est ensuite mis en marche grâce au bouton "marche" et permet à la pièce d'avancer jusqu'au vérin. L'utilisateur peut alors commander le vérin avec deux boutons: "vérin push", "vérin pull" afin de trier la pièce dans le bac voulu. Le convoyeur peut également être stopper par l'utilisateur avec un dernier bouton nommé "arrêt".
Lors du semestre 8, nous décidons d'ajouter un second vérin accompagné d'un troisième bac de récupération. Nous ajoutons également deux nouveaux boutons pour la commande de ce nouveau vérin. Cette nouvelle version de notre simulateur permet ainsi de traiter 3 types de pièces différentes que nous avons retravaillé: les pièces rouges, bleues, et vertes. Ce code couleur est aussi donné aux différents bacs de récupération et aux vérins correspondant afin que le système soit mieux compréhensible par l'utilisateur.

La caméra:
Notre simulateur doit contenir une caméra qui prend une photo des pièces prêtes à être trié afin de déterminer sa couleur. L'image sera ensuite envoyé au client afin d'être traitée. Pour cela, nous avons utilisé l'élément "Viewport", afin de visualiser le point de vue de la caméra situer au début du convoyeur. Puis grâce à un programme, nous sommes parvenu à prendre une capteur d'écran de ce "Viewport" dès l'instant ou une pièce est présente devant la caméra. Nous récupérons alors cette image au format png dans les fichiers du projet Godot.

Les capteurs de présence:
La pièce arrive ensuite dans la zone d'action des vérins qui doit pousser la pièce si celle-ci est de la bonne couleur. Nous devons donc informer l'utilisateur que la pièce se situe actuellement devant un des deux vérins pour savoir à quel moment il peut commander les actionneurs. Pour cela, nous avons décidé d'ajouter un capteur de présence qui scrute la présence d'une pièce. Ce capteur est représenté sous la forme d'un faisceau lumineux qui est coupé par les pièces de monnaie. Lorsque ce faisceau est perturbé, cela veut dire que la pièce se situe actuellement devant le vérin correspondant. Le système étant composé de deux vérin, il nous faut donc deux capteurs de présence.

La nouvelle génération des pièces de monnaie:
Cette seconde version du simulateur possède un bouton "ajout pièce" qui permet de générer aléatoirement des pièces rouges (par exemple des pièces de 50 cts), des pièces bleues (par exemple des pièces de 1€) et des pièces vertes (par exemple des pièces de 2€) à l'appuie du bouton "Nouvelle pièce". Les pièces apparaissent maintenant avec une certaines inclinaison afin de se rapprocher au mieux de la réalité (si une pièce roule ou tombe du convoyeur c'est possible).

Pour finir, voila à quoi ressemble la version finale notre simulateur, capable de trier 3 types de pièces différentes:

Convoy4.jpg

Partie communication

Commande du simulateur:

Spyderi.jpg




Tout d'abord, l'objectif de la partie communication est de permettre à l'utilisateur de commander à distance l’exécutable du simulateur Godot. Pour cela, l'utilisateur enverrai au serveur Godot des instructions visant à changer l'état du convoyeur et des vérins, tout en visualisant l’état des différents capteurs du système. La partie communication UDP se compose donc en deux parties. Une application de commande écrite en python qui se comporte en client pour envoyer des messages à un serveur Godot. Ce dernier est un nœud 2D dans le projet principal et va s'occuper de recevoir les commandes de l'application et traiter les informations pour modifier les états des actionneurs puis renvoyer ceux-ci dans un feedback en plus de l'état du capteur de présence.


Récupération de l'image:

Maintenant que notre simulateur arrive à générer une image de la pièce dès qu'elle passe devant la caméra, nous devons permettre à l'utilisateur de récupérer cette image dans le but de la traiter plus tard.

8 03 23.png





Interface Homme Machine:

Après avoir rempli l'intégralité des fonctionnalités de notre simulateur, nous avons décidé d'améliorer l'interface graphique apportant une meilleure prise en main à l'utilisateur.

8 03.png

Documentation

Différents Composants

Composant Noeuds Fonctions Visuel

Vérin (Rouge/Bleu)

Verin1.jpg

Pousse les pièces dans les bacs

Verinbl.jpg

Convoyeur

Convoyeur1.jpg

Base du simulateur

Convoyeurb.jpg

Bac de récupération (Rouge/Bleu/Vert)

Bac1.jpg

Récupérer et faire disparaître les pièces

Bacb.jpg

Laser (Rouge/Bleu)

Laser1.jpg

Détecter la présence devant le vérin d'une pièce

Laserb.jpg

Caméra

Camera1.jpg

Permet d'envoyer l'image des pièces qui passent devant au client

Camerab.jpg

Node2D/Viewport

Node1.jpg

Permet l'affichage de la partie 2D donc des boutons et du visuel en temps réel de la caméra

Nodeb.jpg

Manuel d'utilisation Godot

Cet application simule le fonctionnement d'un système de tri de pièces commandable à l'aide de différents boutons. Le but étant de stocker les pièces qui se déplacent sur le convoyeur dans leur bac respectif.


100.jpg

1) Tout d'abord, le boutons "ajout pièce" en haut à gauche de l'écran
permet de faire apparaître une pièce d'une certaine couleur au début du convoyeur.


200.jpg

2) Cette pièce passe ensuite entre deux repères noirs symbolisant l'emplacement de la caméra.
A ce moment, la caméra prend une photo de la pièce qui sera destinée à être traitée par la suite.
La vue en bas à droite de l'écran représente le point de vue de la caméra en temps réel.


300.jpg

3) La pièce franchis alors un premier faisceau lumineux permettant d'avertir au vérin rouge que la pièce se situe devant lui.
Si la couleur de la pièce correspond, il suffit d'activer le vérin à l'aide des boutons "Vérin Rouge Push" et "Vérin Rouge Pull" afin de pousser la pièce dans le bac de récupération.


400.jpg

4) Si la couleur ne correspond pas, la pièce continue son chemin jusqu'à franchir un second faisceau lumineux permettant d'avertir la présence au vérin bleu.
De la même manière, si la couleur de la pièce correspond,
il suffit d'activer le vérin à l'aide des boutons "Vérin Bleu Push" et "Vérin Bleu Pull" afin de pousser la pièce dans le bac de récupération.


500.jpg

5) Si la pièce est verte, la pièce doit continuer à nouveau son chemin jusqu'à atterrir dans le bac de récupération de la même couleur.


600.jpg

6) Il est possible également d'arrêter la mise en marche du convoyeur à tout moment grâce au bouton "Arrêt Convoyeur".
Cet option est très pratique lors des phases d'actions des vérin pour éviter de pousser les pièces trop tard.
Il est possible de remettre en marche le convoyeur grâce au bouton "Marche Convoyeur".


Ce système de commande à l'aide des boutons à pour objectif de familiariser l'utilisateur avec le simulateur afin qu'il puisse mieux comprendre quels sont les mouvements possible du système avant de réaliser son programme.





Interface Homme Machine:

L'interface

8 03.png

Bilan

Bilan du semestre 7:

Nous avons donc acquis un certain nombre de compétences au cours de ce semestre, notamment des compétences techniques, mais également des compétences liées à l'organisation de groupe:

Tout d'abord, au niveau du fonctionnement logiciel de Godot, nous avons appris à créer les apparences 3D et de leur attribuer des caractéristiques physique telles qu'une masse, une vitesse ou un facteur de collision afin de rendre le simulateur plus proche de la réalité. Nous avons également appris à programmer en langage GDscript pour donner du mouvements aux objets, ou faire apparaître des pièces par exemple. Ensuite, nous avons étoffé nos connaissances en communication réseau en utilisant l'UDP pour faire communiquer le serveur Godot et un client python.
Enfin, nous avons également acquis de nombreuses compétences pratiques en ce qui concerne l'organisation. En effet, nous avions l'habitude de prévoir les objectifs à accomplir et la répartition des différentes tâches avant chaque séance de projet grâce à un diagramme de Gant qui a été réalisé au début du semestre. Puis, à la fin de la journée, nous faisions un point sur les avancés de chacun afin de rédiger le compte rendu hebdomadaire. Nous prenions également l'habitude de partager nos travaux sur un Google drive commun qui nous permettait de mieux nous organiser sur la sauvegarde des différentes versions de notre projet.
De plus, nous pouvons constater que la majeure partie du projet à été réalisé durant ce semestre car les différents objectifs détaillés dans le cahier des charges ont été traités. C'est pourquoi nous avons abordé le semestre 8 avec bien plus de sérénité.


Bilan du semestre 8:

Lors de ce semestre, nous avons continué sur la même lancée qu'au semestre précédent concernant l'organisation de groupe. C'est à dire que nous préparions chaque séance par définir les objectifs à réaliser, ainsi que la répartition des tâches selon un diagramme de Gantt établi au début du semestre. Nous continuions également de nous organiser autour d'un Google drive pour partager nos travaux en continu.
Concernant les compétences techniques, nous avons dans un premier temps approfondi nos connaissances dans la conception 3D sur le logiciel Godot, mais nous avons surtout acquis de grandes compétences dans la programmation en langage GDscript, notamment lorsqu'il était question de récupérer le flux vidéo de la caméra virtuelle du simulateur. Nous avons par la suite renforcé nos connaissances sur l'élaboration d'une IHM en python. Nous avons également appris à récupérer l'image du flux vidéo enregistré sur Godot depuis le serveur client. Ces nombreuses compétences nous permettent d'envisager une poursuite d'études et un parcours professionnel plus serein.

Enfin, nous pouvons constater que les résultats finaux démontrent l'efficacité de notre simulateur et qu'il valide bien à tous les objectifs détaillés dans le cahier des charges. De plus, nous avons ajouté quelques améliorations qui permettent de faciliter son utilisation, comme par exemple la possibilité de trier trois types de pièces ou l'IHM qui rend la commande du simulateur plus lisible.

Gestion du projet

Chronologie et avancement du projet :

Semestre 7:

10 Octobre 2022:

  • Avancement et mise en page du wiki
  • Redéfinition du cahier des charges
  • Création d'un liste des tâches à réaliser pour le projet entier


21 Octobre 2022:

  • Création d'un prototype du convoyeur Godot
  • Etablissement de deux binômes "Communication UDP" et "Conception Godot"
  • Recherches sur la programmation en GDScript
  • Recherches sur la communication UDP entre une application Python et une application Godot


28 Octobre 2022:

  • Amélioration du convoyeur et tests sur le moteur physique pour se rapprocher de la réalité
  • Premiers essais de scripts Python pour UDP sur Spyder
  • Premiers essais de scripts Godot pour l'UDP


18 Novembre 2022:

  • Mise en marche du tapis du convoyeur transportant une pièce
  • Communication réussie entre des mini applications python et Godot en UDP avec le loopback
  • Recherches sur la communication UDP à distance sans loopback


21 Novembre 2022:

  • Mise en place de boutons permettant d'interagir avec le simulateur
  • Ajout d'un vérin au convoyeur mais non fonctionnel
  • Communication réussie entre des mini applications python et Godot en UDP sans loopback


25 Novembre 2022:

  • Adaptation des applications Python et Godot afin de commander le convoyeur
  • Recherches sur la mise en place d'un détecteur de présence
  • Finalisation de la première version de la communication UDP à implémenter


28 Novembre 2022:

  • Amélioration du vérin pour le rendre fonctionnel
  • Implémentation réussie de la partie communication au convoyeur
  • Communication réussie entre une application python et notre simulateur
  • Modification de l'apparence du convoyeur et du vérin pour se rapprocher du réel


8 Décembre 2022:

  • Réorganisation du Drive du projet et des avancés sur le wiki sur la partie “Chronologie et avancement

du projet”.

  • Mise en commun de toutes les ressources actuelles afin que chacun puisse avancer de son côté et avoir accès au travail des autres.


15 Décembre 2022:

  • Le choix du plan a été fait et le diaporama de la soutenance a été commencé.
  • Pour le simulateur, la détection des pièces jaunes et grises est faite, un mode automatique (au sein de Godot) a été testé et est fonctionnel (hors projet).


Semestre 8:

18 Janvier 2023:

  • Mise de notre diagramme de Gantt dans le drive, après avoir fait nos recherches.
  • Nous avons commencé à programmer le retour sur l’état du capteur de présence. On a rencontré des problèmes sur comment recevoir des données sur un terminal et attendre une commande en même temps.
  • Envoie de l'état du côté du serveur, nous supposons que le fait d’attendre une commande empêche la réception.
  • Optimisation de notre système de commande pour envoyer des requêtes sur l’état des actionneurs en plus de les modifier.
  • Du côté du simulateur, nous sommes parvenus à ajouter une caméra Godot et récupérer des images de celle-ci avec un bouton Screenshot en s’inspirant d’un programme exemple de Godot.


25 Janvier 2023:

Du côté de la communication UDP:

  • Optimisation de notre application Python (voir dans drive « Programme_Python_V5 ») pour que le simulateur réponde à plusieurs commandes spécifiques qui agissent sur les actionneurs et sur le terminal (commande T_EXIT quitte le terminal).
  • De plus, un traitement des erreurs de commandes a été ajouté pour ne pas faire planter le programme si l’utilisateur entre une mauvaise commande.

Du côté du simulateur: Ajout du capteur pour que la caméra puisse prendre une photo à chaque fois qu’une pièce passe.

  • Le visuel des bacs a été mis à jour pour correspondre aux couleurs des pièces.

Convoy3.jpg


1 Février 2023:

En ce qui concerne la communication:

  • Communication dans les deux sens pour l’état des capteurs. En effet, dès que le capteur détecte une pièce, il le signale à l’application de commande qui recevra sur son terminal le message « pièce détectée ». Cela est possible à l’aide d’un thread côté client qui attend en permanence le message « ETAT_CAPTEUR_SET » qui signifie qu’une pièce a été détectée. Nous avons également fait des recherches approfondies sur le traitement de l’image et sa transmission en UDP.

En ce qui concerne le simulateur sur Godot:

  • Changement de la position du capteur de présence et créé une zone à part pour le traitement des images de la caméra.
  • Point avec M. CONRARD :

Le point avec notre tuteur nous a permis d’obtenir des pistes de solutions pour les objectifs suivants :

    - Demander une image capturée par la caméra et la recevoir sur Python
    - Modéliser un capteur optique
    - Mettre le capteur en mode scrutation

En piste d’amélioration pour le projet, nous pouvons :

    - Implémenter un deuxième vérin commandé par un deuxième client


8 Février 2023:

En ce qui concerne la communication:

  • Ajout de commentaires, changement du fonctionnement des feedbacks pour une plus grande simplicité d’utilisation (implémentation d’une « scrutation » complète).
  • Les commandes de récupération des états fonctionnent correctement maintenant.
  • Affichage d'une image depuis un fichier avec Tkinter et PIL et écrire sur un fichier PNG est possible.
  • Récupération de l’image de la caméra est en cours.

En ce qui concerne la partie Simulateur sur Godot :

  • Implémentation du capteur équivalent du capteur physique (capteur laser), ajout d’un nouveau type de pièce et d’un nouveau vérin (en vue de l’ajout d’un deuxième client).
  • Amélioration de l’interface 2D.


15 Février 2023:

En ce qui concerne la Communication :

  • Nous avons réussi la partie la plus difficile du projet, c’est-à-dire capturer une image avec la caméra sur Godot, l’envoyer en UDP sous formes d’octets vers le client python pour ensuite traiter les données et enregistrer l’image dans un fichier png. Ainsi, lorsque nous ouvrons le fichier « test.png » on voit qu’il a été modifié et affiche l’image capturée par la caméra. A présent, nous avons pour objectif d’améliorer le projet et créer une interface graphique pour l’utilisateur dès qu’il entrera la commande « OPEN_INTERFACE ».
  • L’interface aura des boutons similaires au simulateur et commandera ce dernier.

Simulateur sur Godot :

  • Nous avons amélioré la physique des pièces sur le convoyeur (angle d’apparition aléatoire et poids) pour se rapprocher au plus de la réalité. Nous avons également ajouté une interface caméra à l’aide d’un « script caméra » provenant d’une librairie de Godot mais adaptée pour le projet.
  • Il est donc possible de se déplacer et changer de point de vue sur le simulateur grâce aux boutons du clavier et aux clics de souris. De plus, une barrière a été ajoutée pour empêcher les pièces de tomber du convoyeur (à cause de la physique).

01 Mars 2023:

En ce qui concerne la communication:

  • Notre principal objectif à présent est de ne plus nous limiter à des commandes sur un terminal

(côté python) mais de passer par une IHM se présentant sous la forme d’une fenêtre avec 9 boutons pour utiliser chacune des commandes disponibles. Nous avons donc commencé à programmer cette IHM et sommes parvenus à créer l’interface suivante :
1 03.png
L’espace vide sera remplacé par une zone de texte qui se mettra à jour en fonction des boutons appuyés (remplaçant le terminal). Il y aura également une image qui se mettra à jour en appuyant sur « Capture image ». En ce qui concerne le Wiki:

  • Nous avons également mis à jour le wiki avec notre avancée actuelle.

Simulateur Godot:

  • Afin de montrer que le serveur peut gérer plusieurs clients, nous ferons fonctionner un

deuxième client qui commandera le deuxième vérin (nous avons commencé réfléchir sur l’implémentation de celui-ci).

08 Mars 2023:

En ce qui concerne la communication:

  • Aujourd’hui, nous avons continué la programmation de l’interface Homme machine de

l’application de commande. Après de nombreuses recherches sur la grille qu’utilise la librairie tkinter de python, nous sommes parvenus à afficher une image sur la fenêtre et à organiser l’interface de la manière ci-dessous :
8 03.png
Une fois cela fait, on a commencé à relier les fonctions aux boutons. Par exemple set_verin() est relié au bouton « Activer le verin ». Nous avons fait des essais et arrivons à commander le simulateur, cependant l’application de commande ne répond plus après une action. L’objectif de la prochaine séance sera donc de corriger ce problème et d’arriver à envoyer des commandes en continu. En ce qui concerne la gestion de projet:

  • Du côté de la gestion du projet, nous avons avancé sur le wiki, certaines sections ont été

complétées, l’aspect visuel aussi. La rédaction du rapport de projet a été commencé (ligne directrice et idée principale). La structure du diaporama de soutenance Simulateur Godot:

  • Nous avons modifié le programme du Node2DCom (node communication UDP) pour inclure

le deuxième client, une fois l’IHM de l’application de commande terminée, on commencera les tests pour commander le simulateur avec deux clients à la fois.