IMA3/IMA4 2021/2023 P6 : Différence entre versions
(→Chronologie et rapport de scéances) |
|||
Ligne 350 : | Ligne 350 : | ||
*Collecte de mégot de cigarette pour la base d'image pour l'IA | *Collecte de mégot de cigarette pour la base d'image pour l'IA | ||
*Commencement des soutenances et présentation | *Commencement des soutenances et présentation | ||
+ | |||
+ | |||
+ | |||
+ | https://github.com/3sigma?tab=repositories |
Version du 15 décembre 2022 à 10:08
Sommaire
Résumé
200 mots max
Présentation générale
Contexte
Pour notre étude, nous avons d’abord établi une analyse des besoins de notre projet. Après recherche, nous avons découvert, qu’en France, près de 68 Milliards de cigarettes étaient fumés par an. Et parmi ces 68 Milliards, on estime à 40 Milliards de mégots jetés au sol. Comme un exemple sera beaucoup plus parlant, prenons l’exemple d’un défi réalisé par 230 participants aux Champs-Elysées. Pour sensibiliser sur le nombre de mégots jetés aux Champs-Elysées, 230 bénévoles se sont mis pour défis de ramasser pendant 1h30 tous les mégots qu’ils trouvaient sur leurs chemins. Une fois ramassés, ils ont compté un total d’environ 100000 mégots. Et ça, ce n’est qu’à l'échelle des Champs-Elysées. A partir de là, on peut s’imaginer la quantité de mégots qui se trouve actuellement sur le sol de nos villes. Nous avons donc pour projet de créer un robot autonome capable de se déplacer vers le mégot et de le ramasser en le disposant dans un récipient La somme nécessaire au ramassage des mégots est de 80.000.000 euros, selon le ministère de la Transition écologique et solidaire. Lors de la première année de sa mise en œuvre, les usines de production de cigarettes ont alloué 10.000.000 euros. L’an suivant, ce montant sera doublé. La collecte de ces sommes d’argent est dans le cadre de l’application de la loi sortie en février 2020. Cette dernière stipule que le fabricant est garant de ses produits jusqu’à leur fin de vie. Toutefois, il faut attendre l’année 2023 pour que les cigarettiers financent en totalité ces ramassages de mégots. Le coût du ramassage des mégots varie suivant la superficie de la localité. Les agglomérations rurales dont la population n’excède pas les 5.000 habitants, il est de 0,50 euro. Les municipalités ne dépassant pas 50.000 habitants perçoivent 1,08 euro par personne. Tandis que dans les communes ayant une population supérieure à 50.000 habitants, ce montant est de 2,08 euros. Il s’agit de la responsabilité élargie des producteurs. Les cigarettiers doivent alors prendre leurs mesures de manière à ce que les mégots soient recyclés. Très polluantes, ces substances prennent beaucoup de temps pour se décomposer à cause de leurs composants en plastiques.
Objectifs
Notre projet consiste à concevoir et à mettre en place un système mobile autonome (volant ou roulant) permettant la collecte de déchets (initialement de mégots) sur le campus grâce à de la reconnaissance d’image. Ce dossier va vous présenter nos pistes de recherches et de développement ainsi que notre organisation pour mener à bien ce projet. Nous avons décidé de nommer notre robot : “Trashy” (en référence au mot angais Trash).
Pour mener à bien ce projet, nous avons mis en place un Google Drive pour organiser notre travail pendant la période de recherche et d’étude de ce projet. Durant ce semestre, nous avons donc consacré notre temps aux phases de pré-étude et d’étude du projet, ainsi qu’à la réalisation du cahier des charges nous permettant de mieux continuer le projet pour les semestres à venir.
Description
Nous avons donc déterminé les fonctions contraintes du robot qu’il doit pouvoir réaliser telle la détection des mégots ou encore la contrainte de devoir évoluer sur tout type de terrain. Et c’est ainsi, et après concertation avec tous les membres du projets, que nous avons écrit le cahier des charges suivants : Le robot devra rouler à une vitesse de 4km/h et devra être capable de passer sur des obstacles de 2cm maximum. De plus, lorsque le robot détecte un obstacle qu’il ne peut peut franchir, il doit s’arrêter et le contourner. Enfin, en cas d’obstacle dangereux, le robot devra émettre un son. Lorsque le robot détecte un déchet, il doit l’attraper à l’aide de ses pinces puis le mettre dans son réceptacle. Si le réservoir est plein, ou si la maximale que le robot peut transporter est atteinte, le robot devra partir vers une station de déchargement (faite par le client, hors du cadre de notre projet) pour se vider. De plus, lorsque le robot ramasse un déchet, il devra cartographier ce déchet afin de connaître les zones les plus polluées. A noter que le robot ne fait pas le tri des déchets. La position du robot doit être connue en temps réel afin d’analyser les données du parcours et le robot devra connaître son orientation à l’aide de son gyroscope. Le robot doit avoir une autonomie de 8h et doit pouvoir repartir vers la station de charge si sa batterie devient faible. Les bras du robot sont en caoutchouc pour plus d’adhérence et sa trappe (de 41L) est concave afin d’éviter que les déchets ne se coincent. Le robot doit être capable d’évoluer dans des terrains semi-accidentés et de monter un trottoir. En cas d’urgence, le robot doit immédiatement s’arrêter.
C’est ainsi qu’après réflexions et brainstorming entre les membres du groupe, nous avons trouvé les premières solutions et design de Trashy. Ainsi, nous allons concevoir une carte mère adaptée au robot permettant toutes les fonctionnalités décrites ci-dessus. Nous allons donc avoir recours à un processeur ATMEGA 2560 en communication avec une Raspberry PI. La Raspberry est là pour les traitements des capteurs plus gourmands (dont l’analyse d’image de la caméra) que l’arduino ne peut faire.
Réalisation et résultats
Matériel à disposition
Pour pouvoir mettre en œuvre notre projet, nous avons à disposition une plateforme mobile avec 4 roues omnidirectionnelle et contrôlé par une Raspberry PI 3 model B+ ainsi qu'une Arduino Mega 2560. Nous disposons aussi d'un kit de robot Pince. Afin de pouvoir gérer efficacement la partie intelligence artificielle, Mr Othman Lakhal nous a prêté une Nvidia Jetson Nano'
Principe de fonctionnement de Trashy
Afin de mieux nous organiser durant ce projet, nous avons établis le schéma d'interconnexions et la fonctions de chacun des composants que l'on dispose. Ainsi :
- Nvidia Jetson Nano : Gère la reconnaissance des mégots de cigarette et envoie à la Raspberry, via liaison série, les coordonnées du mégot de cigarette sur l'image
- Raspberry PI3 Model B+ : Asservis en position le robot pour que le mégot de cigarette soit au centre de l'image et demande, via une liaison série avec l'arduino, l'activation de la pince
- Arduino Mega 2560 : Gère le contrôle de la pince
Mise en place des mouvements de la pince
Création du code de la pince sous Arduino
#include <Servo.h>
Servo base, claw, up_down, front_back; int angle = 0; void setup() { up_down.attach(22); base.attach(24); claw.attach(26); front_back.attach(28); Serial.begin(9600); } void recule(){ for(angle = 180; angle >= 1; angle -= 1) { front_back.write(angle); delay(15); } delay(100); } void avance(){ for(angle = 0; angle < 180; angle += 1) { front_back.write(angle); delay(15); } delay(100); } void bas(){ for(angle = 180; angle >=0 ; angle -= 1) { up_down.write(angle); delay(15); } delay(100); } void haut(){ for(angle = 0; angle < 180; angle += 1) { up_down.write(angle); delay(15); } delay(100); } void ferme(){ for(angle = 0; angle < 95; angle += 1) { claw.write(angle); delay(15); } delay(100); } void ouvrir(){ for(angle = 95; angle >= 0; angle -= 1) { claw.write(angle); delay(15); } delay(100); } void basedroite(){ for(angle = 0; angle < 180; angle += 1) { base.write(angle); delay(15); } delay(100); } void basegauche(){ for(angle = 180; angle >= 0; angle -= 1) { base.write(angle); delay(15); } delay(100); } void loop(){ up_down.write(0); base.write(0); claw.write(0); front_back.write(0); ouvrir(); avance(); ferme(); recule(); basedroite(); ouvrir(); ferme(); basegauche(); }
Algorithme du bac
int lightPin = 0; int ledPin1 = 9; int ledPin2 = 10; int bref =0; int loong=0; void setup() { pinMode (ledPin1, OUTPUT); pinMode (ledPin2, OUTPUT); Serial.begin(9600); } void loop() { int seuil = 850; bref=(analogRead (lightPin)< seuil) ; delay(20); loong=(analogRead (lightPin)< seuil); if (bref==1 && loong==1){ digitalWrite (ledPin1, HIGH); delay(1000); } else if (bref==1 && loong==0) { digitalWrite (ledPin2, HIGH); delay(1000); } else{ digitalWrite (ledPin2, LOW); digitalWrite (ledPin1, LOW); } }
Algorithme de détection de mégots de cigarette
Pour l'algorithme de détection de mégots de cigarette, nous avons à notre disposition une Nvidia Jetson Nano. Afin de mieux comprendre comment tout ceci marche, nous nous sommes inspirés des vidéos ci-dessous (toute provenant de la chaine youtube Nvidia Developper) :
- Real-Time Object Detection in 10 Lines of Python Code on Jetson Nano : https://www.youtube.com/watch?v=bcM5AQSAzUY
- Jetson AI Fundamentals Playlist : https://www.youtube.com/playlist?list=PL5B692fm6--uQRRDTPsJDp4o0xbzkoyf8
- Training our own model : https://www.youtube.com/watch?v=sN6aT9TpltU&list=PL5B692fm6--uQRRDTPsJDp4o0xbzkoyf8&index=11 (19:07)
Nous nous inspirons aussi du dépôt git associé : https://github.com/dusty-nv/jetson-inference
Nous allons donc créer un modèle permettant à la Nvidia de détecter les mégots de cigarette et les cigarettes. Pour ceci, nous allons avoir besoin de données répertoriés dans 3 dossier :
- train : Ce sont les données qui vont entrainer notre modèle
- test : Ce sont les données qui vont tester notre modèle
- val : Ce sont les données qui vont valider notre modèle
Afin d'entrainer notre modèle, nous allons simplement parcourir l'ensemble des données. 1 parcours de toute les données est appelé un epoch. Pour avoir un modèle fiable à 80% (avec 5000 données), il est conseillé d'utiliser entre 30 et 60 epochs.
Bilan
Gestion de projet
Chronologie et rapport de scéances
Semestre S6
Mars
Mardi 1er Mars 2022 :
- Découverte du cahier des charges
- Définition du sujet
- Mis en place des outils pour faciliter le travail de groupe
- Commencement de la réalisation de l’analyse fonctionnelle (diagramme bête à corne et diagramme des interacteurs)
- Etude de marché
- Recherche des premières solutions
- Problématique : Faisabilité niveau loi (les normes à respecter/ ce qu’on peut faire et peut pas faire)
Mardi 8 Mars 2022 :
- Etude de faisabilité
- Commencement de l’étude d’opportunité (diagramme SWOT)
- Définition des premières idées pour la conception du robot
- Commencement de l’analyse des risques
- Problématique : Difficulté pour faire l’analyse des risques financiers
Mardi 15 Mars 2022 :
- Définir l’organisation du projet
- Cahier des charges fonctionnel/technique a définir
- Brainstorming sur l’analyse SWOT et la solution du robot suite à un entretien avec notre prof d’économie
- Finition de l’analyse SWOT
- Finition de l’étude d’opportunité
- Analyse des risques technologiques
Mardi 22 Mars 2022 :
- Commencement du cahier des charges fonctionnelles et techniques
- Diagramme fonctionnelle
- Recherche des premiers composants
- Définition des caractéristiques du robot
Mardi 29 Mars 2022 :
- Définitions des risques techniques et des solutions envisagés
- Dimensionnement des principaux moteurs
- Commencement des recherches pour la carte mère
- Recherche des premiers composants
- Recherche d'un modèle de diagramme de Gantt pour l’organisation du projet
Avril
Mardi 5 Avril 2022 :
- Commencement du diagramme Gantt
- Etude de marché
- Finitions des études en cours
Mardi 26 Avril 2022 :
- Commencement et avancée du diapo de présentation
- Commencement de l'écriture du script de la vidéo de présentation
- Concertation en groupe sur le design et l'aspect technique du robot
Mai
Mardi 3 Mai 2022 :
- Commencement de la carte mère du robot
- Poursuite de l’écriture de la vidéo “Ma thèse en 180s”
- Finalisation des derniers détails pour certaines parties
- Création d’un doc sur les questions fréquemment posées (jury)
- Choix d’un logo
- Design sur papier du robot avec mesures
Semestre S7
Octobre
Lundi 10 octobre 2022: Personnes présentes : Gabriel - Vianney - Jason
- Mise en place du wiki
- Réception du robot et des pinces sur lequel nous allons travailler
- Organisation du Semestre et des tâches à faire
Vendredi 21 octobre 2022:
Personnes présentes : Gabriel - Vianney - Jason
- Commencement de l'algorithme de détection d'objet
- Recherche de solution pour optimiser la détection d'objet
- Construction et débat sur le bac de remplissage
Vendredi 28 octobre 2022:
Personnes présentes : Gabriel - Vianney - Jason
- Modélisation du support pour la pince et le bac de remplissage
- Lancement de son impression
- Programmation des mouvements de la pince
Novembre
Vendredi 18 Novembre 2022: Personnes présentes : Gabriel - Vianney - Jason
- Réparation des servomoteurs de la pince
- Finition de l'algorithme de contrôle de la pince
- Recherche sur l'IA
- Installation du laser et de la photo résistance
Lundi 21 Novembre 2022: Personnes présentes : Gabriel - Vianney - Jason
- Finition sur l'algorithme de contrôle de pince
- Commencent des programmes de contrôle moteur
- Continuation sur l'IA
- Création d'un Git pour le projet
Vendredi 25 Novembre 2022: Personnes présentes : Gabriel - Vianney - Jason
- Continuation des programmes de contrôle moteur
- Contrôle de la Raspberry
- Continuation sur l'IA
Lundi 28 Novembre 2022:
Personnes présentes : Gabriel - Vianney - Jason
- Schéma d'interconnexion et des tâches de chaque module du robot
- Mise à jour du Wiki et du Git
- Connexion de la Raspberry
Décembre
Jeudi 8 Décembre 2022: Personnes présentes : Gabriel - Vianney - Jason
- Programmation et gestion des capteurs
- Paramétrage des Raspberry
- Collecte de mégot de cigarette pour la base d'image pour l'IA
- Commencement des soutenances et présentation