IMA3/IMA4 2021/2023 P3 : Différence entre versions

De Wiki de Projets IMA
Ligne 68 : Ligne 68 :
 
La partie communication UDP se compose de deux parties. Une application de commande écrite en python se comporte en client pour envoyer des messages à un serveur Godot. Ce dernier est un noeud 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.
 
La partie communication UDP se compose de deux parties. Une application de commande écrite en python se comporte en client pour envoyer des messages à un serveur Godot. Ce dernier est un noeud 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.
  
=<div class="mcwiki-header" style="border-radius: 15px; padding: 8px; font-family: arial; text-shadow: 4px 4px 5px black; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 200%; background: #004dff; vertical-align: top; width: 70%;"> Documentation </div>=
+
=<div class="mcwiki-header" style="border-radius: 15px; padding: 8px; font-family: arial; text-shadow: 4px 4px 5px black; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 70%; background: #004dff; vertical-align: top; width: 30%;"> Documentation </div>=
  
 
=<div class="mcwiki-header" style="border-radius: 15px; padding: 8px; font-family: arial; text-shadow: 4px 4px 5px black; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #004dff; vertical-align: top; width: 50%;"> Bilan </div>=
 
=<div class="mcwiki-header" style="border-radius: 15px; padding: 8px; font-family: arial; text-shadow: 4px 4px 5px black; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #004dff; vertical-align: top; width: 50%;"> Bilan </div>=

Version du 1 mars 2023 à 16:15

Convoyeur.jpg
Résumé

Notre projet consiste à créer le simulateur d’un processus industriel, ainsi que de mettre en place une communication réseau permettant de contrôler le processus industriel simulé. Cela permettra de pouvoir tester un programme, sans avoir à le tester directement sur le processus industriel réel. Le processus dont nous créons le simulateur est un “tri de pièce”, comportant un vérin, un convoyeur, un détecteur de présence et une caméra.


Présentation générale

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

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 inclut 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 convoyeurs. 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.

Description

Schéma fonctionnel:

DescriptionP3.jpg


Notre simulation réalisée sur le logiciel GODOT représente un convoyeur permettant le tri de pièce de 1€ et 2€. Pour cela, une caméra est disposée au dessus du convoyeur et a pour rôle d'identifier la valeur de la pièce. Cette information est alors envoyée à un système de commande qui contrôle l'état d'un vérin. Ce vérin doit permettre de pousser ou non la pièce pour que celle-ci se dirige vers un espace de stockage qui lui est dédié. Cette simulation doit permettre à un automaticien de tester son application de commande pour qu'il puisse visualiser des résultats facilement.


Schéma descriptif:

DescriptionP32.jpg

Réalisation des résultats

Matériel à disposition

Pour la partie simulateur, nous avons utilisé le logiciel Godot, un moteur physique abordable et pour 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

Fin 2022:

Convoy2.jpg

Ce simulateur permet de générer aléatoirement des pièces de monnaie de 1€ (représentée par des pièces grises) et de 2€ (représentée par des pièces jaunes) à 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".


Début 2023:

Convoy4.jpg

Cette seconde version du simulateur possède un bouton "ajout pièce" qui permet de générer aléatoirement des pièces de monnaie de 1€ (représentée par des pièces rouges), de 2€ (représentée par des pièces bleues) et des pièces de 50 centimes (représentée par des pièces vertes) à l'appuie du bouton "Nouvelle pièce". Les pièces apparaissent avec une certaines inclinaison afin de se rapprocher au mieux de la réalité (si une pièce roule ou tombe du convoyeur). Le convoyeur est ensuite mis en marche grâce au bouton "marche" et permet à la pièce d'avancer jusqu'à la caméra. Celle-ci prend une photo de la pièce qui sera envoyé par la suite au client. L'utilisateur peut ensuite commander le vérin rouge avec deux boutons: "vérin rouge push", "vérin rouge pull" afin de trier la pièce dans le bac voulu mais aussi commander le vérin bleu avec deux autres boutons. Le convoyeur peut également être stopper par l'utilisateur avec un dernier bouton nommé "arrêt".

Partie communication

Spyderi.jpg

La partie communication UDP se compose de deux parties. Une application de commande écrite en python se comporte en client pour envoyer des messages à un serveur Godot. Ce dernier est un noeud 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.

Documentation

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 au niveau du fonctionnement logiciel de Godot et donc des éléments du moteur physique 3D, mais aussi des compétences en ce qui concerne la communication réseau (en UDP) en utilisant un serveur Godot et un client python. Nous avons également acquis des compétences pratiques en ce qui concerne l'organisation notamment avec l'avancement à chaque fin de séance et la répartition des tâches ainsi que la mise en commun des ressources.


Bilan du semestre 8:

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).


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).