« SE5 ECEAI/eceai 2024/2025/benmbarek-elqastalani » : différence entre les versions

De wiki-se.plil.fr
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
 
(40 versions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
ECEAI
Pour ce TP d'IA, nous avons décidé de concevoir un système qui reconnaîtra des diverses formes.


le 03/09/2024 :
[[Fichier:2025013063924.jpg|centré|vignette|Formes utilisées]]


- Recherche du sujet


- Installation des logiciels;
== Réseau ==




=== Machine Virtuelle ===


le 05/09/2024 :
Nous avons créé un serveur virtuel sur capbreton : '''SE5-yelqasta-ybenmbar-IA'''
- Interface réseau dans le commutateur virtuel '''bridgeStudents'''.
- IP : 172.26.145.104


Ce serveur sera nous servira de broker MQTT, afin d'analyser et afficher les résultats dynamiquement.


=== Architecture Réseau ===


Nous avons décidé de concevoir un système qui détermine en premier temps la pression dans une balle en chute libre, puis si on avance bien prédire la hauteur du deuxième rebond.
Nous avons prévu cette architecture :
<div style="flex:1; padding-left:10px;">[[Fichier:Pppp.png|vignette|centré|571x571px]]</div>


* La Nucleo fera les mesures par le biais du capteur ToF;


On commence par capturer la hauteur initiale -> on mesure la hauteur maximale du premier rebond (avec quelques entrainements on peut calculer la pression) -> on mesure la hauteur du deuxième rebond -> on compare la valeur prédite et la valeur mesurée.
* La Raspberry recevra ces données par UART;


le matériel utilisé :
* Enfin, la machine virtuelle les recevra et les affichera.


- Raspberry pi
=== Réception et envoi de la Raspberry Pi ===


- Nucleo
La Raspberry Pi lit des données via l'UART et les publie sur le broker MQTT, de la machine virtuelle :
<syntaxhighlight lang="c">
import paho.mqtt.client as mqtt
import serial
import time


- Accéléromètre (pas pour le moment)
# Configuration UART
SERIAL_PORT = "/dev/ttyACM0"


Nous avons besoin //  
# Configuration MQTT
Notre première approche est de proposer un modèle simple de classification.
BROKER = "172.26.145.104"
PORT = 1883 
TOPIC = "IA/data"
CLIENT_ID = "client"


// La communication entre l'accéléromètre et la nucleo se fait en I2C.
# Connexion MQTT
def on_connect(client, userdata, flags, rc):
    if rc == 0:
        print("Connexion au broker MQTT réussie")
    else:
        print(f"Échec de connexion, code retour : {rc}")


// Possible Challenges:
client = mqtt.Client(CLIENT_ID)
client.on_connect = on_connect
client.connect(BROKER, PORT, 60)
client.loop_start()


// The trajectory of the falling object will almost always be non linear, which introduces new parameters to the equation.
# Configuration de la liaison série
try:
    ser = serial.Serial(SERIAL_PORT, BAUD_RATE, timeout=1)
    print(f"Ouverture du port série {SERIAL_PORT} à {BAUD_RATE} bauds")
except serial.SerialException as e:
    print(f"Erreur d'ouverture du port série : {e}")
    exit(1)


// Need to take in account the weight of the object, the size, the rebound behaviour (ricochet). (Probably need a soft surface in order not to damage the object).
try:
    while True:
        if ser.in_waiting:
            data = ser.readline().decode('utf-8').strip()
            if data:
                print(f"Donnée reçue : {data}")
                client.publish(TOPIC, data)
        time.sleep(0.1)  # Pour éviter une surcharge CPU
except KeyboardInterrupt:
    print("Arrêt du programme")
    ser.close()
    client.disconnect()
</syntaxhighlight>


// The length of the connection could probably affect the communication ? Would it be possible to store the experience data then feed the model, or should it be real time ?
== Apprentissage ==
 
 
Le matériel utilisé :
 
* Raspberry Pi 4
 
* Nucleo-F401RE
 
* Capteur de distance Nucleo-53L5A1
 
 
Notre Raspberry communiquera avec la Nucleo par liaison série UART. Elle servira aussi d'interface entre la Nucleo, qui sera entraînée à manipuler les données, et le réseau.
 
Nous avons mis en place un modèle simple de classification avec 3 classes, correspondant à 3 formes :
 
* Coeur
 
* Ours
 
* Soleil
[[Fichier:274314.jpg|gauche|vignette|Conditions de Mesure]]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Après avoir installé l'API X-CUBE-TOF1, qui nous permettra d'utiliser efficacement le capteur, nous avons pu "mettre en place" les données à envoyer.
 
Sous la forme d'une ligne, chaque coefficient de la matrice 8*8 est représenté :
 
[[Fichier:Captaaaa.png|centré|vignette|Distances (matrice 8*8) mesurées|571x571px]]
 
Pour ajouter des données d'entraînement, nous insérons des signaux sur NanoEdge AI. Ces données représentent des mesures réelles capturées par le capteur.
 
Comme nous avons 3 classes, nous allons le faire 3 fois :
 
[[Fichier:Capture d’écran du 2025-01-30 17-34-42.png|centré|571x571px]]
 
Voici un aperçu de la matrice :
 
[[Fichier:Capture d’écran du 2025-01-30 17-54-16.png|centré|571x571px]]
 
Après cela, nous avons pu générer un benchmark, représentatif de l'apprentissage du système :
 
[[Fichier:Qspkpocpqco.png|vignette|centré|571x571px]]
 
 
Notre benchmark indique 83% de fiabilité. Ce n'est pas l'idéal, mais c'est utilisable.
 
L’étape de validation dans NanoEdge AI Studio permet d’évaluer les performances du modèle généré.Pour ce faire, NanoEdge AI Studio compare les résultats du modèle avec les classes attendues et génère un rapport de performance :
 
[[Fichier:Pqspqopsckpoqc.png|centré|571x571px]]
 
[[Fichier:Pappapappapaa.png|centré|571x571px]]
 
Après avoir validé cette étape la librairie .a est alors prête à être exportée et intégrée au nucleo.

Version actuelle datée du 30 janvier 2025 à 17:13

Pour ce TP d'IA, nous avons décidé de concevoir un système qui reconnaîtra des diverses formes.

Formes utilisées


Réseau

Machine Virtuelle

Nous avons créé un serveur virtuel sur capbreton : SE5-yelqasta-ybenmbar-IA - Interface réseau dans le commutateur virtuel bridgeStudents. - IP : 172.26.145.104

Ce serveur sera nous servira de broker MQTT, afin d'analyser et afficher les résultats dynamiquement.

Architecture Réseau

Nous avons prévu cette architecture :

Pppp.png
  • La Nucleo fera les mesures par le biais du capteur ToF;
  • La Raspberry recevra ces données par UART;
  • Enfin, la machine virtuelle les recevra et les affichera.

Réception et envoi de la Raspberry Pi

La Raspberry Pi lit des données via l'UART et les publie sur le broker MQTT, de la machine virtuelle :

import paho.mqtt.client as mqtt
import serial
import time

# Configuration UART
SERIAL_PORT = "/dev/ttyACM0"

# Configuration MQTT
BROKER = "172.26.145.104"
PORT = 1883  
TOPIC = "IA/data"
CLIENT_ID = "client"

# Connexion MQTT
def on_connect(client, userdata, flags, rc):
    if rc == 0:
        print("Connexion au broker MQTT réussie")
    else:
        print(f"Échec de connexion, code retour : {rc}")

client = mqtt.Client(CLIENT_ID)
client.on_connect = on_connect
client.connect(BROKER, PORT, 60)
client.loop_start()

# Configuration de la liaison série
try:
    ser = serial.Serial(SERIAL_PORT, BAUD_RATE, timeout=1)
    print(f"Ouverture du port série {SERIAL_PORT} à {BAUD_RATE} bauds")
except serial.SerialException as e:
    print(f"Erreur d'ouverture du port série : {e}")
    exit(1)

try:
    while True:
        if ser.in_waiting:
            data = ser.readline().decode('utf-8').strip()
            if data:
                print(f"Donnée reçue : {data}")
                client.publish(TOPIC, data)
        time.sleep(0.1)  # Pour éviter une surcharge CPU
except KeyboardInterrupt:
    print("Arrêt du programme")
    ser.close()
    client.disconnect()

Apprentissage

Le matériel utilisé :

  • Raspberry Pi 4
  • Nucleo-F401RE
  • Capteur de distance Nucleo-53L5A1


Notre Raspberry communiquera avec la Nucleo par liaison série UART. Elle servira aussi d'interface entre la Nucleo, qui sera entraînée à manipuler les données, et le réseau.

Nous avons mis en place un modèle simple de classification avec 3 classes, correspondant à 3 formes :

  • Coeur
  • Ours
  • Soleil
Conditions de Mesure












Après avoir installé l'API X-CUBE-TOF1, qui nous permettra d'utiliser efficacement le capteur, nous avons pu "mettre en place" les données à envoyer.

Sous la forme d'une ligne, chaque coefficient de la matrice 8*8 est représenté :

Distances (matrice 8*8) mesurées

Pour ajouter des données d'entraînement, nous insérons des signaux sur NanoEdge AI. Ces données représentent des mesures réelles capturées par le capteur.

Comme nous avons 3 classes, nous allons le faire 3 fois :

Capture d’écran du 2025-01-30 17-34-42.png

Voici un aperçu de la matrice :

Capture d’écran du 2025-01-30 17-54-16.png

Après cela, nous avons pu générer un benchmark, représentatif de l'apprentissage du système :

Qspkpocpqco.png


Notre benchmark indique 83% de fiabilité. Ce n'est pas l'idéal, mais c'est utilisable.

L’étape de validation dans NanoEdge AI Studio permet d’évaluer les performances du modèle généré.Pour ce faire, NanoEdge AI Studio compare les résultats du modèle avec les classes attendues et génère un rapport de performance :

Pqspqopsckpoqc.png
Pappapappapaa.png

Après avoir validé cette étape la librairie .a est alors prête à être exportée et intégrée au nucleo.