Dispositif anti frelons asiatiques

De Learning Lab Environnements Connectés
Sauter à la navigation Sauter à la recherche

Le frelon asiatique est présent en France depuis les années 2000 et est considéré comme une espèce exotique envahissante. En effet, son régime alimentaire se compose principalement d’abeilles domestiques, ce qui contribue à briser l’équilibre de fonctionnement des ruches et de leur écosystème. Depuis avril 2020, le frelon asiatique est présent dans toute la France et dans de nombreux pays d’Europe. Ils représentent donc un danger à la fois pour l’homme et pour les ruches. Toutefois, les méthodes mises en place restent limitées : pièges à insectes, grilles à l'entrée des ruches, destruction des nids de frelons par des exterminateurs. Certains ingénieurs tentent également de développer des systèmes pour les empêcher de nuire. Néanmoins, cela reste trop théorique ou irréalisable, notamment avec le besoin du système d’avoir une alimentation constante avec la prise de secteur. On peut en conclure que le prix ou l'efficacité de ces systèmes sont encore des défauts majeurs. Cette menace doit être prise au sérieux, c’est pourquoi il peut être utile de s'intéresser à un système capable de protéger les ruches de ces prédateurs. Les frelons asiatiques se placent en vol stationnaire avant l’attaque d’une ruche et sont alors facilement détectables via un système d’acquisition basé sur de la reconnaissance par CNN. Une fois les coordonnées obtenues, l’objectif est d’éliminer la bête à l’aide d’un système laser capable de le faire fuir ou bien de lui brûler ou couper les ailes pour l'immobiliser. On recherche un système peu coûteux, autonome et simple d’utilisation.


Etude du frelon

Physiologie

Le frelon asiatique, ou Vespa Velutina, est arrivé pour la première fois en Europe en 2004.

Vespa Velutina

Il est caractérisé par un corps noir avec de fines bandes orangées et des pates aux extremités jaunes. Il se différencie facilement des frelons européens qui sont plus imposants et moins noir. Le frelon mesure environ 2 cm de longueur pour une largeur de 1cm. Il est assez puissant pour éliminer des abeilles européennes sans effort en les décapitant avec ses mandibules.

Menaces

En Europe, le Vespa Velutina n’a pas de prédateurs naturels, ce qui en fait un super-prédateur dans l’écosystème européen. En Asie, ils sont chassés par le frelon géant Vespa mandarinia, qui attaque entre 0 et 10 mètres. Cela oblige les frelons asiatiques à faire leur nid à plus de 10 mètres du sol, les rendant beaucoup moins menaçants qu’en Europe où ils peuvent faire leur nid où ils le souhaitent.

Attaque d'un frelon européen sur une rûche

Ils sont particulièrement agressifs envers les humains, qu’ils peuvent poursuivre sur plusieurs centaines de mètres, et attaquent également des ruches d'abeille européennes Apis Mellifera, qui sont incapable de se défendre contre de tels prédateurs. La localisation des nids est donc une priorité pour la préservation de notre écosystème. Cependant, aucune solution n’a été imaginée à ce jour, c’est pourquoi nous cherchons des systèmes capables de défendre directement les ruches domestiques. Lorsque les abeilles rentrent dans la ruche avec du pollen, elles ralentissent pour se poser et les frelons les attaquent à ce moment-là. Pour se défendre, les abeilles s'agglutinent à l’entrée de la ruche, mais elles interrompent ainsi leur opération de butinage, ce qui entraîne un manque de ressources pour l’hiver. Les abeilles seront alors soit éliminées par les frelons, soit mourront de faim. L’objectif principal des frelons étant de nourrir leur larves, ils ramènent les cadavres de leur victime à leur nid après s’être eux-mêmes nourri sur les abeilles et leur miel.

Comportement de vols

Il existe peu d’études sur la dynamique de vol et le comportement de prédation du frelon asiatique vis-à-vis de l’abeille domestique. L’enjeu ici serait de pouvoir étudier le comportement des frelons, d’analyser et d’extraire des données sur les comportements successifs de vol – visite, vol stationnaire, attaque, capture, fuite – afin de spécialiser le réseau de neurones.

Une étude a été menée dans l’article [1]. 71 frelons marqués grâce à des micro-systèmes d'identification par radiofréquence ont été relâchés autour du nid afin d’étudier leur comportement individuel. La moyenne est de 12,62 ± 10,97 trajets par jour et par individu. 98% des déplacements ont été enregistrés entre 7h00 et 20h00 ce qui a permis de négliger les trajets de nuit dans la suite avec un nombre maximal de trajet entre 12h et 15h00. Les conditions météorologiques influencent le nombre de trajets par jour par individu qui augmente avec une température plus élevée et une faible humidité.

La durée du voyage a été divisée en deux échantillons : les longs trajets de plus d'une heure et les courts trajets de moins d'une heure. Les longs trajets représentent 3,60 % des trajets La plupart des trajets étaient donc de courts trajets d'env. 949,7 ± 750,46 s. La durée de trajet n’est pas influencée par la masse corporelle.

Dans l’étude présentée par l’article [2], le comportement de vol du frelon est étudié dans un laboratoire grâce à un moulin à vol avec du miel pour stimulation. Les ouvrières volaient (2386 ± 1323) m par heure en moyenne avec cependant de grandes variations. La durée de vol était à peu près proportionnelle à la distance de vol, donc la durée moyenne de vol était de (1429 ± 679) s par heure. La vitesse de vol moyenne était de (1,56 ± 0,29) ms-1 avec peu de variations (plage de 0,90 ms−1 à 2,10 ms−1). Les distances de vol des travailleurs étaient stables pendant quelques jours à la fois, mais diminuent au cours de la durée de vie restante d'un travailleur.

Caractéristiques du comportement de vol calculées durant l'expérience

La répartition des phases de vol a également été étudiée. Au cours de chaque test en vol, les travailleurs ont généralement effectué plusieurs phases de vol, bien qu'il y ait eu une variation marquée. Ils ont également effectué plusieurs phases de saut (moyenne = 20), mais la contribution en pourcentage des phases de saut à l'activité de vol globale était minime (environ 0,2 %). La distance et la durée des phases de vol étaient très variables, ce qui rend un modèle de comportement très compliqué. La plupart des phases de vol étaient courtes. Cependant, 25% d'entre elles couvraient au moins 4000 m, 10% d'entre elles couvraient au moins 7900 m. Les phases de vol et de saut étaient séparées par des phases de repos de durée courte mais très variable (moyenne = (741 ± 1318) s).

Article [1]: https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0198597

Article [2]: https://onlinelibrary.wiley.com/doi/pdf/10.1002/ece3.4182

Etat de l'art

Système d'identification d'oiseaux

Il s'agit d'un projet qui est similaire à notre projet. L'auteur a conçu une caméra ornithologique de Deep Learning. C'est un système pour identifier automatiquement les oiseaux, prendre des mesures et enregistrer des vidéos d'eux. La caméra prend des photos et enregistre des vidéos automatiquement lorsque l'espèce spécifique d'oiseau se trouve devant la caméra. Avec l'aide de l'algorithme de détection d'objet qui est YOLOv2 dans l'article, nous pouvons facilement obtenir les coordonnées de l'oiseau.

Lien: https://www.makeartwithpython.com/blog/deep-learning-bird-camera/

Detection d'objets + coordonnées avec Yolov3

Un exemple peut rapidement démarrer avec la détection d'objets basée sur algo YOLO par Nandini.Y compris l'import de module, le prétraitement des données.Une fois le modèle formé, l'image obtenue par la caméra est utilisée comme entrée et plusieurs objets de cadre de délimitation peuvent être détectés.Cela a un certain degré de similitude avec notre projet, qui est basé sur la détection d'objet de algo YOLO, et peut retourner les coordonnées de l'objet détecté en même temps.Nous pouvons suivre ses étapes et modifier les poids et les paramètres en même temps pour obtenir les objets que nous devons détecter.

Lien: https://ichi.pro/fr/detection-d-objets-avec-yolov3-et-opencv-28510119961632

Projet similaire réalisé par une autre école

Une autre école d’ingénieurs française, L’ESILV, a proposé un sujet similaire à ses étudiants de dernière année en 2019-2020. Le système devait permettre de reconnaître un frelon grâce à une caméra et un algorithme entraîné à leur détection puis d’envoyer un faisceau laser pendant 2 secondes sur le frelon après vérification qu’aucun être humain ne soit dans la zone de tir.

Lien: https://www.esilv.fr/portfolios/canon-laser-de-defense-des-ruches-contre-les-frelons-asiatiques/

Système de vision

Caractéristiques du système

Schéma du dispositif

Nous considérons pour notre schéma une ruche Dadant 10 cadres avec les dimensions précisées. Cela peut s’étendre facilement à tout type de ruche dadant car les variations de dimensions reste inférieures à la distance de travail choisie qui est de 70 centimètres. Nous utilisons ici une caméra Raspberry Pi v2 8MP sur laquelle sera directement implémenté le réseau de neurones permettant de détecter et de transmettre les coordonnées d’un frelon s’approchant de la ruche.

Caméra

Caméra v2 8MP Raspberry Pi

Caméra v2 8MP Raspberry Pi

Résolution photo: 3280 x 2464 pixels

Résolution vidéo: 1080p30, 720p60 et 640x480p90

Taille du capteur: ¼”

Taille d'un capteur 1/4"

Focale: 3mm

Prix: 25 à 30 euros

Résolution

La résolution est le premier paramètre à calculer afin de choisir un capteur. Elle dépend à la fois du champ de vue ainsi que du plus petit élément. Nous avons fixé le champ de vue à 60 cm ainsi que le plus petit élément à détecter dans l’image à 1 mm. En effet la taille du frelon étant d’environ 2 centimètres, nous avons considéré qu’un plus grand champ de vue ou plus de détail ne serait pas utile à l’efficacité du pointage laser. La résolution est donnée par :

r= 2*(Champ de vue / Taille du plus petit élément) D’où r =1200 pixels au minimum.

Notre capteur suffit amplement à obtenir la résolution voulue et a également un bon rapport qualité/prix.

Compléments

Il est possible d’améliorer le système via l'implantation de fonctionnalités supplémentaires. En effet, lors de ses déplacements, le frelon asiatique émet un bruit caractéristique dont la fréquence fondamentale avoisine les 100 Hz, ce qui est différent des battements d’ailes des abeilles qui sont proches des 200 Hz. Il serait ainsi possible de mettre en place un détecteur acoustique capable d’alimenter le système complet dès qu’un bruit de frelon asiatique est repéré. Cela permettrait d’éviter une consommation excessive de batterie et ainsi d’augmenter la durée de vie du système.

Réseau de neurones

Nous avons décidé d'utiliser l'algorithme YOLO pour la détection des frelons. You only look once (YOLO) est un système de détection d'objets en temps réel à la pointe de la technologie. Nous avons testé YOLOv3 et YOLOv5. Nous avons trouvé YOLOv5 plus facile à déployer et plus précis, nous avons donc finalement décidé d'utiliser YOLOv5.

Nous n'avons pas trouvé d'ensemble de données pour le frelon asiatique sur Internet mais nous avons pu trouvé un ensemble de données pour le frelon européen. Nous avons donc décidé d'utiliser ce dernier pour tester notre réseau dans un premier temps. Ce premier test a présenté une précision supérieure à 90%. Nous ne pouvons pas entraîner le réseau neuronal sur notre propre ordinateur en utilisant le GPU. Nous avons donc décidé d'utiliser Google Colab pour les entraînements en ligne. Cela nous permet d'écrire et d'exécuter du code Python dans notre navigateur. Et il offre d'autres avantages tels que: aucune configuration requise, accès libre aux GPU et partage facile.

Détection: solutions et méthodes réalisés

Mise en place

Partie caméra

Au cours du sprint d’idéation, nous avions établi une distance caméra/entrée de la ruche de 2m. Nous avions donc prévu d’ajouter un objectif de focale 12 mm à la Picam pour obtenir les 50 cm de la ruche dans notre champ de vision. Finalement, après discussion avec notre porteur de projet, nous avons ramené notre distance de travail à 1 mètre. L'objectif inclus dans la Picam est alors suffisant pour obtenir le champ de vue nécessaire pour observer l’intégralité de la ruche. L'objectif de 12 mm et la monture C imprimé en 3D par Matthieu Dumay sont donc inutiles.

Nous avons effectué nos tests à 20 cm des frelons en 640x480p pour limiter la surchauffe et le temps de traitement.

Partie CNN et électronique

Nous implémentons notre détection de frelon sur le Raspberry Pi 3B. Il y a quatre principales étapes: Graver le système d'exploitation sur la carte SD 1. Décompressez le fichier compressé de l'image du système d'exploitation téléchargé pour obtenir le fichier image img 2. Après avoir utilisé le plateau de carte SD ou le lecteur de carte, connectez-le à l'ordinateur. 3. Décompressez et exécutez l'outil win32diskimager.

    Nous utilisons une carte SD qui a été gravée avec Linux.

Connexion externe Raspberry Pi Étant donné que le Raspberry Pi n'est pas livré avec un clavier et un moniteur, nous devons le connecter en externe. En même temps, nous connectons le Raspberry Pi à l'alimentation, afin qu'il puisse démarrer avec succès et que nous puissions voir l'interface sur l'écran.

Systeme.jpg
Ecran1.png

3. Configurez l'environnement requis pour que yolov5 s'exécute et caméra pi Installez Python sur la carte si ce n’est pas déjà fait. Téléchargez puis installez directement Torche et Torchvision. Passer par le terminal en exécutant directement “install -r requirements.txt” lors de la configuration de l'environnement YOLOv5 a une forte probabilité de ralentir grandement le téléchargement et qu'une erreur soit signalée. Après avoir téléchargé tous les environnements, configurez votre caméra à partir du terminal: sudo raspi-config Accédez à Caméra, sélectionnez Activer. Sélectionnez "Terminer" et redémarrez.

Commencer la détection

Nous plaçons le modèle formé localement (fichier .pt) dans le répertoire Yolo correspondant au Raspberry Pi, et grâce au script, nous pouvons réaliser la détection d'image et la surveillance de la caméra en temps réel.

Ecran2.png
Ecran3.png

Résultats

Notre réseau de neurones obtient de très bons résultats sur l’ensemble de validation. Nous obtenons un taux de précision de 100%. Nous obtenons la matrice de confusion suivante:

Nous pouvons obtenir un bon résultat sur le Raspberry Pi 3B aussi. Nous pouvons détecter la plupart des frelons avec un haut degré de confiance. De plus, nous pouvons enregistrer les coordonnées de centre de chaque bounding box dans un fichier txt.

Résultats après tests avec le réseau de neurones

Analyse critique

Nous avons rencontré plusieurs difficultés lors de nos tests. Tout d’abord, en se plaçant dans nos conditions de tests, la carte électronique surchauffe au bout d’une quinzaine de minutes d’utilisation, ce qui est limitant pour prendre des mesures. Le temps de traitement, d’une dizaine de secondes, est également inadapté à une utilisation sur le terrain. Ces difficultés s’expliquent par le choix du réseau de neurones YOLOv5, qui est certes puissant, mais demande trop de ressources.

Notre banque d’image nous a également fait défaut. Étant dans l’impossibilité d’acquérir une banque déjà réalisée, nous avons fait le choix d’en créer une nous même à partir de vidéos Youtube. Cependant, les frelons asiatiques sur les vidéos sont vivants et actifs, alors que nos cadavres de frelons pour nos tests sont recroquevillés, inertes et en décomposition et donc plus difficilement identifiables. Nous avons donc pris la décision de créer une nouvelle banque d’images directement à partir des cadavres fournis par Eric Verney. Avec cette dernière, nous obtenons un taux de précision de 100%, mais il aurait été intéressant de réaliser des tests avec des abeilles et des frelons sur la même image pour s’assurer qu'aucune confusion ne peut arriver entre les deux espèces.

Le système possède donc une grande marge d’amélioration et de nombreuses optimisations sont possibles.

Détection: pistes d'amélioration

Matériel vision

La caméra nous propose trois formats vidéo, 1920x1080p, 1280x720p ou 640x480p. Le choix de la Picam V2 est donc intéressant car elle est peu coûteuse (25 €) et propose un large choix de nombre de pixels pour la capture vidéo. Nous avons effectué les tests à 20 cm des frelons en 640x480p pour limiter la surchauffe et le temps de traitement. Une telle résolution n’est pas suffisante pour une distance de 70 cm, mais un format plus généreux en pixels nous permettra d’utiliser le système en conditions réelles. Il faudra également que le réseau de neurones soit entraîné avec des images correspondant à notre prise de vue.

Réseau de neurones

Nous avons entraîné un réseau de neurones YOLOv5s pour faire la détection qui a un niveau de précision assez élevé. Et il permet de détecter en temps réel les flux vidéo sur un PC. Mais nous devons configurer une caméra sur le Raspberry Pi 3B pour la détection, et la mémoire du Raspberry Pi 3B est de 1 Go, et la capacité du processeur est bien inférieure à celle du PC, donc il coûte souvent plus cher de détecter chaque image du image.temps. Il lui faut environ 8 secondes pour détecter les frelons sur une seule image. Nous pouvons essayer d'utiliser le réseau YOLOv5n qui a une structure plus simple. Mais cela va perdre en précision. Nous pouvons également essayer de convertir le modèle .pt en modèle .onnx dans le PC, puis l'importer dans le Raspberry Pi, puis le convertir en modèle intermédiaire IR via openvino pour obtenir une accélération.

Banque d'images

Les banques d’images déjà réalisées sont difficiles à obtenir. Nous avons alors sollicité des ingénieurs ayant déjà travaillé sur le sujet et possédant donc une banque d’images adaptée, mais nos mails sont restés sans réponse. La meilleure option serait de créer une véritable banque d’image avec de nombreuses prises de vues et différents zooms plus ou moins importants sur les frelons, mais cela requiert un temps considérable pour obtenir plusieurs centaines d’images adaptées.

Théorie système de guidage laser

L’objectif de cette étude est de trouver de manière théorique le meilleur système à mettre en œuvre pour guider le laser. L’idée est de parvenir à un système complet (choix de la carte, des composants, de la position du système dans l’espace etc.) et de prédire les caractéristiques (résolution, vitesse etc.)

Positionnement du système caméra et guidage

Tout au long de l’étude, nous avons émis l’hypothèse que les coordonnées précises du frelon détecté étaient préalablement obtenues par le système de vision caméra, précédemment étudiée.

Contexte de l'étude

Dans un premier temps, nous avons dû déterminer avec l’équipe la position du système (caméra + système guidage laser) selon l'axe Z. Cette information était primordiale pour la suite de notre étude théorique. Après de longues délibérations et études préalables pour déterminer la hauteur idéale du système pour les deux équipes, nous nous sommes entendus sur une hauteur de Z = 1 mètre. Nous avons également déterminé les limites de la scène (de film et de visée). (cf. schéma ci-dessous) La ruche qui nous a servi de référence pour notre étude est la ruche Dadant. La référence de notre de hauteur se fait au niveau du bas de la ruche Dadant 10 cadres (Z = 0 à ce niveau).

Schéma du montage vue de profil :

PriCapture1.PNG

Schéma du montage vue de dessus avec zone de tir :

PriCapture2.PNG

Ainsi, le fait de viser une zone spécifique réduit notre zone de tir et donc l’angle maximal que doit pouvoir prendre le laser. Si on suppose la caméra et le laser confondus, on obtient :

PriCapture3.PNG
PriCapture4.PNG

Avec Z= 1m et Xmax= 0.2 m ou Ymax= 0.3 m, on trouve PHImax = 16.7 degré et THETAmax= 11.3 degré

Etude de la position idéale du système

Le système étant symétrique suivant les directions x et y, nous pouvons réaliser l’étude uniquement sur l’une de ses dimensions. Nous avons choisi l’étude de x et donc de l’angle θ (la détermination de l’angle φ correspondant à la position en y découlera directement de cette étude). On peut représenter schématiquement le système de la manière suivante :

PriCapture5.PNG

Les équations suivantes découlent du schéma ci-dessus:

PriCapture6.PNG

Nous avons ainsi déterminé la relation liant l’angle consigne θ‘ de notre servomoteur en fonction de la position en x visée et de l’écart entre le centre de la caméra et le centre de la diode laser.

D’après la formule encadrée à gauche, un Z le plus grand possible permettrait de diminuer l’écart FF’ (qui correspond à la distance entre la position réelle du frelon et le point que nous visons à sa hauteur). Il faudrait donc maximiser Z pour maximiser nos chances de toucher le frelon s’il est situé “haut” par rapport à notre repère (bas de la ruche). En revanche l’encadré de gauche met en lumière que l’augmentation de Z rendra notre système moins précis en x. Il faudra donc trouver un compromis sur ce paramètre Z (les contraintes du groupe P028 pour la caméra seront aussi à prendre en compte).

Nous avons réalisé des simulations sur Excel pour illustrer ces phénomènes et trouver ce compromis en fixant les paramètres hauteur du frelon z = 5 cm et écart CL = 2 cm.

PriCapture7.PNG

On retrouve bien l’idée que cet écart de visée diminue quand la hauteur du système augmente.

PriCapture8.PNG

Cette seconde courbe illustre bien le fait qu’augmenter la hauteur du système Z nous fait perdre en résolution. On remarque donc qu’atteindre un pas xmin de 0.5 cm par exemple, nécessitera une résolution en angle bien plus faible. Il ne faut donc pas trop augmenter la hauteur du système. Nous avons également réalisé une étude pour voir l’impact de l’écart entre le centre de la caméra et du laser (CL) sur les performances de notre système.

Après simulation sur Excel, en faisant varier la hauteur du frelons et l’écart entre les deux centres, nous obtenons les courbes suivantes:

PriCapture9.PNG

On remarque que nous avons une relation quasi linéaire entre la coordonnée de visée en x et l’angle consigne du servomoteur θ’ correspondant (cohérent avec la taille des angles et la fonction tangente) et que l’angle théta n’est pas énormément impacté par de faibles écarts. En effet, lorsque l’écart entre les centres reste inférieur à 5 cm (ce qui est physiquement réalisable pour nous), les courbes sont quasiment les mêmes et proches de l’angle correspondant à un écart nul.

Lorsque l’on fait varier la hauteur z du frelon et que l’on cherche à déterminer l’écart entre le point de frappe à cette hauteur z et l’actuelle position en x du frelon à la hauteur z, on obtient la courbe suivante:

PriCapture10.PNG

La courbe ci-dessus montre que l’écart CL a un impact direct sur la FF’. Cet écart se dégrade lorsque CL augmente mais reste acceptable en dessous de 5 cm. L’idéal serait de garantir un écart CL de 2 cm, ce qui devrait être réalisable selon notre étude. D’après notre étude comportementale du frelon, celui-ci ne devrait pas être en vol stationnaire près de la ruche au - delà de 5 - 10 cm au-dessus de notre repère. La visée à ce stade semble donc faisable.

Étude de solutions pour l'orientation du laser

Première idée : Solution avec miroirs

Si nous en étions venus à choisir un laser peu portable et potentiellement lourd, nous avons pensé à diriger le faisceau du laser grâce à un jeu de deux miroirs comme ci-dessous.

PriCapture11.PNG

Cela nous aurait permis alors de ne pas avoir à déplacer le laser, ce qui aurait demandé beaucoup d’espace pour manoeuvrer et aurait été potentiellement long à déplacer, laissant alors le temps au nuisible de sortir de la zone de tir. Chacun des miroirs pourrait diriger le faisceau selon une direction pour pouvoir atteindre tous les points sur la zone de tir.

Cette solution représentait pour le porteur de projet un double intérêt car elle aurait aussi fait office de scanner optique.

Cependant, cette solution comportait de nombreux inconvénients: selon le laser choisi (hors visible comme de l’Infrarouge par exemple) les miroirs nécessaires auraient été coûteux, ce qui n’est pas compatible avec notre cahier des charges (coût de la solution) la taille des miroirs nécessaire pour que le rayon balaye toute la scène aurait également était plutôt importante et le système n’aurait donc pas été très portable et facile à installer (pas en accord avec le cahier des charges) L’étude optique engendré par cette solution complexifie la solution, la rend plus délicate à mettre en place et étant donné le temps de projet imparti aurait pu représenter un risque supplémentaire La fixation des miroirs sur les servomoteurs représentait également un challenge

Pour toutes ces raisons, cette solution n’a pas été retenue (elle était également déconseillée par notre expert technique).

Deuxième idée : Solution sans miroir

Cette solution consiste à fixer directement le laser sur les servomoteurs (avec des axes de rotation orientés selon des directions perpendiculaires grâce à un kit fourni par le porteur de projet). Dans l’étude préalable de la position idéale du système, nous avons utilisé cette configuration.

Il faut alors étudier la précision atteignable par le laser. cette dernière a été analysée comme suit :

PriCapture12.PNG

Dans la dernière formule, δt est le temps d’impulsion sur un servomoteur nécessaire pour obtenir une variation de δx. On a donc fixé δx comme notre précision maximale admissible (0.1 cm) et on a cherché le pire cas possible. Les variables sont zF et θ. On fixe alors dans un premier temps zF et on fait varier θ de 0 à 45°. Le résultat est le suivant :

PriCapture13.PNG

Ici, dT correspond à δθ. Le pire cas est celui où l’impulsion à réaliser est la plus courte. En effet, si elle diminue trop (10µs dans le cas de nos servomoteurs), elle ne sera pas détectée par le moteur et il n’y aura pas de mouvement. Ce cas est atteint pour un angle maximal. On se fixe alors à un angle de 45° et on fait varier zF de 0 à 30 cm. On obtient le résultat :

PriCapture14.PNG

Cette fois, c’est dans le cas du zF le plus petit que le résultat est le moins bon. Dans ce cas là, on obtient alors une impulsion nécessaire de 46µs (le résultat est obtenu car on sait que le moteur tourne à raison de 60° pour 0.1s). Ce résultat permet d’affirmer qu’une précision de 0.1cm sera toujours atteinte (dans la mesure où les limites posées, 45° et 30 cm, sont bien supérieures à celles utilisées en pratique qui ne dépassent pas 8.53° et 10 cm).

Réalisation système guidage laser

Objectifs

Le but de cette partie est l’obtention d’un prototype ainsi qu’une étude de la faisabilité du projet et des moyens à mettre en œuvre pour ladite réalisation. Cela consiste donc d’une part en l’utilisation du matériel obtenu lors du précédent travail théorique pour créer un outil capable de répondre aux besoins, et d’autre part en l’évaluation en laboratoire des performances d’un laser sur un frelon (selon la longueur d’onde employée, obtenir l’absorbance, la variation de température ou encore constater des dégâts visibles).

Là où la partie d’idéation a vu l’étude des moyens à employer pour répondre aux attentes, cette réalisation technique nous pousse à l’emploi de ces derniers. Ainsi, une première priorité est le ciblage du point défini comme correspondant à un frelon et une seconde la mesure de l’impact de différents lasers sur des cadavres des frelons.

Réalisation électronique: mise en place du prototype de visée

Le premier objectif a été réalisé via deux servo-moteurs commandés depuis une carte Raspberry Pi 4. Un test a donc été réalisé dans des conditions légèrement différentes à celles exposées dans le rapport précédent (sprint idéation). La hauteur de notre système a été fixée à 97 cm de hauteur par rapport à notre “mire” (niveau de l’entrée de la ruche) au lieu de 2 m comme choisi lors du sprint d’idéation. Ceci s’explique par la demande de l’expert technique de réduire la distance de visée et pour des raisons logistiques (contraintes techniques dans la salle d'Électronique). De plus la mire avait pour dimension: 42 x 29,7 cm (une feuille A3) au lieu des 60 x 30 cm présentés dans le rapport d’idéation. Les conditions expérimentales sont tout de même très proches de celles choisies lors de la phase d’idéation.

Voici le montage que nous avons mis en place:

PriCapture15.PNG

L'expérience a pour but de simuler une visée d'un laser selon les coordonnées obtenues par le système de vision. Le code a été développé dans le but de réaliser des mesures sur une mire constituée de 3 feuilles a4 collées entre elles. Nous avons donc, après la partie initialisation des ports PWM et le placement des servomoteurs dans une position initiale, inséré une boucle for nous permettant de viser 20 positions sur une diagonale. A la fin de la boucle, on peut apercevoir la ligne permettant aux servomoteurs de revenir dans un positions éloignées de la scène (la justification de ce choix est présenté ci-bas).

Résultat

Problèmes relevés :

PriCapture16.PNG

On remarque un phénomène d’hystérésis et un léger offset. Nous avons analysé le signal d’alimentation 5V et PMW des servomoteurs au Picoscope:

Observation du signal 5V et du signal PWM en entrée d’un servomoteur

Les mesures montrent que le signal 5V ne reste pas constamment à 5V, il faudrait donc utiliser une alimentation externe. On observe bien les créneaux attendus pour le signal PWM.

En observant plus précisément les signaux PWM en entrée des servomoteurs, on remarque que le signal émis est parfois déformé (état haut du créneau plus long que prévu), ce qui explique les vibrations des servomoteurs par moment. Ce signal semble interférer sur le fonctionnement des servomoteurs car ceux-ci vibrent après avoir touché le bon point de la cible. Pour contrer cet effet, nous pensions ajouter une résistance de 1kOhm comme recommandé sur certaines sources internet que nous avons consulté. La raison reste encore à expliciter. Notre hypothèse est que cela est dû aux temps de pull up et pull down qui définissent les états haut et bas des sorties.

Après ajout d’une alimentation externe de 5V (9V avec module pour adapter à 5V) nous avons constaté que le temps de réaction des servomoteurs a été nettement amélioré et les vibrations des servomoteurs limitées.

Voici le module utilisé: Alimentation 9V puis module d’adaptation 5V (ou 3.3V).

PriCapture18.PNG

En fréquentiel, on a :

PriCapture19.PNG

Si nécessaire, on aurait pu ajouter un filtre RC de fréquence de coupure 550 Hz, mais le signal PWM semble assez propre.

Nous avons également remarqué que lorsqu’un pas inférieur à 2 cm de position est demandé aux servo-moteurs, le servomoteur se met à osciller et a du mal à atteindre la consigne demandée. Pour éviter ce problème, une autre expérience a été réalisée avec un retour en position initiale avant chaque mesure. Il faudra également s’assurer que ce retour en position initiale soit garanti entre chaque tir par le système réel.


Ce code avait pour vocation de se rapprocher du code final de la phase visée de notre projet. En fonction de deux coordonnées cartésiennes (x et y), notre programme devait convertir ces dernières et entraîner les servomoteurs en mouvement de manière rapide et précise.

Le problème remarqué est que la stabilité des servomoteurs n’était pas garantie avec le programme sous cette forme. Nous avons pensé, après ajout des résistances (qui ont déjà bien limité ces vibrations), insérer dans notre code la commande pmw.ChangeDutyCycle(0),après chaque visée (et après un temps d’attente de 2s pour permettre au laser de bien prendre sa position). Par la suite il faudrait mettre en œuvre cette hypothèse pour avancer dans le projet.

Réalisation optique : observer l’effet d’un laser sur les frelons

Il est nécessaire de visualiser l’impact pratique du tir sur un frelon. Si la destruction réelle du frelon est impossible dans les conditions qui sont les nôtres, au moins était-il possible de déterminer la capacité du frelon à absorber l’énergie fournie par le laser selon la longueur d’onde. Ainsi, des tests ont été réalisés avec trois lasers de longueurs d’onde différentes, à savoir 405 (bleu-violet), 532 (vert) et 650 nm (rouge). L’étude s’est bornée à l’étude de la part du faisceau transmise et donc à l’effet du laser sur les ailes. Ce parti pris à pour intérêt de se concentrer sur ce qui constitue l’un des éléments les plus fragiles du frelon et donc l’une de ses faiblesses majeures. Dans un premier temps, l’étude à consisté en l’observation de la perte d’intensité du faisceau suite à la traversée d’une aile. Le montage était le suivant :


Photo du montage :

PriCapture20.PNG

Schéma du montage :

PriCapture21.PNG

Ce montage, s’il se rapprochait d’un cas réel (notamment dans la mesure où le laser ne touche pas le frelon de manière optimale dans tous les cas), elle présentait plusieurs défauts : La non-homogénéité des angles d’incidence sur l’aile La dispersion d’une partie du faisceau, non récupérée dans la fibre en sortie et donc non prise en compte le repliement des ailes sur elle-mêmes présentant une surface pas toujours similaire selon les cas Le résultat donne des transmissions très variables et particulièrement faibles. Il n’est pas spécialement exploitable. Suite à une discussion afin de trouver une solution avec notre expert technique, il a été envisagé un modèle plus rigoureux, décrit sur les photo et schéma du montage suivants :

PriCapture22.PNG

Dans ce modèle ou un puissancemètre a remplacé le spectrophotomètre, la configuration verticale du modèle permet un meilleur placement des ailes. Celles-ci sont cette fois-ci séparées de l’animal et dépliées avant d’être plaquées sur le capteur, récupérant la part diffusée par l’aile. Les principaux défauts du modèle précédent étant ainsi supprimés, le résultat obtenu devient alors plus homogène.

Tableau

PriCapture23.PNG

Il est à noter qu’une part du faisceau est réfléchie et n’est donc pas non plus absorbée. Ce taux de réflexion n’a pas été déterminé mais peut être estimé assez bas dans la mesure où les ailes sont transparentes. Le résultat, s’il indique de potentielles meilleures performances dans les longueurs d’ondes courtes, laisse cependant possible l’utilisation d’un laser rouge ou IR. De telles longueurs d’onde seraient en effet plus à même de chauffer instantanément le frelon et potentiellement de le faire fuir, si il n’est pas possible d’utiliser un laser à même de le tuer.

Annexes

Annexes 1: Schéma du montage de visée

PriCapture24.PNG

Annexes 2: Code de test de programmation de la carte Raspberry Pi

import RPi.GPIO as GPIO

import time

import math

import numpy as np

  1. Set function to calculate angle theta from position x

def position_x_to_angle_theta (position_x):

   if position_x <-20 or position_x > 20:
       return False
   return np.arctan(position_x/97)*(180/np.pi)
  1. Set function to calculate angle phi from position y

def position_y_to_angle_phi(position_y):

   if position_y <-30 or position_y > 30:
       return False
   return np.arctan(position_y/97)*(180/np.pi)
  1. Set function to calculate percent from angle theta

def angle_to_percent_theta (angle_theta):

   start = 4
   end = 12.5
   ratio = (end-start)/180
   angle_as_percent_theta = (angle_theta+90) * ratio
   return start + angle_as_percent_theta
  1. Set function to calculate percent from angle phi

def angle_to_percent_phi (angle_phi):

   start = 4
   end = 12.5
   ratio = (end-start)/180
   angle_as_percent_phi = (angle_phi+90) * ratio
   return start + angle_as_percent_phi



  1. servo and led param

GPIO.setmode(GPIO.BOARD)

GPIO.setwarnings(False)

pwm_gpio=16

pwm_gpio2=12

pwm_gpio3=18

frequence = 50

GPIO.setup(pwm_gpio, GPIO.OUT)

pwm = GPIO.PWM(pwm_gpio, frequence)

GPIO.setup(pwm_gpio2, GPIO.OUT)

pwm2 = GPIO.PWM(pwm_gpio2, frequence)

GPIO.setup(pwm_gpio3, GPIO.OUT)

  1. Initialisations/calibrage: position initiale du système

pwm.start(angle_to_percent_theta(-90))

time.sleep(2)

pwm2.start(angle_to_percent_phi(-90))

time.sleep(2)


pwm.start(angle_to_percent_theta(0))

time.sleep(2)

pwm2.start(angle_to_percent_phi(0))

time.sleep(2)


  1. Allumage de la LED une fois positionné sur la scène

GPIO.output(pwm_gpio3, True)

time.sleep(3)


  1. Boucle pour enchaîner les visées et mesures

for i in range (20,0,-1):

   angle_phi = position_y_to_angle_phi(i)
   angle_teta = position_x_to_angle_theta(i)
   pwm.start(angle_to_percent_phi(angle_phi))
   time.sleep(0.5)
   pwm2.start(angle_to_percent_phi(angle_phi))
   time.sleep(4)
   pwm.start(angle_to_percent_phi(-90))
   time.sleep(0.5)
   pwm2.start(angle_to_percent_phi(-90))


  1. Attente sur le point final de visée et extinction de la LED

time.sleep(6)

GPIO.output(pwm_gpio3, False)


  1. Arrêt de la visée

pwm.stop()

pwm2.stop()

GPIO.cleanup

Annexes 3: Code final de programmation de la carte Raspberry Pi

import RPi.GPIO as GPIO

import time

import math

import numpy as np

  1. Set function to calculate angle from position

def position_x_to_angle_theta (position_x):

   if position_x <-20 or position_x > 20:
       return False
   return np.arctan(position_x/97)*(180/np.pi)
   

def position_y_to_angle_phi(position_y):

   if position_y <-30 or position_y > 30:
       return False
   return np.arctan(position_y/97)*(180/np.pi)
  1. Set function to calculate percent from angles theta and phi

def angle_to_percent_theta (angle_theta):

   start = 4
   end = 12.5
   ratio = (end-start)/180
   angle_as_percent_theta = (angle_theta+90) * ratio
   return start + angle_as_percent_theta

def angle_to_percent_phi (angle_phi):

   start = 4
   end = 12.5
   ratio = (end-start)/180
   angle_as_percent_phi = (angle_phi+90) * ratio
   return start + angle_as_percent_phi



  1. servo and led param

GPIO.setmode(GPIO.BOARD)

GPIO.setwarnings(False)

pwm_gpio=16

pwm_gpio2=12

pwm_gpio3=18

frequence = 50

GPIO.setup(pwm_gpio, GPIO.OUT)

pwm = GPIO.PWM(pwm_gpio, frequence)

GPIO.setup(pwm_gpio2, GPIO.OUT)

pwm2 = GPIO.PWM(pwm_gpio2, frequence)

GPIO.setup(pwm_gpio3, GPIO.OUT)


  1. Initialisations/calibrage

pwm.start(angle_to_percent_theta(-90))

time.sleep(2)

pwm2.start(angle_to_percent_phi(-90))

time.sleep(2)


pwm.start(angle_to_percent_theta(0))

time.sleep(2)

pwm.start(angle_to_percent_theta(-90))

time.sleep(2)

pwm2.start(angle_to_percent_phi(-90))

time.sleep(2)


pwm.start(angle_to_percent_theta(0))

time.sleep(2)

pwm2.start(angle_to_percent_phi(0))

time.sleep(2)


  1. Eloignement de la scène pour pallier au phénomène d'oscillation dû à un pas trop faible

pwm.start(angle_to_percent_theta(-30))

time.sleep(2)

pwm2.start(angle_to_percent_phi(-30))

time.sleep(2)


angle_teta = position_x_to_theta (10) angle_phi = position_y_to_pĥi(10)


  1. Ici nous avons choisi arbitrairement le point de position (x,y) = (10,10)
  1. Dans un second temps, il faudra développer un code permettant de lire un fichier/librairie contenant les coordonnées fournies par l'autre groupe

pwm.start(angle_to_percent_theta(angle_theta))

time.sleep(2)

pwm2.start(angle_to_percent_phi(angle_phi))

time.sleep(2)


  1. Activation du jet laser pour “chauffage” du frelon

GPIO.output(pwm_gpio3, True)

time.sleep(5)

GPIO.output(pwm_gpio3, False)


  1. Arrêt de la visée

pwm.stop()

pwm2.stop()

GPIO.cleanup