Le Rapport

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 17

Filière : Génie systèmes électroniques

embarqués et commande des systèmes

Rapport du projet Python


Système d’aide à la conduite (ADAS) :
Système d’assistance à la régulation de vitesse par
reconnaissance des panneaux de signalisations.

Réalisé par :
• BOURIAL Yahya
• NOUMIR Nacer Allah
• OUELD EL HAIRECH Brahim
• MACHAY Yassine
• EL BACHA Otmane
• ED-DERBALI Khalil

Encadré par : Pr. HATIM Anas

Année universitaire : 2023/2024


Sommaire
Introduction :
Objectifs du projet :
Vision par ordinateur :
1. Librairie utilisée
2. Processus d’entrainement du modèle
3. Détection d’objet en temps réel
Régulation de vitesse :
1. Matériel
2. Interruptions et temporisations
3. Asservissement PID de la vitesse
Communication WIFI :
1. Communication MQTT
2. Communication Socket
Interface graphique :
1. Introduction
2. Utilisation de Qt Designer et PyQt :
Conclusion :

I
Introduction :

Dans le cadre du module Python et Projet de Réalisation, nous avons


développé un système intelligent capable de détecter les panneaux routiers à l'aide
de la vision par ordinateur. Ce système reconnaît les panneaux et envoie les
données à un microcontrôleur via une connexion réseau. Le microcontrôleur
ajuste ensuite la vitesse d'un moteur en utilisant un algorithme de contrôle. Enfin,
les données de vitesse du moteur sont visualisées en temps réel sur un tableau de
bord interactif.
Les systèmes d'aide à la conduite (ADAS - Advanced Driver Assistance
Systems) jouent un rôle crucial dans l'amélioration de la sécurité et de l'efficacité
des véhicules modernes. Ces systèmes utilisent des technologies avancées, telles
que la vision par ordinateur, les capteurs et les algorithmes de traitement des
données, pour assister les conducteurs dans diverses tâches, comme le maintien
de la trajectoire, le freinage d'urgence et la reconnaissance des panneaux de
signalisation. En intégrant ces technologies, les ADAS réduisent le risque
d'accidents, améliorent le confort de conduite et contribuent à la transition vers
des véhicules autonomes.
Le développement de ce système a nécessité l'intégration de plusieurs
technologies avancées. La vision par ordinateur permet de capturer et d'analyser
les images pour identifier les panneaux routiers avec une grande précision. Une
fois les panneaux détectés, les informations sont transmises à un microcontrôleur,
qui joue un rôle crucial dans le traitement des données reçues et le contrôle du
moteur.
L'algorithme de contrôle implémenté sur le microcontrôleur permet de
réguler la vitesse du moteur de manière précise et stable. Cela est essentiel pour
garantir que le système réagit de manière appropriée aux panneaux de
signalisation détectés, tels que les limitations de vitesse ou les arrêts obligatoires.
Pour la visualisation des données, nous avons développé un tableau de bord
en temps réel utilisant une interface graphique conçue en Python. Ce tableau de
bord permet de suivre en direct la vitesse du moteur, fournissant ainsi une vue
d'ensemble claire et immédiate des performances du système. L'interface
graphique est intuitive et offre des fonctionnalités interactives qui facilitent
l'analyse et la compréhension des données.

1
Objectifs du projet :

L'objectif principal de ce projet est de développer un système capable de


détecter et de reconnaître les panneaux routiers pour améliorer la sécurité et
l'efficacité de la gestion du trafic. Plus précisément, les objectifs du projet
incluent : premièrement, l'automatisation de la détection des panneaux routiers en
créant un algorithme de vision par ordinateur capable de détecter et d'identifier
les panneaux routiers en temps réel avec une grande précision ; deuxièmement, la
transmission des données en temps réel en mettant en place une communication
efficace entre le système de détection et un microcontrôleur, permettant la
transmission rapide et fiable des informations des panneaux détectés ;
troisièmement, le contrôle de la vitesse du moteur en implémentant un algorithme
de contrôle sur le microcontrôleur pour ajuster dynamiquement la vitesse du
moteur en fonction des panneaux routiers détectés, garantissant ainsi une réponse
appropriée et sécurisée ; quatrièmement, la visualisation interactive des données
en développant une interface graphique conviviale pour visualiser en temps réel
les données de vitesse du moteur, offrant aux utilisateurs une vue d'ensemble
claire et intuitive des performances du système ; et cinquièmement, l'amélioration
de la sécurité routière en fournissant un système capable d'assister les conducteurs
ou les véhicules autonomes dans la reconnaissance des panneaux de signalisation,
réduisant ainsi le risque d'accidents dus à des erreurs humaines.

2
Vision par ordinateur :

1. Librairie utilisée
YOLOv8 (You Only Look Once version 8) est une architecture avancée
pour la détection d'objets en temps réel, qui combine efficacité et précision.
Conçue pour améliorer les performances des versions précédentes, YOLOv8
intègre plusieurs améliorations techniques.
YOLOv8 utilise une structure de réseau neuronal optimisée, incluant des
couches de convolution améliorées, des mécanismes d'attention et des connexions
résiduelles, afin d'améliorer l'extraction de caractéristiques et la détection d'objets.
Comme ses prédécesseurs, YOLOv8 peut utiliser des modèles pré-entraînés
sur de grandes bases de données pour optimiser les performances sur des tâches
spécifiques avec moins de données annotées.
YOLOv8 est conçu pour détecter des objets de tailles variées dans une
même image plus efficacement, améliorant ainsi la précision de la détection à
différentes échelles.
Fidèle à l'approche YOLO, YOLOv8 peut traiter des images à grande
vitesse, le rendant idéal pour des applications en temps réel telles que la
vidéosurveillance, la conduite autonome et les systèmes de sécurité.
YOLOv8 vise à améliorer des métriques de performance telles que le «
Mean Average Precision » (mAP), réduisant les faux positifs et augmentant la
précision des détections tout en maintenant une vitesse de traitement élevée.

3
2. Processus d’entrainement du modèle
a. Collecte et Préparation des Données :

Nous avons rassemblé un ensemble de données comprenant des milliers


d'images de panneaux de signalisation routière provenant de diverses sources, et
prises dans diverses conditions de luminosité, angles de vue, et conditions
météorologiques, y compris des bases de données publiques et des captures
d'images réelles. Chaque image a été annotée pour indiquer la position et la classe
des panneaux de signalisation.

Le document .txt :

b. Structure des Données :


Les données d'entraînement ont été organisées en deux parties principales :
• Images : Les fichiers d'image eux-mêmes, stockés dans
un format standard tel que JPEG ou PNG.
• Annotations : Les fichiers de texte associés à chaque
image, contenant les coordonnées des boîtes englobantes
(bounding boxes) et les labels des classes des panneaux.
Le format YOLO utilisé pour les annotations spécifie les
coordonnées normalisées du centre de la boîte, ainsi que
sa largeur et sa hauteur, suivis par l'identifiant de la classe
du panneau.

4
c. Prétraitement des Données :
• Redimensionnement des Images : Toutes les images ont été
redimensionnées à une résolution uniforme pour correspondre aux
exigences d'entrée du modèle YOLOv8m.

d. Entraînement du Modèle :
• Configuration : Le modèle YOLOv8m a été configuré avec des
hyperparamètres optimisés pour notre jeu de données, incluant le taux
d'apprentissage, la taille des batchs, et le nombre d'époques.

• Entraînement : L'entraînement a été réalisé en


utilisant une infrastructure GPU puissante pour
accélérer le processus (Google Colab). Le modèle
a été formé en itérant sur les données
d'entraînement, ajustant ses poids pour minimiser
l'erreur de prédiction.
• Validation : Une partie des données a été réservée pour
la validation, permettant de surveiller la performance du modèle sur des
données non vues et d'ajuster les hyperparamètres en conséquence.

e. Évaluation et Optimisation :
• Métriques d'Évaluation : La performance du modèle a été évaluée à l'aide
de métriques telles que la précision moyenne (mAP) et le taux de détection
des faux positifs/négatifs.
• Optimisation : Des ajustements ont été faits au modèle et aux données
d'entraînement pour améliorer les résultats, incluant la révision des
annotations et l'ajustement des hyperparamètres.

En utilisant ce processus d'entraînement structuré et rigoureux, nous avons pu


développer un modèle YOLOv8m capable de détecter avec précision les
panneaux de signalisation en temps réel, répondant ainsi aux exigences de notre
système intelligent de gestion du trafic.

5
3. Processus de Détection d'Objets en Temps Réel :

Ce code utilise le modèle de détection d'objets YOLOv8


pour l'analyse en temps réel des objets à partir d'un flux vidéo de
la webcam. Il s'appuie sur deux bibliothèques principales :
OpenCV (`cv2`) pour la capture et le traitement vidéo, et
Ultralytics pour l'implémentation du modèle YOLOv8.
OpenCV est une bibliothèque de vision par ordinateur
largement utilisée qui fournit des fonctions pour le traitement
d'images et de vidéos, tandis qu'Ultralytics est une boîte à outils
pour des algorithmes de détection et de suivi d'objets de pointe, avec YOLOv8
comme l'une de ses implémentations.

Le processus commence par l'initialisation de la capture de la webcam et le


chargement du modèle YOLOv8. La webcam capture continuellement des
images, et chaque image est envoyée au modèle YOLOv8 pour la détection
d'objets. Une fois que des objets sont détectés dans une image, leurs boîtes
englobantes et leurs étiquettes sont annotées sur l'image. Cette image annotée est
ensuite affichée dans une fenêtre intitulée "THE DETECTION" en utilisant les
fonctions d'affichage d'OpenCV. Tout au long de ce processus, le code assure une
manipulation efficace des résultats de détection d'objets et la visualisation des
objets détectés en temps réel.

6
Régulation de vitesse :

1. Matériel :
Composants Utilisés
• Carte ESP32
• Convertisseur hacheur
• Moteur avec encodeur
• Fils conducteurs
Le moteur est composé de trois couches :
1. Encodeur : Il se compose de deux capteurs magnétiques et d'un
disque avec 32 aimants alternant 16 pôles nord et 16 pôles sud, placés
alternativement.
2. Réducteur : Il permet d'augmenter le couple en réduisant la vitesse.
3. Axe : La partie visible du moteur qui transmet le mouvement
mécanique. L'encodeur fournit des informations sur la vitesse et la direction de
rotation. Un capteur mesure la vitesse, tandis que l'autre capteur, décalé, permet
de déterminer le sens de rotation. Dans notre application, nous nous intéressons
uniquement à la vitesse, donc un seul signal numérique est utilisé et connecté à la
broche 14 de l'ESP32.
La relation entre le nombre de tics de l'encodeur et la vitesse de rotation
du moteur est donnée par : Vitesse (tr/min) =60×tics/(31×32Vitesse) où :
• 60 est utilisé pour convertir les secondes en minutes,
• 31 est le rapport du réducteur (31 tours du réducteur équivalent à un
tour de l'axe),
• 32 est le nombre de tics par tour.

7
2. Interruptions et temporisations :
Pour gérer le signal de l'encodeur dans l'ESP32, nous utilisons une
interruption sur la broche 14 avec la fonction attachInterrupt prédéfinie dans l'IDE
Arduino.
Voici les détails de cette fonction :
• Premier argument : La broche désirée (pin 14).
• Deuxième argument : Le nom de la routine de service d'interruption (ISR).
• Troisième argument : Le type d'interruption, dans notre cas, CHANGE pour
détecter chaque changement d'état du signal.
La routine d'interruption (ISR) incrémente un compteur qui représente les
tics de l'encodeur. L'utilisation des interruptions est essentielle pour les
applications où la vitesse de l'encodeur varie rapidement et où des mesures
précises sont nécessaires. Nous continuons à incrémenter ce compteur pendant
une période d'échantillonnage 𝑇𝑒.
Deux fonctions principales sont utilisées :
• timer.setInterval(): Pour ajuster les paramètres du timer (temporisation et
routine à exécuter après la temporisation).
• La routine appelée après la temporisation est notre asservissement PID.
Récapitulons : nous avons configuré une interruption sur la broche 14 pour
incrémenter le compteur de tics, nous incrémentons ce compteur pendant une
temporisation de Te=20 ms, puis nous procédons à l'asservissement du moteur.
3. Asservissement PID de la vitesse :

Après chaque période de temporisation de 20 ms, nous prenons la valeur


des tics et la convertissons en vitesse selon la relation mentionnée précédemment :
Vitesse (tr/min) =60×tics31×32Vitesse (tr/min) =31×3260×tics
Nous calculons ensuite les termes du PID :
• Erreur : Erreur=Consigne de vitesse−Vitesse mesurée
• Intégrale : La somme des erreurs passées.
• Dérivée : La différence entre l'erreur actuelle et l'erreur précédente.

8
Ces termes sont pondérés par les coefficients 𝑘𝑝, 𝑘𝑖, et 𝑘𝑑 pour obtenir la
commande de vitesse. Cette commande est transmise au moteur via un
convertisseur hacheur qui adapte la tension fournie au moteur.

9
Communication WIFI :

1. Communication MQTT :
Après avoir élaboré la vitesse de consigne, nous utilisons la communication
MQTT pour transmettre cette vitesse à une carte ESP32 qui contrôle le moteur.

Le protocole MQTT, ou Message Queuing Telemetry Transport, est un


protocole de messagerie léger conçu pour les connexions de machine à machine
et l'Internet des objets. Il fonctionne sur un modèle de publication/abonnement,
où les clients peuvent publier des messages sur des sujets spécifiques et s'abonner
à ces sujets pour recevoir les messages correspondants. Ce protocole est
particulièrement efficace pour les environnements à faible bande passante et les
réseaux instables.

Pour commencer, le code de traitement d'image sur le PC calcule la vitesse


de consigne du moteur. Cette vitesse de consigne est ensuite publiée sur un sujet
spécifique, par exemple "motor_speed", via un broker MQTT. Le broker agit
comme un intermédiaire qui gère la distribution des messages aux clients abonnés.

Ensuite, l'ESP32 est configurée comme client MQTT et s'abonne au sujet


"motor_speed". Lorsqu'un message est publié sur ce sujet, l'ESP32 le reçoit et
déclenche une fonction de rappel, ou callback. Cette fonction de rappel traite le
message reçu, extrait et décode la valeur de la vitesse de consigne.

Finalement, l'ESP32 utilise la valeur décodée de la vitesse de consigne pour


ajuster la vitesse du moteur en conséquence. Ce processus se déroule en temps
réel, permettant ainsi une réponse rapide aux changements de consigne. Le moteur
est contrôlé via des sorties PWM (modulation de largeur d'impulsion) de l'ESP32,
qui régulent la puissance fournie au moteur en fonction de la vitesse de consigne
reçue. Grâce à cette approche, il est possible d'assurer un contrôle précis et

10
dynamique du moteur, répondant efficacement aux exigences de l'application tout
en tirant parti de la simplicité et de l'efficacité du protocole MQTT pour la
communication entre le PC et l'ESP32.

2. Communication Socket :
Dans ce projet, nous utilisons la communication par socket pour transmettre
la vitesse réelle d'un moteur, contrôlée par une carte ESP32, vers une autre
application qui affiche une interface graphique (GUI) écrite en Python. La
communication par socket est essentielle pour établir une connexion
bidirectionnelle entre ces deux processus, permettant l'échange fluide de données
sur un réseau local.

Un socket est un point de terminaison d’une communication


bidirectionnelle entre deux processus ou programmes exécutés sur un réseau. Pour
notre application, le processus impliquant l'ESP32 et la GUI Python crée chacun
un socket. Chaque socket est associé à une adresse IP et un numéro de port
spécifique, ce qui permet aux deux processus de recevoir et envoyer des données
de manière fiable. L'ESP32, fonctionnant sous un système d'exploitation en temps
réel (FreeRTOS), gère le processus de communication avec un système de
"message passing" sur un réseau WiFi local.

Dans cette configuration, le client, qui est le code de l'interface graphique,


établit une connexion avec le serveur, qui est l'ESP32. Ce processus de connexion
initial, appelé "handshake", est suivi par une requête envoyée par le serveur. Le
serveur attend l'acceptation de la connexion par le code Python, puis envoie les
données de vitesse réelle encodées en octets. Pour garantir la précision et l'ordre
des paquets de données, nous utilisons des sockets TCP, qui assurent une livraison
ordonnée et fiable des messages.

L'implémentation en Python commence par la création d'un communicateur


avec des champs tels que l'adresse IP, le numéro de port, la taille du Buffer, et la
taille de la queue. La vitesse réelle est encodée en octets et placée dans une file
d'attente à l'aide de la méthode « send_msg », appartenant à la classe
WiFiCommunicator de l'instance Communicator. Cette donnée est ensuite placée
dans le buffer et envoyée. De l'autre côté, le processus de réception prend cette

11
information, la décode et la place dans une file d'attente de réception à l'aide de la
méthode « get_msg ».

Cependant, établir la connexion, écouter les informations et envoyer ou


recevoir des données doivent se faire simultanément. Pour ce faire, nous utilisons
des threads. Un thread est une partie du processus qui s’exécute en parallèle à
d’autres, permettant ainsi une exécution concurrente ou en temps partagé des
différentes tâches. L'utilisation de threads permet à notre application de gérer
efficacement les opérations d'envoi et de réception de données, assurant ainsi une
communication continue et fluide entre l'ESP32 et la GUI Python.

12
Interface graphique :

1. Introduction :
L'interface graphique joue un rôle essentiel dans la présentation des
données et l'interaction avec le système. Dans le cadre de ce projet, nous avons
développé un tableau de bord interactif pour visualiser en temps réel la vitesse du
moteur et d'autres paramètres essentiels. Cette interface permet aux utilisateurs de
suivre les performances du système de manière intuitive et conviviale, facilitant
ainsi l'analyse et la prise de décision.

Une interface graphique bien conçue est cruciale pour assurer que les
utilisateurs peuvent accéder rapidement aux informations importantes et interagir
efficacement avec le système. Elle doit être intuitive, réactive et esthétiquement
plaisante pour garantir une expérience utilisateur optimale. Dans ce contexte, le
choix des outils de développement et la méthode de conception jouent un rôle
déterminant dans la qualité du produit final.
2. Utilisation de Qt Designer et PyQt :
Pour la conception de notre interface graphique, nous avons choisi d'utiliser
Qt Designer et PyQt. Qt Designer est un outil puissant de création d'interfaces
graphiques, permettant de concevoir visuellement les composants de l'interface
sans avoir à écrire de code. Cette approche accélère le processus de
développement et garantit une cohérence visuelle.

13
• Qt Designer :
Qt Designer est un outil de conception d'interfaces graphiques intégré à
l'écosystème Qt. Il offre une interface utilisateur intuitive pour disposer et
configurer les widgets, les boutons, les menus et les autres éléments interactifs.
En utilisant Qt Designer, nous avons pu créer rapidement un prototype de notre
tableau de bord, en nous concentrant sur l'ergonomie et la facilité d'utilisation. Les
fichiers générés par Qt Designer (.ui) sont ensuite convertis en code Python à
l'aide de l'outil pyuic5, ce qui permet une intégration transparente avec PyQt.

• PyQt :
PyQt est une bibliothèque Python qui permet de lier le framework Qt à des
applications Python. Elle fournit les outils nécessaires pour implémenter des
interfaces graphiques complexes et réactives. Après avoir conçu l'interface avec
Qt Designer, nous avons utilisé PyQt pour ajouter la logique de l'application, gérer
les événements et mettre à jour l'affichage en temps réel.

Grâce à PyQt, nous avons pu :

- Charger et afficher les interfaces conçues avec Qt Designer.


- Connecter les widgets aux données de notre système, permettant ainsi une
visualisation en temps réel de la vitesse du moteur.
- Implémenter des fonctionnalités interactives, telles que la possibilité de
modifier certains paramètres du système directement depuis l'interface
graphique.

En conclusion, l'interface graphique développée dans ce projet a permis de


visualiser en temps réel la vitesse du moteur et d'autres paramètres critiques,
offrant ainsi une vue d'ensemble claire et immédiate des performances du
système. L'utilisation combinée de Qt Designer et PyQt a facilité la création d'une
interface intuitive, réactive et esthétiquement plaisante.

14
Conclusion :
Le développement de notre Système d’assistance à la régulation de vitesse
par reconnaissance des panneaux de signalisations (ADAS) représente une
avancée significative dans l'intégration des technologies de vision par ordinateur,
de contrôle moteur et de communication réseau pour améliorer la sécurité routière
et l'efficacité des véhicules modernes. En exploitant l'architecture avancée
YOLOv8 pour la détection en temps réel des panneaux de signalisation, nous
avons pu concevoir un modèle performant capable d'identifier divers types de
panneaux avec une grande précision, même dans des conditions variées.

L'implémentation de l'algorithme de contrôle PID sur un microcontrôleur


ESP32 permet une régulation précise et stable de la vitesse du moteur en réponse
aux panneaux détectés, assurant une réaction rapide et appropriée aux limitations
de vitesse et aux arrêts obligatoires. La communication efficace entre les
différents composants du système, via les protocoles MQTT et socket, garantit
une transmission rapide et fiable des données, crucial pour une gestion en temps
réel.

Enfin, la visualisation des données de vitesse du moteur sur un tableau de


bord interactif en Python offre une interface utilisateur intuitive et conviviale,
permettant une surveillance en direct des performances du système. Cette
visualisation facilite non seulement l'analyse des données, mais contribue
également à une meilleure compréhension et amélioration continue du système.

En résumé, ce projet illustre comment l'intégration de technologies


avancées peut transformer les systèmes d'aide à la conduite, rendant les véhicules
plus sûrs et plus efficaces. Les résultats obtenus démontrent le potentiel de ces
technologies pour réduire les risques d'accidents et améliorer le confort de
conduite, tout en ouvrant la voie vers des véhicules autonomes plus fiables. Notre
travail constitue une base solide pour des développements futurs, incluant
l'amélioration des algorithmes de détection, l'optimisation du contrôle moteur et
l'enrichissement des fonctionnalités de l'interface graphique.

15

Vous aimerez peut-être aussi

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy