« SE5 ECEAI/eceai 2023/2024/CharleuxHabre » : différence entre les versions

De wiki-se.plil.fr
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 4 : Ligne 4 :


=Objectif=
=Objectif=
On souhaite lors de ce TP optimiser les performances et la consommation en distribuant la charge de calcul. On utilisera pour cela des capteurs alimentées par une STM32 connectés en série à un Raspberry PI. Ce Raspberry PI communiquera avec un protocole WIFI vers un serveur.
On souhaite lors de ce TP optimiser les performances et la consommation en distribuant la charge de calcul. On utilisera pour cela des capteurs alimentés par un STM32 connectés en série à un Raspberry PI. Ce Raspberry PI communiquera avec un protocole WIFI vers un serveur.


=Compte rendu des séances=
=Compte rendu des séances=
Ligne 10 : Ligne 10 :
==Séance du 04/12/2023==
==Séance du 04/12/2023==


On créer une machine virtuelle xen '''JK''' sur le serveur chassiron :
On créé une machine virtuelle xen '''JK''' sur le serveur chassiron :


<code>xen-create-image --hostname=JK --force --dist=bookworm --size=10G --memory=10G --dir=/usr/local/xen --password= --dhcp --bridge=bridgeStudents</code>
<code>xen-create-image --hostname=JK --force --dist=bookworm --size=10G --memory=10G --dir=/usr/local/xen --password= --dhcp --bridge=bridgeStudents</code>


On configure ensuite la VM pour avoir accès à internet en IPV6 :
On configure ensuite la VM pour avoir accès à internet en IPV6 :
* La configuration de la carte réseau en IPV6 s’effectue dans le fichier /etc/network/interfaces :
* La configuration de la carte réseau en IPV6 s’effectue dans le fichier ''/etc/network/interfaces'' :
<code>
<code>
auto enX0</code>
auto enX0</code>


<code>iface enX0 inet6 auto</code>
<code>iface enX0 inet6 auto</code>
* On configure le DNS dans le fichier /etc/resolv.conf :
* On configure le DNS dans le fichier ''/etc/resolv.conf'' :
<code>domain plil.info</code>
<code>domain plil.info</code>


Ligne 26 : Ligne 26 :


<code>nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c</code>
<code>nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c</code>
* On ajoute les sources de paquets et mis à jour dans le fichier /etc/apt/sources.list :
* On ajoute les sources de paquets et mis à jour dans le fichier ''/etc/apt/sources.list'' :
<code>deb    http://deb.debian.org/debian    bookworm main contrib non-free non-free-firmware</code>
<code>deb    http://deb.debian.org/debian    bookworm main contrib non-free non-free-firmware</code>


<code>deb-src http://deb.debian.org/debian    bookworm main contrib non-free non-free-firmware</code>
<code>deb-src http://deb.debian.org/debian    bookworm main contrib non-free non-free-firmware</code>
* Enfin on supprime /etc/apt/apt.conf.d/01proxy pour pouvoir utiliser le gestionnaire de paquet apt.On peut par la suite autoriser l'accès root en ssh.
* Enfin on supprime ''/etc/apt/apt.conf.d/01proxy'' pour pouvoir utiliser le gestionnaire de paquet apt. On peut par la suite autoriser l'accès root en ssh.
Et on installe Python et Mosquitto MQTT Broker pour plus tard.
On installe finalement Python et Mosquitto MQTT Broker pour plus tard.
 
On peut par la suite autoriser l'accès root en ssh, on installe finalement Python et Mosquitto MQTT Broker pour plus tard.


* On réalise ensuite des tests sur le capteur en liaison avec la STM32 afin de comprendre son fonctionnement. On utilise en lisant la documentation constructeur le logiciel VL53L5CX nous permettant de visualiser graphiquement les données du capteur et ses caractéristiques en temps réel.
* On réalise ensuite des tests sur le capteur en liaison avec la STM32 afin de comprendre son fonctionnement. On utilise en lisant la documentation constructeur le logiciel VL53L5CX nous permettant de visualiser graphiquement les données du capteur et ses caractéristiques en temps réel.


On télécharge par la suite les différents logiciels nécessaires pour programmer la STM32 (STM32 Cube IDE, Nano Edge Studio, STM32 MX).
On télécharge par la suite les différents logiciels nécessaires pour programmer la STM32 (STM32 Cube IDE, Nano Edge Studio, STM32 Cube MX).


On veut utiliser un Raspberry PI pour communiquer avec le capteur, on installe RaspberryOS sur la carte et on la connecte à internet. On pourra éventuellement par la suite utiliser VNC Viewer pour avoir une interface graphique.
On veut utiliser un Raspberry PI pour communiquer avec le capteur, on installe donc par la même occasion RaspberryPiOS sur une carte MicroSD. Mais avant de l'installer sur la carte MicroSD, on active la connexion en SSH et la connexion à un réseau WIFI, ce qui nous évite d'avoir à nous embêter plus tard. Une fois la carte MicroSD insérée dans le Raspberry Pi, on peut s'y connecter en SSH et éventuellement via VNC Viewer pour avoir une interface graphique. En nous y connectant en SSH, in y installe Python avec les librairies nécessaires


==Séance du 18/12/2023==
==Séance du 18/12/2023==


On programme la STM32 avec l'IDE fournit par ST, celui ci permet de compiler et de téléverser le programme vers la carte. On garde le programme d'exemple qui affiche les valeurs du capteurs en 4*4 sur le port UART2. En vérifiant la vitesse de communication du port avec STM32 Cube MX, on peut visualiser le tableau de donnée avec PuTTY ou Python.
On programme la STM32 avec l'IDE fournit par ST, celui-ci permet de compiler et de téléverser le programme vers la carte. On garde le programme d'exemple qui affiche les valeurs du capteurs en 4*4 sur le port UART2. En vérifiant la vitesse de communication du port (460800 baud) avec STM32 Cube MX, on peut visualiser le tableau de donnée avec PuTTY ou Python (sur Windows).


Nous décidons de mettre en forme le tableau de donnée après l'acquisition sur la Raspberry PI avec un script Python.
Nous décidons de mettre en forme le tableau de donnée après l'acquisition sur la Raspberry Pi avec un script Python.


Afin de communiquer ces données de la Raspberry PI au serveur, on décide d'utiliser le protocole MQTT, celui ci nous semble adapté pour l'IOT et les communications à faible délais. On a alors installé Mosquitto MQTT Broker sur notre serveur et ajouté un mot de passe.  
Afin de communiquer ces données de la Raspberry PI au serveur, on décide d'utiliser le protocole MQTT, celui-ci nous semble adapté pour l'IOT et les communications à faible délais. On a alors installé Mosquitto MQTT Broker sur notre serveur et ajouté un mot de passe.  


L'utilisation de MQTT permet aussi de simplifier l'ajout d'une autre Raspberry par le futur puisqu'il est facilement possible de gérer plusieurs appareils notamment avec le système de topics.
L'utilisation de MQTT permet aussi de simplifier l'ajout d'un autre Raspberry par le futur puisqu'il est facilement possible de gérer plusieurs appareils notamment avec le système de topics.


Une fois les données formatées avec Python sur la Raspberry PI, elles sont publiées sur un topic MQTT (sensor1) propre au capteur, hébergé sur le serveur. On peut récupérer ces données en écoutant le topic si on se situ sur le même réseau avec le mot de passe. On peut alors réaliser un autre script permettant de recuperer les données et les stocker dans un fichier coté serveur.
Une fois les données formatées avec Python sur la Raspberry PI, elles sont publiées sur un topic MQTT (sensor1) propre au capteur, hébergé sur le serveur. On peut récupérer ces données en écoutant le topic si on se situe sur le même réseau avec le mot de passe. On peut alors réaliser un autre script permettant de récupérer les données et les stocker dans un fichier côté serveur.


==Séance du 19/12/2023==
==Séance du 19/12/2023==


On souhaite maintenant entraîner une IA afin de reconnaître des similarités. On enregistre un mouvement que l'on répète 5 à 10 fois et on importe ces données dans NanoEdgeAIStudio.
On souhaite maintenant entraîner une IA afin de reconnaître des similarités. On enregistre un mouvement que l'on répète 5 à 10 fois et on importe ces données dans NanoEdge AI Studio.
Le logiciel donne en sortie une librairie (fichier .a, .h..) que l'on peut importer dans un fichier C.  
 
On devrait pouvoir utiliser la fonction définie dans dans le .h pour détecter notre mouvement.
On passe notre séance à comprendre comment mettre en forme nos datasets pour les implémenter dans NanoEdge AI Studio, et finissons par réussir à faire un benchmarking, mais nous rendrons compte plus tard que nous avions incorrectement formatté les données. Le logiciel nous a tout de même donné en sortie une librairie (fichiers .a, .h..) que l'on peut importer dans un fichier C.  
On devrait pouvoir utiliser la fonction définie dans le .h pour détecter notre mouvement.


==Séance du 20/12/2023==
==Séance du 20/12/2023==


On remarque qu'il n'est pas nécessaire de compiler manuellement un executable important la librairie statique. Nano Edge Studio fournit un emulateur executable sur Linux ou Windows :
On constate que lors de la dernière séance, nous avions formatté les données en mettant une matrice de valeurs par ligne à la place d'une suite d'au moins 16 valeurs par axe. On corrige nos datasets, puis réentraînons l'IA avec les fichiers correctement formattés.
 
Les résultats nous semblaient peu satisfaisant (de l'ordre de 50% de succès, soit du quasi aléatoire). On avait en fait créé un projet de type '''1'''-Class Classification au lieu de '''n'''-Class Classification. En faisant à nouveau un benchmarking, on obtient un score avec des performances de 98%.
 
 
On remarque qu'il n'est pas nécessaire de compiler manuellement un exécutable important la librairie statique. Nano Edge Studio fournit un émulateur exécutable sur Linux ou Windows :
<code>
<code>
./NanoEdgeAI_Oneclass_Emulator  neai_oneclass --knowledge_path knowledge.dat --file coords.txt
./NanoEdgeAI_Oneclass_Emulator  neai_oneclass --knowledge_path knowledge.dat --file coords.txt
</code>
</code>


On utilisera cet émulateur sur le serveur et la raspberry, on peut le transferer avec ces commandes :
On utilisera cet émulateur sur le serveur et la Raspberry, on peut le transférer avec ces commandes :
<code>
<code>
scp -r -6 NanoEdgeAI_Emulator_Unix/ root@\[2001:660:4401:6050:216:3eff:fe28:dcac\]:/root/
scp -r -6 NanoEdgeAI_Emulator_Unix/ root@\[2001:660:4401:6050:216:3eff:fe28:dcac\]:/root/
</code>
</code>

Version du 20 décembre 2023 à 15:10

Binôme

  • Julien CHARLEUX
  • Karl HABRE

Objectif

On souhaite lors de ce TP optimiser les performances et la consommation en distribuant la charge de calcul. On utilisera pour cela des capteurs alimentés par un STM32 connectés en série à un Raspberry PI. Ce Raspberry PI communiquera avec un protocole WIFI vers un serveur.

Compte rendu des séances

Séance du 04/12/2023

On créé une machine virtuelle xen JK sur le serveur chassiron :

xen-create-image --hostname=JK --force --dist=bookworm --size=10G --memory=10G --dir=/usr/local/xen --password= --dhcp --bridge=bridgeStudents

On configure ensuite la VM pour avoir accès à internet en IPV6 :

  • La configuration de la carte réseau en IPV6 s’effectue dans le fichier /etc/network/interfaces :

auto enX0

iface enX0 inet6 auto

  • On configure le DNS dans le fichier /etc/resolv.conf :

domain plil.info

search plil.info

nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c

  • On ajoute les sources de paquets et mis à jour dans le fichier /etc/apt/sources.list :

deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware

deb-src http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware

  • Enfin on supprime /etc/apt/apt.conf.d/01proxy pour pouvoir utiliser le gestionnaire de paquet apt. On peut par la suite autoriser l'accès root en ssh.

On installe finalement Python et Mosquitto MQTT Broker pour plus tard.

  • On réalise ensuite des tests sur le capteur en liaison avec la STM32 afin de comprendre son fonctionnement. On utilise en lisant la documentation constructeur le logiciel VL53L5CX nous permettant de visualiser graphiquement les données du capteur et ses caractéristiques en temps réel.

On télécharge par la suite les différents logiciels nécessaires pour programmer la STM32 (STM32 Cube IDE, Nano Edge Studio, STM32 Cube MX).

On veut utiliser un Raspberry PI pour communiquer avec le capteur, on installe donc par la même occasion RaspberryPiOS sur une carte MicroSD. Mais avant de l'installer sur la carte MicroSD, on active la connexion en SSH et la connexion à un réseau WIFI, ce qui nous évite d'avoir à nous embêter plus tard. Une fois la carte MicroSD insérée dans le Raspberry Pi, on peut s'y connecter en SSH et éventuellement via VNC Viewer pour avoir une interface graphique. En nous y connectant en SSH, in y installe Python avec les librairies nécessaires

Séance du 18/12/2023

On programme la STM32 avec l'IDE fournit par ST, celui-ci permet de compiler et de téléverser le programme vers la carte. On garde le programme d'exemple qui affiche les valeurs du capteurs en 4*4 sur le port UART2. En vérifiant la vitesse de communication du port (460800 baud) avec STM32 Cube MX, on peut visualiser le tableau de donnée avec PuTTY ou Python (sur Windows).

Nous décidons de mettre en forme le tableau de donnée après l'acquisition sur la Raspberry Pi avec un script Python.

Afin de communiquer ces données de la Raspberry PI au serveur, on décide d'utiliser le protocole MQTT, celui-ci nous semble adapté pour l'IOT et les communications à faible délais. On a alors installé Mosquitto MQTT Broker sur notre serveur et ajouté un mot de passe.

L'utilisation de MQTT permet aussi de simplifier l'ajout d'un autre Raspberry par le futur puisqu'il est facilement possible de gérer plusieurs appareils notamment avec le système de topics.

Une fois les données formatées avec Python sur la Raspberry PI, elles sont publiées sur un topic MQTT (sensor1) propre au capteur, hébergé sur le serveur. On peut récupérer ces données en écoutant le topic si on se situe sur le même réseau avec le mot de passe. On peut alors réaliser un autre script permettant de récupérer les données et les stocker dans un fichier côté serveur.

Séance du 19/12/2023

On souhaite maintenant entraîner une IA afin de reconnaître des similarités. On enregistre un mouvement que l'on répète 5 à 10 fois et on importe ces données dans NanoEdge AI Studio.

On passe notre séance à comprendre comment mettre en forme nos datasets pour les implémenter dans NanoEdge AI Studio, et finissons par réussir à faire un benchmarking, mais nous rendrons compte plus tard que nous avions incorrectement formatté les données. Le logiciel nous a tout de même donné en sortie une librairie (fichiers .a, .h..) que l'on peut importer dans un fichier C. On devrait pouvoir utiliser la fonction définie dans le .h pour détecter notre mouvement.

Séance du 20/12/2023

On constate que lors de la dernière séance, nous avions formatté les données en mettant une matrice de valeurs par ligne à la place d'une suite d'au moins 16 valeurs par axe. On corrige nos datasets, puis réentraînons l'IA avec les fichiers correctement formattés.

Les résultats nous semblaient peu satisfaisant (de l'ordre de 50% de succès, soit du quasi aléatoire). On avait en fait créé un projet de type 1-Class Classification au lieu de n-Class Classification. En faisant à nouveau un benchmarking, on obtient un score avec des performances de 98%.


On remarque qu'il n'est pas nécessaire de compiler manuellement un exécutable important la librairie statique. Nano Edge Studio fournit un émulateur exécutable sur Linux ou Windows : ./NanoEdgeAI_Oneclass_Emulator neai_oneclass --knowledge_path knowledge.dat --file coords.txt

On utilisera cet émulateur sur le serveur et la Raspberry, on peut le transférer avec ces commandes : scp -r -6 NanoEdgeAI_Emulator_Unix/ root@\[2001:660:4401:6050:216:3eff:fe28:dcac\]:/root/