<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wiki-se.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Esimon</id>
	<title>wiki-se.plil.fr - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-se.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Esimon"/>
	<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php/Sp%C3%A9cial:Contributions/Esimon"/>
	<updated>2026-05-16T20:09:47Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.39.1</generator>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/BalbastreSimon&amp;diff=4949</id>
		<title>SE5 ECEAI/eceai 2023/2024/BalbastreSimon</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/BalbastreSimon&amp;diff=4949"/>
		<updated>2024-01-28T22:22:32Z</updated>

		<summary type="html">&lt;p&gt;Esimon : /* Acquisition du dataset. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Le Sujet ==&lt;br /&gt;
L'objectif de ce TP est de créer un système capable de reconnaître certains mouvements à l'aide d'une caméra, notre système doit faire la différence entre une rotation de la main dans le sens horaire et une rotation dans le sens trigonométrique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'architecture utilisée est la suivante:&lt;br /&gt;
&lt;br /&gt;
Un capteur X-NUCLEO-53L5A1 récupère les données, il est consitué d'une matrice 8x8 de capteurs de distance, nous utiliserons ici une matrice 4x4 faisant partie du composant NUCLEO.&lt;br /&gt;
&lt;br /&gt;
Ce composant NUCLEO est envoie les données brutes à une stm32 chargée de les formater avant de les transmettre à une raspberry pi4.&lt;br /&gt;
&lt;br /&gt;
La raspberry pi utilise un script python pour récupérer les données et les envoyer par MQTT (un protocole basé sur TCP) à une machine virtuelle hébergée sur chassiron.&lt;br /&gt;
&lt;br /&gt;
Ce travail a été réalisé par Maxime Balbastre et Élias Simon&lt;br /&gt;
&lt;br /&gt;
=== Raspberry Pi4 ===&lt;br /&gt;
Nous avons d'abord cherché à mettre l'OS Raspbian sur la carte à l'aide de l'installeur &amp;quot;Raspberry PI Imager&amp;quot;&lt;br /&gt;
&lt;br /&gt;
L'objectif était de configurer la raspberry via une liaison série vers la zabeth. Devant les difficultés éprouvées, nous avons décider de nous tourner vers une autre connexion et nous avons re-flashé la carte en la connectant directement au routeur WiFi_IE_1 en autorisant les connexions ssh.&lt;br /&gt;
&lt;br /&gt;
De cette manière nous pouvions nous connecter à la raspberry par ssh en partant de n'importe quelle machine connectée à WiFi_IE_1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Machine virtuelle ===&lt;br /&gt;
Nous avons d'abord créé une machine virtuelle tournant sur debian à l'aide de la commande suivante:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname BalbastreSimon --force --dist bookworm --size 10G --memory 1G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il fallait ensuite faire les configurations réseau, nous avons ajouté ceci dans le fichier ''/etc/network/interfaces'' afin de permettre les connexions en ipv6:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auto enX0&lt;br /&gt;
iface enX0 inet6 auto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Nous avons ensuite ajouté ces lignes dans le fichier ''/etc/resolv.conf''  afin de stocker les adresses des serveurs DNS:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
domain plil.info&lt;br /&gt;
search plil.info plil.fr&lt;br /&gt;
nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Enfin, nous avons ajouté de nouvelles sources dans le fichier ''/etc/apt/sources.list'' pour pouvoir ajouter certains paquets jusqu'alors inaccessibles &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
deb     http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
deb-src http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IA ===&lt;br /&gt;
Nous avons utilisé nanoedge pour les entraînements. Nous avons choisi de détecter les mouvements de rotation de la main. Le format du dataset était le suivant:&lt;br /&gt;
&lt;br /&gt;
1 fichier par classe, 1 ligne par mouvement.&lt;br /&gt;
&lt;br /&gt;
Cela nous a permit de détecter les rotation dans un intervalle de temps prédéfini d'environ 7 secondes. &lt;br /&gt;
&lt;br /&gt;
==== Acquisition du dataset. ====&lt;br /&gt;
Le code ci-dessous nous a permis d'acquérir 30 rotation complètes par sens de rotation.&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import numpy as np&lt;br /&gt;
import keyboard&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
#py -m serial.tools.list_ports&lt;br /&gt;
n, m = 4, 4&lt;br /&gt;
res = (n,m)&lt;br /&gt;
&lt;br /&gt;
nb_sample_per_recording = 20&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
	file = sys.argv[1]&lt;br /&gt;
except:&lt;br /&gt;
	print(&amp;quot;Give file name as input.&amp;quot;)&lt;br /&gt;
	exit()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Writing to&amp;quot;, file)&lt;br /&gt;
&lt;br /&gt;
with serial.Serial('COM7', 460800, timeout=1) as ser:&lt;br /&gt;
	for i_sample in range(10):&lt;br /&gt;
		f = open(file, mode=&amp;quot;a&amp;quot;)&lt;br /&gt;
		print(&amp;quot;Press q to start recording&amp;quot;)&lt;br /&gt;
		while 1:&lt;br /&gt;
			if keyboard.is_pressed('q'):  # if key 'q' is pressed &lt;br /&gt;
				break  # finishing the loop&lt;br /&gt;
&lt;br /&gt;
		#synchronisation&lt;br /&gt;
		line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
		while line != &amp;quot;\n&amp;quot;:&lt;br /&gt;
			line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
&lt;br /&gt;
		print(&amp;quot;Sample number: {}&amp;quot;.format(i_sample))&lt;br /&gt;
		print(&amp;quot;Recording...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
		lines = []&lt;br /&gt;
		for t in range(nb_sample_per_recording):&lt;br /&gt;
			#converts to matrix&lt;br /&gt;
			mat = np.zeros(res)&lt;br /&gt;
			for i in range(n):&lt;br /&gt;
				line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
				line = str(line)&lt;br /&gt;
				cells = line.split('|')&lt;br /&gt;
				for j in range(m): &lt;br /&gt;
					intensity, state = cells[j].split(':')&lt;br /&gt;
					try:&lt;br /&gt;
						intensity = int(intensity)&lt;br /&gt;
					except:&lt;br /&gt;
						intensity = 0&lt;br /&gt;
					mat[i][j] = intensity&lt;br /&gt;
&lt;br /&gt;
			line = ser.readline()   # read a '\n' terminated line&lt;br /&gt;
			mat = mat.flatten()&lt;br /&gt;
			str_list = map(str,mat)&lt;br /&gt;
			line = &amp;quot;,&amp;quot;.join(str_list)&lt;br /&gt;
			lines.append(line)&lt;br /&gt;
			#np.savetxt(&amp;quot;main bouge.csv&amp;quot;, matrix, delimiter=&amp;quot;,&amp;quot;)&lt;br /&gt;
		lines = &amp;quot;,&amp;quot;.join(lines)&lt;br /&gt;
		f.write(lines)&lt;br /&gt;
		f.write(&amp;quot;\n&amp;quot;)&lt;br /&gt;
		print(&amp;quot;Finished&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
		f.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;L'IA fonctionnant très bien après validation (87,40% de précision avec le modèle random forest), nous avons décidé de détecter les mouvement en continu en faisant de l'augmentation de données.&lt;br /&gt;
&lt;br /&gt;
==== Augmentation ====&lt;br /&gt;
Nous avons découpé les échantillons de façon aléatoire pour détecter des parties de la rotation plus courtes.&lt;br /&gt;
&lt;br /&gt;
==== Inférence ====&lt;br /&gt;
Pour faire tourner l'inférence, nous avons utilisé l'émulateur généré par nanoedge. Nous l'avons placé sur la VM où il lisait les données reçues dans un fichier tampon.&lt;br /&gt;
&lt;br /&gt;
=== Communication ===&lt;br /&gt;
&lt;br /&gt;
==== Carte NUCLEO ====&lt;br /&gt;
Grâce à cube IDE, nous avons flashé la carte avec un des code d'exemples adapté au capteur et à la carte: 53L5A1_SimpleRanging.&lt;br /&gt;
&lt;br /&gt;
Nous avons modifié le code afin de rendre le formatage de communication série moins lourd:&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
static void print_result(RANGING_SENSOR_Result_t *Result)&lt;br /&gt;
{&lt;br /&gt;
  int8_t j;&lt;br /&gt;
  int8_t k;&lt;br /&gt;
  int8_t l;&lt;br /&gt;
  uint8_t zones_per_line;&lt;br /&gt;
&lt;br /&gt;
  zones_per_line = ((Profile.RangingProfile == RS_PROFILE_8x8_AUTONOMOUS) ||&lt;br /&gt;
         (Profile.RangingProfile == RS_PROFILE_8x8_CONTINUOUS)) ? 8 : 4;&lt;br /&gt;
&lt;br /&gt;
  printf(&amp;quot;\n\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  for (j = 0; j &amp;lt; Result-&amp;gt;NumberOfZones; j += zones_per_line)&lt;br /&gt;
  {&lt;br /&gt;
    for (l = 0; l &amp;lt; RANGING_SENSOR_NB_TARGET_PER_ZONE; l++)&lt;br /&gt;
    {&lt;br /&gt;
      /* Print distance and status */&lt;br /&gt;
      for (k = (zones_per_line - 1); k &amp;gt;= 0; k--)&lt;br /&gt;
      {&lt;br /&gt;
        if (Result-&amp;gt;ZoneResult[j+k].NumberOfTargets &amp;gt; 0)&lt;br /&gt;
          printf(&amp;quot;%5ld : %5ld &amp;quot;,&lt;br /&gt;
              (long)Result-&amp;gt;ZoneResult[j+k].Distance[l],&lt;br /&gt;
              (long)Result-&amp;gt;ZoneResult[j+k].Status[l]);&lt;br /&gt;
        else&lt;br /&gt;
          printf(&amp;quot;%5s : %5s &amp;quot;, &amp;quot;X&amp;quot;, &amp;quot;X&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      printf(&amp;quot;|\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
      if ((Profile.EnableAmbient != 0) || (Profile.EnableSignal != 0))&lt;br /&gt;
      {&lt;br /&gt;
        /* Print Signal and Ambient */&lt;br /&gt;
        for (k = (zones_per_line - 1); k &amp;gt;= 0; k--)&lt;br /&gt;
        {&lt;br /&gt;
          if (Result-&amp;gt;ZoneResult[j+k].NumberOfTargets &amp;gt; 0)&lt;br /&gt;
          {&lt;br /&gt;
            if (Profile.EnableSignal != 0)&lt;br /&gt;
              printf(&amp;quot;%5ld : &amp;quot;, (long)Result-&amp;gt;ZoneResult[j+k].Signal[l]);&lt;br /&gt;
            else&lt;br /&gt;
              printf(&amp;quot;%5s : &amp;quot;, &amp;quot;X&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
            if (Profile.EnableAmbient != 0)&lt;br /&gt;
              printf(&amp;quot;%5ld &amp;quot;, (long)Result-&amp;gt;ZoneResult[j+k].Ambient[l]);&lt;br /&gt;
            else&lt;br /&gt;
              printf(&amp;quot;%5s &amp;quot;, &amp;quot;X&amp;quot;);&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
            printf(&amp;quot;%5s : %5s &amp;quot;, &amp;quot;X&amp;quot;, &amp;quot;X&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        printf(&amp;quot;|\n&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Réception des données sur la raspberry ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import numpy as np&lt;br /&gt;
import keyboard&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
#py -m serial.tools.list_ports&lt;br /&gt;
n, m = 4, 4&lt;br /&gt;
res = (n,m)&lt;br /&gt;
&lt;br /&gt;
with serial.Serial('COM7', 460800, timeout=1) as ser:&lt;br /&gt;
	#synchronisation&lt;br /&gt;
	line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
	while line != &amp;quot;\n&amp;quot;:&lt;br /&gt;
		line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
&lt;br /&gt;
	while 1:&lt;br /&gt;
		print(&amp;quot;New sample&amp;quot;)&lt;br /&gt;
		#converts to matrix&lt;br /&gt;
		mat = np.zeros(res)&lt;br /&gt;
		for i in range(n):&lt;br /&gt;
			line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
			line = str(line)&lt;br /&gt;
			cells = line.split('|')&lt;br /&gt;
			for j in range(m): &lt;br /&gt;
				intensity, state = cells[j].split(':')&lt;br /&gt;
				try:&lt;br /&gt;
					intensity = int(intensity)&lt;br /&gt;
				except:&lt;br /&gt;
					intensity = 0&lt;br /&gt;
				mat[i][j] = intensity&lt;br /&gt;
		line = ser.readline()&lt;br /&gt;
		mat = mat.flatten()&lt;br /&gt;
		str_list = map(str,mat)&lt;br /&gt;
		line = &amp;quot;,&amp;quot;.join(str_list)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Communication entre la Raspberry et la VM. ====&lt;br /&gt;
Nous avons utilisé mosquitto pour communiquer. La Raspberry était le client et la VM le serveur.&lt;/div&gt;</summary>
		<author><name>Esimon</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/BalbastreSimon&amp;diff=4948</id>
		<title>SE5 ECEAI/eceai 2023/2024/BalbastreSimon</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/BalbastreSimon&amp;diff=4948"/>
		<updated>2024-01-28T22:01:35Z</updated>

		<summary type="html">&lt;p&gt;Esimon : /* Carte NUCLEO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Le Sujet ==&lt;br /&gt;
L'objectif de ce TP est de créer un système capable de reconnaître certains mouvements à l'aide d'une caméra, notre système doit faire la différence entre une rotation de la main dans le sens horaire et une rotation dans le sens trigonométrique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'architecture utilisée est la suivante:&lt;br /&gt;
&lt;br /&gt;
Un capteur X-NUCLEO-53L5A1 récupère les données, il est consitué d'une matrice 8x8 de capteurs de distance, nous utiliserons ici une matrice 4x4 faisant partie du composant NUCLEO.&lt;br /&gt;
&lt;br /&gt;
Ce composant NUCLEO est envoie les données brutes à une stm32 chargée de les formater avant de les transmettre à une raspberry pi4.&lt;br /&gt;
&lt;br /&gt;
La raspberry pi utilise un script python pour récupérer les données et les envoyer par MQTT (un protocole basé sur TCP) à une machine virtuelle hébergée sur chassiron.&lt;br /&gt;
&lt;br /&gt;
Ce travail a été réalisé par Maxime Balbastre et Élias Simon&lt;br /&gt;
&lt;br /&gt;
=== Raspberry Pi4 ===&lt;br /&gt;
Nous avons d'abord cherché à mettre l'OS Raspbian sur la carte à l'aide de l'installeur &amp;quot;Raspberry PI Imager&amp;quot;&lt;br /&gt;
&lt;br /&gt;
L'objectif était de configurer la raspberry via une liaison série vers la zabeth. Devant les difficultés éprouvées, nous avons décider de nous tourner vers une autre connexion et nous avons re-flashé la carte en la connectant directement au routeur WiFi_IE_1 en autorisant les connexions ssh.&lt;br /&gt;
&lt;br /&gt;
De cette manière nous pouvions nous connecter à la raspberry par ssh en partant de n'importe quelle machine connectée à WiFi_IE_1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Machine virtuelle ===&lt;br /&gt;
Nous avons d'abord créé une machine virtuelle tournant sur debian à l'aide de la commande suivante:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname BalbastreSimon --force --dist bookworm --size 10G --memory 1G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il fallait ensuite faire les configurations réseau, nous avons ajouté ceci dans le fichier ''/etc/network/interfaces'' afin de permettre les connexions en ipv6:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auto enX0&lt;br /&gt;
iface enX0 inet6 auto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Nous avons ensuite ajouté ces lignes dans le fichier ''/etc/resolv.conf''  afin de stocker les adresses des serveurs DNS:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
domain plil.info&lt;br /&gt;
search plil.info plil.fr&lt;br /&gt;
nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Enfin, nous avons ajouté de nouvelles sources dans le fichier ''/etc/apt/sources.list'' pour pouvoir ajouter certains paquets jusqu'alors inaccessibles &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
deb     http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
deb-src http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IA ===&lt;br /&gt;
Nous avons utilisé nanoedge pour les entraînements. Nous avons choisi de détecter les mouvements de rotation de la main. Le format du dataset était le suivant:&lt;br /&gt;
&lt;br /&gt;
1 fichier par classe, 1 ligne par mouvement.&lt;br /&gt;
&lt;br /&gt;
Cela nous a permit de détecter les rotation dans un intervalle de temps prédéfini d'environ 7 secondes. &lt;br /&gt;
&lt;br /&gt;
==== Acquisition du dataset. ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import numpy as np&lt;br /&gt;
import keyboard&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
#py -m serial.tools.list_ports&lt;br /&gt;
n, m = 4, 4&lt;br /&gt;
res = (n,m)&lt;br /&gt;
&lt;br /&gt;
nb_sample_per_recording = 20&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
	file = sys.argv[1]&lt;br /&gt;
except:&lt;br /&gt;
	print(&amp;quot;Give file name as input.&amp;quot;)&lt;br /&gt;
	exit()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Writing to&amp;quot;, file)&lt;br /&gt;
&lt;br /&gt;
with serial.Serial('COM7', 460800, timeout=1) as ser:&lt;br /&gt;
	for i_sample in range(10):&lt;br /&gt;
		f = open(file, mode=&amp;quot;a&amp;quot;)&lt;br /&gt;
		print(&amp;quot;Press q to start recording&amp;quot;)&lt;br /&gt;
		while 1:&lt;br /&gt;
			if keyboard.is_pressed('q'):  # if key 'q' is pressed &lt;br /&gt;
				break  # finishing the loop&lt;br /&gt;
&lt;br /&gt;
		#synchronisation&lt;br /&gt;
		line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
		while line != &amp;quot;\n&amp;quot;:&lt;br /&gt;
			line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
&lt;br /&gt;
		print(&amp;quot;Sample number: {}&amp;quot;.format(i_sample))&lt;br /&gt;
		print(&amp;quot;Recording...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
		lines = []&lt;br /&gt;
		for t in range(nb_sample_per_recording):&lt;br /&gt;
			#converts to matrix&lt;br /&gt;
			mat = np.zeros(res)&lt;br /&gt;
			for i in range(n):&lt;br /&gt;
				line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
				line = str(line)&lt;br /&gt;
				cells = line.split('|')&lt;br /&gt;
				for j in range(m): &lt;br /&gt;
					intensity, state = cells[j].split(':')&lt;br /&gt;
					try:&lt;br /&gt;
						intensity = int(intensity)&lt;br /&gt;
					except:&lt;br /&gt;
						intensity = 0&lt;br /&gt;
					mat[i][j] = intensity&lt;br /&gt;
&lt;br /&gt;
			line = ser.readline()   # read a '\n' terminated line&lt;br /&gt;
			mat = mat.flatten()&lt;br /&gt;
			str_list = map(str,mat)&lt;br /&gt;
			line = &amp;quot;,&amp;quot;.join(str_list)&lt;br /&gt;
			lines.append(line)&lt;br /&gt;
			#np.savetxt(&amp;quot;main bouge.csv&amp;quot;, matrix, delimiter=&amp;quot;,&amp;quot;)&lt;br /&gt;
		lines = &amp;quot;,&amp;quot;.join(lines)&lt;br /&gt;
		f.write(lines)&lt;br /&gt;
		f.write(&amp;quot;\n&amp;quot;)&lt;br /&gt;
		print(&amp;quot;Finished&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
		f.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;L'IA fonctionnant très bien après validation (87,40% de précision avec le modèle random forest), nous avons décidé de détecter les mouvement en continu en faisant de l'augmentation de données.&lt;br /&gt;
&lt;br /&gt;
==== Augmentation ====&lt;br /&gt;
Nous avons découpé les échantillons de façon aléatoire pour détecter des parties de la rotation plus courtes.&lt;br /&gt;
&lt;br /&gt;
==== Inférence ====&lt;br /&gt;
Pour faire tourner l'inférence, nous avons utilisé l'émulateur généré par nanoedge. Nous l'avons placé sur la VM où il lisait les données reçues dans un fichier tampon.&lt;br /&gt;
&lt;br /&gt;
=== Communication ===&lt;br /&gt;
&lt;br /&gt;
==== Carte NUCLEO ====&lt;br /&gt;
Grâce à cube IDE, nous avons flashé la carte avec un des code d'exemples adapté au capteur et à la carte: 53L5A1_SimpleRanging.&lt;br /&gt;
&lt;br /&gt;
Nous avons modifié le code afin de rendre le formatage de communication série moins lourd:&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
static void print_result(RANGING_SENSOR_Result_t *Result)&lt;br /&gt;
{&lt;br /&gt;
  int8_t j;&lt;br /&gt;
  int8_t k;&lt;br /&gt;
  int8_t l;&lt;br /&gt;
  uint8_t zones_per_line;&lt;br /&gt;
&lt;br /&gt;
  zones_per_line = ((Profile.RangingProfile == RS_PROFILE_8x8_AUTONOMOUS) ||&lt;br /&gt;
         (Profile.RangingProfile == RS_PROFILE_8x8_CONTINUOUS)) ? 8 : 4;&lt;br /&gt;
&lt;br /&gt;
  printf(&amp;quot;\n\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  for (j = 0; j &amp;lt; Result-&amp;gt;NumberOfZones; j += zones_per_line)&lt;br /&gt;
  {&lt;br /&gt;
    for (l = 0; l &amp;lt; RANGING_SENSOR_NB_TARGET_PER_ZONE; l++)&lt;br /&gt;
    {&lt;br /&gt;
      /* Print distance and status */&lt;br /&gt;
      for (k = (zones_per_line - 1); k &amp;gt;= 0; k--)&lt;br /&gt;
      {&lt;br /&gt;
        if (Result-&amp;gt;ZoneResult[j+k].NumberOfTargets &amp;gt; 0)&lt;br /&gt;
          printf(&amp;quot;%5ld : %5ld &amp;quot;,&lt;br /&gt;
              (long)Result-&amp;gt;ZoneResult[j+k].Distance[l],&lt;br /&gt;
              (long)Result-&amp;gt;ZoneResult[j+k].Status[l]);&lt;br /&gt;
        else&lt;br /&gt;
          printf(&amp;quot;%5s : %5s &amp;quot;, &amp;quot;X&amp;quot;, &amp;quot;X&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      printf(&amp;quot;|\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
      if ((Profile.EnableAmbient != 0) || (Profile.EnableSignal != 0))&lt;br /&gt;
      {&lt;br /&gt;
        /* Print Signal and Ambient */&lt;br /&gt;
        for (k = (zones_per_line - 1); k &amp;gt;= 0; k--)&lt;br /&gt;
        {&lt;br /&gt;
          if (Result-&amp;gt;ZoneResult[j+k].NumberOfTargets &amp;gt; 0)&lt;br /&gt;
          {&lt;br /&gt;
            if (Profile.EnableSignal != 0)&lt;br /&gt;
              printf(&amp;quot;%5ld : &amp;quot;, (long)Result-&amp;gt;ZoneResult[j+k].Signal[l]);&lt;br /&gt;
            else&lt;br /&gt;
              printf(&amp;quot;%5s : &amp;quot;, &amp;quot;X&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
            if (Profile.EnableAmbient != 0)&lt;br /&gt;
              printf(&amp;quot;%5ld &amp;quot;, (long)Result-&amp;gt;ZoneResult[j+k].Ambient[l]);&lt;br /&gt;
            else&lt;br /&gt;
              printf(&amp;quot;%5s &amp;quot;, &amp;quot;X&amp;quot;);&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
            printf(&amp;quot;%5s : %5s &amp;quot;, &amp;quot;X&amp;quot;, &amp;quot;X&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        printf(&amp;quot;|\n&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Réception des données sur la raspberry ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import numpy as np&lt;br /&gt;
import keyboard&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
#py -m serial.tools.list_ports&lt;br /&gt;
n, m = 4, 4&lt;br /&gt;
res = (n,m)&lt;br /&gt;
&lt;br /&gt;
with serial.Serial('COM7', 460800, timeout=1) as ser:&lt;br /&gt;
	#synchronisation&lt;br /&gt;
	line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
	while line != &amp;quot;\n&amp;quot;:&lt;br /&gt;
		line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
&lt;br /&gt;
	while 1:&lt;br /&gt;
		print(&amp;quot;New sample&amp;quot;)&lt;br /&gt;
		#converts to matrix&lt;br /&gt;
		mat = np.zeros(res)&lt;br /&gt;
		for i in range(n):&lt;br /&gt;
			line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
			line = str(line)&lt;br /&gt;
			cells = line.split('|')&lt;br /&gt;
			for j in range(m): &lt;br /&gt;
				intensity, state = cells[j].split(':')&lt;br /&gt;
				try:&lt;br /&gt;
					intensity = int(intensity)&lt;br /&gt;
				except:&lt;br /&gt;
					intensity = 0&lt;br /&gt;
				mat[i][j] = intensity&lt;br /&gt;
		line = ser.readline()&lt;br /&gt;
		mat = mat.flatten()&lt;br /&gt;
		str_list = map(str,mat)&lt;br /&gt;
		line = &amp;quot;,&amp;quot;.join(str_list)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Communication entre la Raspberry et la VM. ====&lt;br /&gt;
Nous avons utilisé mosquitto pour communiquer. La Raspberry était le client et la VM le serveur.&lt;/div&gt;</summary>
		<author><name>Esimon</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/BalbastreSimon&amp;diff=4947</id>
		<title>SE5 ECEAI/eceai 2023/2024/BalbastreSimon</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/BalbastreSimon&amp;diff=4947"/>
		<updated>2024-01-28T21:59:21Z</updated>

		<summary type="html">&lt;p&gt;Esimon : /* A detailler un peu mieux */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Le Sujet ==&lt;br /&gt;
L'objectif de ce TP est de créer un système capable de reconnaître certains mouvements à l'aide d'une caméra, notre système doit faire la différence entre une rotation de la main dans le sens horaire et une rotation dans le sens trigonométrique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'architecture utilisée est la suivante:&lt;br /&gt;
&lt;br /&gt;
Un capteur X-NUCLEO-53L5A1 récupère les données, il est consitué d'une matrice 8x8 de capteurs de distance, nous utiliserons ici une matrice 4x4 faisant partie du composant NUCLEO.&lt;br /&gt;
&lt;br /&gt;
Ce composant NUCLEO est envoie les données brutes à une stm32 chargée de les formater avant de les transmettre à une raspberry pi4.&lt;br /&gt;
&lt;br /&gt;
La raspberry pi utilise un script python pour récupérer les données et les envoyer par MQTT (un protocole basé sur TCP) à une machine virtuelle hébergée sur chassiron.&lt;br /&gt;
&lt;br /&gt;
Ce travail a été réalisé par Maxime Balbastre et Élias Simon&lt;br /&gt;
&lt;br /&gt;
=== Raspberry Pi4 ===&lt;br /&gt;
Nous avons d'abord cherché à mettre l'OS Raspbian sur la carte à l'aide de l'installeur &amp;quot;Raspberry PI Imager&amp;quot;&lt;br /&gt;
&lt;br /&gt;
L'objectif était de configurer la raspberry via une liaison série vers la zabeth. Devant les difficultés éprouvées, nous avons décider de nous tourner vers une autre connexion et nous avons re-flashé la carte en la connectant directement au routeur WiFi_IE_1 en autorisant les connexions ssh.&lt;br /&gt;
&lt;br /&gt;
De cette manière nous pouvions nous connecter à la raspberry par ssh en partant de n'importe quelle machine connectée à WiFi_IE_1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Machine virtuelle ===&lt;br /&gt;
Nous avons d'abord créé une machine virtuelle tournant sur debian à l'aide de la commande suivante:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname BalbastreSimon --force --dist bookworm --size 10G --memory 1G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il fallait ensuite faire les configurations réseau, nous avons ajouté ceci dans le fichier ''/etc/network/interfaces'' afin de permettre les connexions en ipv6:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auto enX0&lt;br /&gt;
iface enX0 inet6 auto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Nous avons ensuite ajouté ces lignes dans le fichier ''/etc/resolv.conf''  afin de stocker les adresses des serveurs DNS:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
domain plil.info&lt;br /&gt;
search plil.info plil.fr&lt;br /&gt;
nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Enfin, nous avons ajouté de nouvelles sources dans le fichier ''/etc/apt/sources.list'' pour pouvoir ajouter certains paquets jusqu'alors inaccessibles &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
deb     http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
deb-src http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IA ===&lt;br /&gt;
Nous avons utilisé nanoedge pour les entraînements. Nous avons choisi de détecter les mouvements de rotation de la main. Le format du dataset était le suivant:&lt;br /&gt;
&lt;br /&gt;
1 fichier par classe, 1 ligne par mouvement.&lt;br /&gt;
&lt;br /&gt;
Cela nous a permit de détecter les rotation dans un intervalle de temps prédéfini d'environ 7 secondes. &lt;br /&gt;
&lt;br /&gt;
==== Acquisition du dataset. ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import numpy as np&lt;br /&gt;
import keyboard&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
#py -m serial.tools.list_ports&lt;br /&gt;
n, m = 4, 4&lt;br /&gt;
res = (n,m)&lt;br /&gt;
&lt;br /&gt;
nb_sample_per_recording = 20&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
	file = sys.argv[1]&lt;br /&gt;
except:&lt;br /&gt;
	print(&amp;quot;Give file name as input.&amp;quot;)&lt;br /&gt;
	exit()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Writing to&amp;quot;, file)&lt;br /&gt;
&lt;br /&gt;
with serial.Serial('COM7', 460800, timeout=1) as ser:&lt;br /&gt;
	for i_sample in range(10):&lt;br /&gt;
		f = open(file, mode=&amp;quot;a&amp;quot;)&lt;br /&gt;
		print(&amp;quot;Press q to start recording&amp;quot;)&lt;br /&gt;
		while 1:&lt;br /&gt;
			if keyboard.is_pressed('q'):  # if key 'q' is pressed &lt;br /&gt;
				break  # finishing the loop&lt;br /&gt;
&lt;br /&gt;
		#synchronisation&lt;br /&gt;
		line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
		while line != &amp;quot;\n&amp;quot;:&lt;br /&gt;
			line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
&lt;br /&gt;
		print(&amp;quot;Sample number: {}&amp;quot;.format(i_sample))&lt;br /&gt;
		print(&amp;quot;Recording...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
		lines = []&lt;br /&gt;
		for t in range(nb_sample_per_recording):&lt;br /&gt;
			#converts to matrix&lt;br /&gt;
			mat = np.zeros(res)&lt;br /&gt;
			for i in range(n):&lt;br /&gt;
				line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
				line = str(line)&lt;br /&gt;
				cells = line.split('|')&lt;br /&gt;
				for j in range(m): &lt;br /&gt;
					intensity, state = cells[j].split(':')&lt;br /&gt;
					try:&lt;br /&gt;
						intensity = int(intensity)&lt;br /&gt;
					except:&lt;br /&gt;
						intensity = 0&lt;br /&gt;
					mat[i][j] = intensity&lt;br /&gt;
&lt;br /&gt;
			line = ser.readline()   # read a '\n' terminated line&lt;br /&gt;
			mat = mat.flatten()&lt;br /&gt;
			str_list = map(str,mat)&lt;br /&gt;
			line = &amp;quot;,&amp;quot;.join(str_list)&lt;br /&gt;
			lines.append(line)&lt;br /&gt;
			#np.savetxt(&amp;quot;main bouge.csv&amp;quot;, matrix, delimiter=&amp;quot;,&amp;quot;)&lt;br /&gt;
		lines = &amp;quot;,&amp;quot;.join(lines)&lt;br /&gt;
		f.write(lines)&lt;br /&gt;
		f.write(&amp;quot;\n&amp;quot;)&lt;br /&gt;
		print(&amp;quot;Finished&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
		f.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;L'IA fonctionnant très bien après validation (87,40% de précision avec le modèle random forest), nous avons décidé de détecter les mouvement en continu en faisant de l'augmentation de données.&lt;br /&gt;
&lt;br /&gt;
==== Augmentation ====&lt;br /&gt;
Nous avons découpé les échantillons de façon aléatoire pour détecter des parties de la rotation plus courtes.&lt;br /&gt;
&lt;br /&gt;
==== Inférence ====&lt;br /&gt;
Pour faire tourner l'inférence, nous avons utilisé l'émulateur généré par nanoedge. Nous l'avons placé sur la VM où il lisait les données reçues dans un fichier tampon.&lt;br /&gt;
&lt;br /&gt;
=== Communication ===&lt;br /&gt;
&lt;br /&gt;
==== Carte NUCLEO ====&lt;br /&gt;
Grâce à cube IDE, nous avons flashé la carte avec un des code d'exemples adapté au capteur et à la carte: 53L5A1_SimpleRanging.&lt;br /&gt;
&lt;br /&gt;
Nous avons modifié le code afin de rendre le formatage de communication série moins lourd.&lt;br /&gt;
&lt;br /&gt;
==== Réception des données sur la raspberry ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import numpy as np&lt;br /&gt;
import keyboard&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
#py -m serial.tools.list_ports&lt;br /&gt;
n, m = 4, 4&lt;br /&gt;
res = (n,m)&lt;br /&gt;
&lt;br /&gt;
with serial.Serial('COM7', 460800, timeout=1) as ser:&lt;br /&gt;
	#synchronisation&lt;br /&gt;
	line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
	while line != &amp;quot;\n&amp;quot;:&lt;br /&gt;
		line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
&lt;br /&gt;
	while 1:&lt;br /&gt;
		print(&amp;quot;New sample&amp;quot;)&lt;br /&gt;
		#converts to matrix&lt;br /&gt;
		mat = np.zeros(res)&lt;br /&gt;
		for i in range(n):&lt;br /&gt;
			line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
			line = str(line)&lt;br /&gt;
			cells = line.split('|')&lt;br /&gt;
			for j in range(m): &lt;br /&gt;
				intensity, state = cells[j].split(':')&lt;br /&gt;
				try:&lt;br /&gt;
					intensity = int(intensity)&lt;br /&gt;
				except:&lt;br /&gt;
					intensity = 0&lt;br /&gt;
				mat[i][j] = intensity&lt;br /&gt;
		line = ser.readline()&lt;br /&gt;
		mat = mat.flatten()&lt;br /&gt;
		str_list = map(str,mat)&lt;br /&gt;
		line = &amp;quot;,&amp;quot;.join(str_list)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Communication entre la Raspberry et la VM. ====&lt;br /&gt;
Nous avons utilisé mosquitto pour communiquer. La Raspberry était le client et la VM le serveur.&lt;/div&gt;</summary>
		<author><name>Esimon</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/BalbastreSimon&amp;diff=4946</id>
		<title>SE5 ECEAI/eceai 2023/2024/BalbastreSimon</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/BalbastreSimon&amp;diff=4946"/>
		<updated>2024-01-28T21:58:23Z</updated>

		<summary type="html">&lt;p&gt;Esimon : /* IA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Le Sujet ==&lt;br /&gt;
L'objectif de ce TP est de créer un système capable de reconnaître certains mouvements à l'aide d'une caméra, notre système doit faire la différence entre une rotation de la main dans le sens horaire et une rotation dans le sens trigonométrique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'architecture utilisée est la suivante:&lt;br /&gt;
&lt;br /&gt;
Un capteur X-NUCLEO-53L5A1 récupère les données, il est consitué d'une matrice 8x8 de capteurs de distance, nous utiliserons ici une matrice 4x4 faisant partie du composant NUCLEO.&lt;br /&gt;
&lt;br /&gt;
Ce composant NUCLEO est envoie les données brutes à une stm32 chargée de les formater avant de les transmettre à une raspberry pi4.&lt;br /&gt;
&lt;br /&gt;
La raspberry pi utilise un script python pour récupérer les données et les envoyer par MQTT (un protocole basé sur TCP) à une machine virtuelle hébergée sur chassiron.&lt;br /&gt;
&lt;br /&gt;
Ce travail a été réalisé par Maxime Balbastre et Élias Simon&lt;br /&gt;
&lt;br /&gt;
=== Raspberry Pi4 ===&lt;br /&gt;
Nous avons d'abord cherché à mettre l'OS Raspbian sur la carte à l'aide de l'installeur &amp;quot;Raspberry PI Imager&amp;quot;&lt;br /&gt;
&lt;br /&gt;
L'objectif était de configurer la raspberry via une liaison série vers la zabeth. Devant les difficultés éprouvées, nous avons décider de nous tourner vers une autre connexion et nous avons re-flashé la carte en la connectant directement au routeur WiFi_IE_1 en autorisant les connexions ssh.&lt;br /&gt;
&lt;br /&gt;
De cette manière nous pouvions nous connecter à la raspberry par ssh en partant de n'importe quelle machine connectée à WiFi_IE_1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Machine virtuelle ===&lt;br /&gt;
Nous avons d'abord créé une machine virtuelle tournant sur debian à l'aide de la commande suivante:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname BalbastreSimon --force --dist bookworm --size 10G --memory 1G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il fallait ensuite faire les configurations réseau, nous avons ajouté ceci dans le fichier ''/etc/network/interfaces'' afin de permettre les connexions en ipv6:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auto enX0&lt;br /&gt;
iface enX0 inet6 auto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Nous avons ensuite ajouté ces lignes dans le fichier ''/etc/resolv.conf''  afin de stocker les adresses des serveurs DNS:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
domain plil.info&lt;br /&gt;
search plil.info plil.fr&lt;br /&gt;
nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Enfin, nous avons ajouté de nouvelles sources dans le fichier ''/etc/apt/sources.list'' pour pouvoir ajouter certains paquets jusqu'alors inaccessibles &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
deb     http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
deb-src http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IA ===&lt;br /&gt;
Nous avons utilisé nanoedge pour les entraînements. Nous avons choisi de détecter les mouvements de rotation de la main. Le format du dataset était le suivant:&lt;br /&gt;
&lt;br /&gt;
1 fichier par classe, 1 ligne par mouvement.&lt;br /&gt;
&lt;br /&gt;
Cela nous a permit de détecter les rotation dans un intervalle de temps prédéfini d'environ 7 secondes. &lt;br /&gt;
&lt;br /&gt;
==== Acquisition du dataset. ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import numpy as np&lt;br /&gt;
import keyboard&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
#py -m serial.tools.list_ports&lt;br /&gt;
n, m = 4, 4&lt;br /&gt;
res = (n,m)&lt;br /&gt;
&lt;br /&gt;
nb_sample_per_recording = 20&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
	file = sys.argv[1]&lt;br /&gt;
except:&lt;br /&gt;
	print(&amp;quot;Give file name as input.&amp;quot;)&lt;br /&gt;
	exit()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Writing to&amp;quot;, file)&lt;br /&gt;
&lt;br /&gt;
with serial.Serial('COM7', 460800, timeout=1) as ser:&lt;br /&gt;
	for i_sample in range(10):&lt;br /&gt;
		f = open(file, mode=&amp;quot;a&amp;quot;)&lt;br /&gt;
		print(&amp;quot;Press q to start recording&amp;quot;)&lt;br /&gt;
		while 1:&lt;br /&gt;
			if keyboard.is_pressed('q'):  # if key 'q' is pressed &lt;br /&gt;
				break  # finishing the loop&lt;br /&gt;
&lt;br /&gt;
		#synchronisation&lt;br /&gt;
		line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
		while line != &amp;quot;\n&amp;quot;:&lt;br /&gt;
			line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
&lt;br /&gt;
		print(&amp;quot;Sample number: {}&amp;quot;.format(i_sample))&lt;br /&gt;
		print(&amp;quot;Recording...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
		lines = []&lt;br /&gt;
		for t in range(nb_sample_per_recording):&lt;br /&gt;
			#converts to matrix&lt;br /&gt;
			mat = np.zeros(res)&lt;br /&gt;
			for i in range(n):&lt;br /&gt;
				line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
				line = str(line)&lt;br /&gt;
				cells = line.split('|')&lt;br /&gt;
				for j in range(m): &lt;br /&gt;
					intensity, state = cells[j].split(':')&lt;br /&gt;
					try:&lt;br /&gt;
						intensity = int(intensity)&lt;br /&gt;
					except:&lt;br /&gt;
						intensity = 0&lt;br /&gt;
					mat[i][j] = intensity&lt;br /&gt;
&lt;br /&gt;
			line = ser.readline()   # read a '\n' terminated line&lt;br /&gt;
			mat = mat.flatten()&lt;br /&gt;
			str_list = map(str,mat)&lt;br /&gt;
			line = &amp;quot;,&amp;quot;.join(str_list)&lt;br /&gt;
			lines.append(line)&lt;br /&gt;
			#np.savetxt(&amp;quot;main bouge.csv&amp;quot;, matrix, delimiter=&amp;quot;,&amp;quot;)&lt;br /&gt;
		lines = &amp;quot;,&amp;quot;.join(lines)&lt;br /&gt;
		f.write(lines)&lt;br /&gt;
		f.write(&amp;quot;\n&amp;quot;)&lt;br /&gt;
		print(&amp;quot;Finished&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
		f.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;L'IA fonctionnant très bien après validation (87,40% de précision avec le modèle random forest), nous avons décidé de détecter les mouvement en continu en faisant de l'augmentation de données.&lt;br /&gt;
&lt;br /&gt;
==== Augmentation ====&lt;br /&gt;
Nous avons découpé les échantillons de façon aléatoire pour détecter des parties de la rotation plus courtes.&lt;br /&gt;
&lt;br /&gt;
==== Inférence ====&lt;br /&gt;
Pour faire tourner l'inférence, nous avons utilisé l'émulateur généré par nanoedge. Nous l'avons placé sur la VM où il lisait les données reçues dans un fichier tampon.&lt;br /&gt;
&lt;br /&gt;
=== Communication ===&lt;br /&gt;
&lt;br /&gt;
==== Carte NUCLEO ====&lt;br /&gt;
Grâce à cube IDE, nous avons flashé la carte avec un des code d'exemples adapté au capteur et à la carte: 53L5A1_SimpleRanging.&lt;br /&gt;
&lt;br /&gt;
Nous avons modifié le code afin de rendre le formatage de communication série moins lourd.&lt;br /&gt;
&lt;br /&gt;
==== Réception des données sur la raspberry ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import numpy as np&lt;br /&gt;
import keyboard&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
#py -m serial.tools.list_ports&lt;br /&gt;
n, m = 4, 4&lt;br /&gt;
res = (n,m)&lt;br /&gt;
&lt;br /&gt;
with serial.Serial('COM7', 460800, timeout=1) as ser:&lt;br /&gt;
	#synchronisation&lt;br /&gt;
	line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
	while line != &amp;quot;\n&amp;quot;:&lt;br /&gt;
		line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
&lt;br /&gt;
	while 1:&lt;br /&gt;
		print(&amp;quot;New sample&amp;quot;)&lt;br /&gt;
		#converts to matrix&lt;br /&gt;
		mat = np.zeros(res)&lt;br /&gt;
		for i in range(n):&lt;br /&gt;
			line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
			line = str(line)&lt;br /&gt;
			cells = line.split('|')&lt;br /&gt;
			for j in range(m): &lt;br /&gt;
				intensity, state = cells[j].split(':')&lt;br /&gt;
				try:&lt;br /&gt;
					intensity = int(intensity)&lt;br /&gt;
				except:&lt;br /&gt;
					intensity = 0&lt;br /&gt;
				mat[i][j] = intensity&lt;br /&gt;
		line = ser.readline()&lt;br /&gt;
		mat = mat.flatten()&lt;br /&gt;
		str_list = map(str,mat)&lt;br /&gt;
		line = &amp;quot;,&amp;quot;.join(str_list)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Communication entre la Raspberry et la VM. ====&lt;br /&gt;
Nous avons utilisé mosquitto pour communiquer. La Raspberry était le client et la VM le serveur.&lt;br /&gt;
&lt;br /&gt;
== A detailler un peu mieux ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Formatage des messages envoyés par la Nucleo avec STM32CubeIDE&lt;br /&gt;
&lt;br /&gt;
-installation de mosquitto sur la VM&lt;br /&gt;
&lt;br /&gt;
-installation de mosquitto sur la raspberry (client)&lt;br /&gt;
&lt;br /&gt;
-en fait le client marche mieux en python sans mosquitto&lt;br /&gt;
&lt;br /&gt;
-en fait le broker marche mieux en python sans mosquitto non plus&lt;/div&gt;</summary>
		<author><name>Esimon</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/BalbastreSimon&amp;diff=4945</id>
		<title>SE5 ECEAI/eceai 2023/2024/BalbastreSimon</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/BalbastreSimon&amp;diff=4945"/>
		<updated>2024-01-28T21:56:18Z</updated>

		<summary type="html">&lt;p&gt;Esimon : /* Communication entre la Raspberry et la VM. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Le Sujet ==&lt;br /&gt;
L'objectif de ce TP est de créer un système capable de reconnaître certains mouvements à l'aide d'une caméra, notre système doit faire la différence entre une rotation de la main dans le sens horaire et une rotation dans le sens trigonométrique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'architecture utilisée est la suivante:&lt;br /&gt;
&lt;br /&gt;
Un capteur X-NUCLEO-53L5A1 récupère les données, il est consitué d'une matrice 8x8 de capteurs de distance, nous utiliserons ici une matrice 4x4 faisant partie du composant NUCLEO.&lt;br /&gt;
&lt;br /&gt;
Ce composant NUCLEO est envoie les données brutes à une stm32 chargée de les formater avant de les transmettre à une raspberry pi4.&lt;br /&gt;
&lt;br /&gt;
La raspberry pi utilise un script python pour récupérer les données et les envoyer par MQTT (un protocole basé sur TCP) à une machine virtuelle hébergée sur chassiron.&lt;br /&gt;
&lt;br /&gt;
Ce travail a été réalisé par Maxime Balbastre et Élias Simon&lt;br /&gt;
&lt;br /&gt;
=== Raspberry Pi4 ===&lt;br /&gt;
Nous avons d'abord cherché à mettre l'OS Raspbian sur la carte à l'aide de l'installeur &amp;quot;Raspberry PI Imager&amp;quot;&lt;br /&gt;
&lt;br /&gt;
L'objectif était de configurer la raspberry via une liaison série vers la zabeth. Devant les difficultés éprouvées, nous avons décider de nous tourner vers une autre connexion et nous avons re-flashé la carte en la connectant directement au routeur WiFi_IE_1 en autorisant les connexions ssh.&lt;br /&gt;
&lt;br /&gt;
De cette manière nous pouvions nous connecter à la raspberry par ssh en partant de n'importe quelle machine connectée à WiFi_IE_1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Machine virtuelle ===&lt;br /&gt;
Nous avons d'abord créé une machine virtuelle tournant sur debian à l'aide de la commande suivante:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname BalbastreSimon --force --dist bookworm --size 10G --memory 1G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il fallait ensuite faire les configurations réseau, nous avons ajouté ceci dans le fichier ''/etc/network/interfaces'' afin de permettre les connexions en ipv6:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auto enX0&lt;br /&gt;
iface enX0 inet6 auto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Nous avons ensuite ajouté ces lignes dans le fichier ''/etc/resolv.conf''  afin de stocker les adresses des serveurs DNS:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
domain plil.info&lt;br /&gt;
search plil.info plil.fr&lt;br /&gt;
nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Enfin, nous avons ajouté de nouvelles sources dans le fichier ''/etc/apt/sources.list'' pour pouvoir ajouter certains paquets jusqu'alors inaccessibles &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
deb     http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
deb-src http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IA ===&lt;br /&gt;
Nous avons utilisé nanoedge pour les entraînements. Nous avons choisi de détecter les mouvements de rotation de la main. Le format du dataset était le suivant:&lt;br /&gt;
&lt;br /&gt;
1 fichier par classe, 1 ligne par mouvement.&lt;br /&gt;
&lt;br /&gt;
Cela nous a permit de détecter les rotation dans un intervalle de temps prédéfini d'environ 7 secondes. &lt;br /&gt;
&lt;br /&gt;
==== Acquisition du dataset. ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import numpy as np&lt;br /&gt;
import keyboard&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
#py -m serial.tools.list_ports&lt;br /&gt;
n, m = 4, 4&lt;br /&gt;
res = (n,m)&lt;br /&gt;
&lt;br /&gt;
nb_sample_per_recording = 20&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
	file = sys.argv[1]&lt;br /&gt;
except:&lt;br /&gt;
	print(&amp;quot;Give file name as input.&amp;quot;)&lt;br /&gt;
	exit()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Writing to&amp;quot;, file)&lt;br /&gt;
&lt;br /&gt;
with serial.Serial('COM7', 460800, timeout=1) as ser:&lt;br /&gt;
	for i_sample in range(10):&lt;br /&gt;
		f = open(file, mode=&amp;quot;a&amp;quot;)&lt;br /&gt;
		print(&amp;quot;Press q to start recording&amp;quot;)&lt;br /&gt;
		while 1:&lt;br /&gt;
			if keyboard.is_pressed('q'):  # if key 'q' is pressed &lt;br /&gt;
				break  # finishing the loop&lt;br /&gt;
&lt;br /&gt;
		#synchronisation&lt;br /&gt;
		line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
		while line != &amp;quot;\n&amp;quot;:&lt;br /&gt;
			line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
&lt;br /&gt;
		print(&amp;quot;Sample number: {}&amp;quot;.format(i_sample))&lt;br /&gt;
		print(&amp;quot;Recording...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
		lines = []&lt;br /&gt;
		for t in range(nb_sample_per_recording):&lt;br /&gt;
			#converts to matrix&lt;br /&gt;
			mat = np.zeros(res)&lt;br /&gt;
			for i in range(n):&lt;br /&gt;
				line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
				line = str(line)&lt;br /&gt;
				cells = line.split('|')&lt;br /&gt;
				for j in range(m): &lt;br /&gt;
					intensity, state = cells[j].split(':')&lt;br /&gt;
					try:&lt;br /&gt;
						intensity = int(intensity)&lt;br /&gt;
					except:&lt;br /&gt;
						intensity = 0&lt;br /&gt;
					mat[i][j] = intensity&lt;br /&gt;
&lt;br /&gt;
			line = ser.readline()   # read a '\n' terminated line&lt;br /&gt;
			mat = mat.flatten()&lt;br /&gt;
			str_list = map(str,mat)&lt;br /&gt;
			line = &amp;quot;,&amp;quot;.join(str_list)&lt;br /&gt;
			lines.append(line)&lt;br /&gt;
			#np.savetxt(&amp;quot;main bouge.csv&amp;quot;, matrix, delimiter=&amp;quot;,&amp;quot;)&lt;br /&gt;
		lines = &amp;quot;,&amp;quot;.join(lines)&lt;br /&gt;
		f.write(lines)&lt;br /&gt;
		f.write(&amp;quot;\n&amp;quot;)&lt;br /&gt;
		print(&amp;quot;Finished&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
		f.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;L'IA fonctionnant très bien après validation (87,40% de précision avec le modèle random forest), nous avons décidé de détecter les mouvement en continu en faisant de l'augmentation de données.&lt;br /&gt;
&lt;br /&gt;
==== Augmentation ====&lt;br /&gt;
Nous avons découpé les échantillons de façon aléatoire pour détecter des parties de la rotation plus courtes.&lt;br /&gt;
&lt;br /&gt;
=== Communication ===&lt;br /&gt;
&lt;br /&gt;
==== Carte NUCLEO ====&lt;br /&gt;
Grâce à cube IDE, nous avons flashé la carte avec un des code d'exemples adapté au capteur et à la carte: 53L5A1_SimpleRanging.&lt;br /&gt;
&lt;br /&gt;
Nous avons modifié le code afin de rendre le formatage de communication série moins lourd.&lt;br /&gt;
&lt;br /&gt;
==== Réception des données sur la raspberry ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import numpy as np&lt;br /&gt;
import keyboard&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
#py -m serial.tools.list_ports&lt;br /&gt;
n, m = 4, 4&lt;br /&gt;
res = (n,m)&lt;br /&gt;
&lt;br /&gt;
with serial.Serial('COM7', 460800, timeout=1) as ser:&lt;br /&gt;
	#synchronisation&lt;br /&gt;
	line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
	while line != &amp;quot;\n&amp;quot;:&lt;br /&gt;
		line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
&lt;br /&gt;
	while 1:&lt;br /&gt;
		print(&amp;quot;New sample&amp;quot;)&lt;br /&gt;
		#converts to matrix&lt;br /&gt;
		mat = np.zeros(res)&lt;br /&gt;
		for i in range(n):&lt;br /&gt;
			line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
			line = str(line)&lt;br /&gt;
			cells = line.split('|')&lt;br /&gt;
			for j in range(m): &lt;br /&gt;
				intensity, state = cells[j].split(':')&lt;br /&gt;
				try:&lt;br /&gt;
					intensity = int(intensity)&lt;br /&gt;
				except:&lt;br /&gt;
					intensity = 0&lt;br /&gt;
				mat[i][j] = intensity&lt;br /&gt;
		line = ser.readline()&lt;br /&gt;
		mat = mat.flatten()&lt;br /&gt;
		str_list = map(str,mat)&lt;br /&gt;
		line = &amp;quot;,&amp;quot;.join(str_list)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Communication entre la Raspberry et la VM. ====&lt;br /&gt;
Nous avons utilisé mosquitto pour communiquer. La Raspberry était le client et la VM le serveur.&lt;br /&gt;
&lt;br /&gt;
== A detailler un peu mieux ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Formatage des messages envoyés par la Nucleo avec STM32CubeIDE&lt;br /&gt;
&lt;br /&gt;
-installation de mosquitto sur la VM&lt;br /&gt;
&lt;br /&gt;
-installation de mosquitto sur la raspberry (client)&lt;br /&gt;
&lt;br /&gt;
-en fait le client marche mieux en python sans mosquitto&lt;br /&gt;
&lt;br /&gt;
-en fait le broker marche mieux en python sans mosquitto non plus&lt;/div&gt;</summary>
		<author><name>Esimon</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/BalbastreSimon&amp;diff=4944</id>
		<title>SE5 ECEAI/eceai 2023/2024/BalbastreSimon</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/BalbastreSimon&amp;diff=4944"/>
		<updated>2024-01-28T21:56:06Z</updated>

		<summary type="html">&lt;p&gt;Esimon : /* Communication */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Le Sujet ==&lt;br /&gt;
L'objectif de ce TP est de créer un système capable de reconnaître certains mouvements à l'aide d'une caméra, notre système doit faire la différence entre une rotation de la main dans le sens horaire et une rotation dans le sens trigonométrique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'architecture utilisée est la suivante:&lt;br /&gt;
&lt;br /&gt;
Un capteur X-NUCLEO-53L5A1 récupère les données, il est consitué d'une matrice 8x8 de capteurs de distance, nous utiliserons ici une matrice 4x4 faisant partie du composant NUCLEO.&lt;br /&gt;
&lt;br /&gt;
Ce composant NUCLEO est envoie les données brutes à une stm32 chargée de les formater avant de les transmettre à une raspberry pi4.&lt;br /&gt;
&lt;br /&gt;
La raspberry pi utilise un script python pour récupérer les données et les envoyer par MQTT (un protocole basé sur TCP) à une machine virtuelle hébergée sur chassiron.&lt;br /&gt;
&lt;br /&gt;
Ce travail a été réalisé par Maxime Balbastre et Élias Simon&lt;br /&gt;
&lt;br /&gt;
=== Raspberry Pi4 ===&lt;br /&gt;
Nous avons d'abord cherché à mettre l'OS Raspbian sur la carte à l'aide de l'installeur &amp;quot;Raspberry PI Imager&amp;quot;&lt;br /&gt;
&lt;br /&gt;
L'objectif était de configurer la raspberry via une liaison série vers la zabeth. Devant les difficultés éprouvées, nous avons décider de nous tourner vers une autre connexion et nous avons re-flashé la carte en la connectant directement au routeur WiFi_IE_1 en autorisant les connexions ssh.&lt;br /&gt;
&lt;br /&gt;
De cette manière nous pouvions nous connecter à la raspberry par ssh en partant de n'importe quelle machine connectée à WiFi_IE_1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Machine virtuelle ===&lt;br /&gt;
Nous avons d'abord créé une machine virtuelle tournant sur debian à l'aide de la commande suivante:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname BalbastreSimon --force --dist bookworm --size 10G --memory 1G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il fallait ensuite faire les configurations réseau, nous avons ajouté ceci dans le fichier ''/etc/network/interfaces'' afin de permettre les connexions en ipv6:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auto enX0&lt;br /&gt;
iface enX0 inet6 auto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Nous avons ensuite ajouté ces lignes dans le fichier ''/etc/resolv.conf''  afin de stocker les adresses des serveurs DNS:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
domain plil.info&lt;br /&gt;
search plil.info plil.fr&lt;br /&gt;
nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Enfin, nous avons ajouté de nouvelles sources dans le fichier ''/etc/apt/sources.list'' pour pouvoir ajouter certains paquets jusqu'alors inaccessibles &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
deb     http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
deb-src http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IA ===&lt;br /&gt;
Nous avons utilisé nanoedge pour les entraînements. Nous avons choisi de détecter les mouvements de rotation de la main. Le format du dataset était le suivant:&lt;br /&gt;
&lt;br /&gt;
1 fichier par classe, 1 ligne par mouvement.&lt;br /&gt;
&lt;br /&gt;
Cela nous a permit de détecter les rotation dans un intervalle de temps prédéfini d'environ 7 secondes. &lt;br /&gt;
&lt;br /&gt;
==== Acquisition du dataset. ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import numpy as np&lt;br /&gt;
import keyboard&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
#py -m serial.tools.list_ports&lt;br /&gt;
n, m = 4, 4&lt;br /&gt;
res = (n,m)&lt;br /&gt;
&lt;br /&gt;
nb_sample_per_recording = 20&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
	file = sys.argv[1]&lt;br /&gt;
except:&lt;br /&gt;
	print(&amp;quot;Give file name as input.&amp;quot;)&lt;br /&gt;
	exit()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Writing to&amp;quot;, file)&lt;br /&gt;
&lt;br /&gt;
with serial.Serial('COM7', 460800, timeout=1) as ser:&lt;br /&gt;
	for i_sample in range(10):&lt;br /&gt;
		f = open(file, mode=&amp;quot;a&amp;quot;)&lt;br /&gt;
		print(&amp;quot;Press q to start recording&amp;quot;)&lt;br /&gt;
		while 1:&lt;br /&gt;
			if keyboard.is_pressed('q'):  # if key 'q' is pressed &lt;br /&gt;
				break  # finishing the loop&lt;br /&gt;
&lt;br /&gt;
		#synchronisation&lt;br /&gt;
		line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
		while line != &amp;quot;\n&amp;quot;:&lt;br /&gt;
			line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
&lt;br /&gt;
		print(&amp;quot;Sample number: {}&amp;quot;.format(i_sample))&lt;br /&gt;
		print(&amp;quot;Recording...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
		lines = []&lt;br /&gt;
		for t in range(nb_sample_per_recording):&lt;br /&gt;
			#converts to matrix&lt;br /&gt;
			mat = np.zeros(res)&lt;br /&gt;
			for i in range(n):&lt;br /&gt;
				line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
				line = str(line)&lt;br /&gt;
				cells = line.split('|')&lt;br /&gt;
				for j in range(m): &lt;br /&gt;
					intensity, state = cells[j].split(':')&lt;br /&gt;
					try:&lt;br /&gt;
						intensity = int(intensity)&lt;br /&gt;
					except:&lt;br /&gt;
						intensity = 0&lt;br /&gt;
					mat[i][j] = intensity&lt;br /&gt;
&lt;br /&gt;
			line = ser.readline()   # read a '\n' terminated line&lt;br /&gt;
			mat = mat.flatten()&lt;br /&gt;
			str_list = map(str,mat)&lt;br /&gt;
			line = &amp;quot;,&amp;quot;.join(str_list)&lt;br /&gt;
			lines.append(line)&lt;br /&gt;
			#np.savetxt(&amp;quot;main bouge.csv&amp;quot;, matrix, delimiter=&amp;quot;,&amp;quot;)&lt;br /&gt;
		lines = &amp;quot;,&amp;quot;.join(lines)&lt;br /&gt;
		f.write(lines)&lt;br /&gt;
		f.write(&amp;quot;\n&amp;quot;)&lt;br /&gt;
		print(&amp;quot;Finished&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
		f.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;L'IA fonctionnant très bien après validation (87,40% de précision avec le modèle random forest), nous avons décidé de détecter les mouvement en continu en faisant de l'augmentation de données.&lt;br /&gt;
&lt;br /&gt;
==== Augmentation ====&lt;br /&gt;
Nous avons découpé les échantillons de façon aléatoire pour détecter des parties de la rotation plus courtes.&lt;br /&gt;
&lt;br /&gt;
=== Communication ===&lt;br /&gt;
&lt;br /&gt;
==== Carte NUCLEO ====&lt;br /&gt;
Grâce à cube IDE, nous avons flashé la carte avec un des code d'exemples adapté au capteur et à la carte: 53L5A1_SimpleRanging.&lt;br /&gt;
&lt;br /&gt;
Nous avons modifié le code afin de rendre le formatage de communication série moins lourd.&lt;br /&gt;
&lt;br /&gt;
==== Réception des données sur la raspberry ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import numpy as np&lt;br /&gt;
import keyboard&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
#py -m serial.tools.list_ports&lt;br /&gt;
n, m = 4, 4&lt;br /&gt;
res = (n,m)&lt;br /&gt;
&lt;br /&gt;
with serial.Serial('COM7', 460800, timeout=1) as ser:&lt;br /&gt;
	#synchronisation&lt;br /&gt;
	line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
	while line != &amp;quot;\n&amp;quot;:&lt;br /&gt;
		line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
&lt;br /&gt;
	while 1:&lt;br /&gt;
		print(&amp;quot;New sample&amp;quot;)&lt;br /&gt;
		#converts to matrix&lt;br /&gt;
		mat = np.zeros(res)&lt;br /&gt;
		for i in range(n):&lt;br /&gt;
			line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
			line = str(line)&lt;br /&gt;
			cells = line.split('|')&lt;br /&gt;
			for j in range(m): &lt;br /&gt;
				intensity, state = cells[j].split(':')&lt;br /&gt;
				try:&lt;br /&gt;
					intensity = int(intensity)&lt;br /&gt;
				except:&lt;br /&gt;
					intensity = 0&lt;br /&gt;
				mat[i][j] = intensity&lt;br /&gt;
		line = ser.readline()&lt;br /&gt;
		mat = mat.flatten()&lt;br /&gt;
		str_list = map(str,mat)&lt;br /&gt;
		line = &amp;quot;,&amp;quot;.join(str_list)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Communication entre la Raspberry et la VM. ====&lt;br /&gt;
Nous avons utilisé mosquitto pour communiquer. La Raspberry était le client et la VM le serveur.&lt;br /&gt;
&lt;br /&gt;
Nous avons fait tourné l'IA avec l'émulateur sur le serveur.&lt;br /&gt;
&lt;br /&gt;
== A detailler un peu mieux ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Formatage des messages envoyés par la Nucleo avec STM32CubeIDE&lt;br /&gt;
&lt;br /&gt;
-installation de mosquitto sur la VM&lt;br /&gt;
&lt;br /&gt;
-installation de mosquitto sur la raspberry (client)&lt;br /&gt;
&lt;br /&gt;
-en fait le client marche mieux en python sans mosquitto&lt;br /&gt;
&lt;br /&gt;
-en fait le broker marche mieux en python sans mosquitto non plus&lt;/div&gt;</summary>
		<author><name>Esimon</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/BalbastreSimon&amp;diff=4943</id>
		<title>SE5 ECEAI/eceai 2023/2024/BalbastreSimon</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/BalbastreSimon&amp;diff=4943"/>
		<updated>2024-01-28T21:52:54Z</updated>

		<summary type="html">&lt;p&gt;Esimon : /* IA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Le Sujet ==&lt;br /&gt;
L'objectif de ce TP est de créer un système capable de reconnaître certains mouvements à l'aide d'une caméra, notre système doit faire la différence entre une rotation de la main dans le sens horaire et une rotation dans le sens trigonométrique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'architecture utilisée est la suivante:&lt;br /&gt;
&lt;br /&gt;
Un capteur X-NUCLEO-53L5A1 récupère les données, il est consitué d'une matrice 8x8 de capteurs de distance, nous utiliserons ici une matrice 4x4 faisant partie du composant NUCLEO.&lt;br /&gt;
&lt;br /&gt;
Ce composant NUCLEO est envoie les données brutes à une stm32 chargée de les formater avant de les transmettre à une raspberry pi4.&lt;br /&gt;
&lt;br /&gt;
La raspberry pi utilise un script python pour récupérer les données et les envoyer par MQTT (un protocole basé sur TCP) à une machine virtuelle hébergée sur chassiron.&lt;br /&gt;
&lt;br /&gt;
Ce travail a été réalisé par Maxime Balbastre et Élias Simon&lt;br /&gt;
&lt;br /&gt;
=== Raspberry Pi4 ===&lt;br /&gt;
Nous avons d'abord cherché à mettre l'OS Raspbian sur la carte à l'aide de l'installeur &amp;quot;Raspberry PI Imager&amp;quot;&lt;br /&gt;
&lt;br /&gt;
L'objectif était de configurer la raspberry via une liaison série vers la zabeth. Devant les difficultés éprouvées, nous avons décider de nous tourner vers une autre connexion et nous avons re-flashé la carte en la connectant directement au routeur WiFi_IE_1 en autorisant les connexions ssh.&lt;br /&gt;
&lt;br /&gt;
De cette manière nous pouvions nous connecter à la raspberry par ssh en partant de n'importe quelle machine connectée à WiFi_IE_1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Machine virtuelle ===&lt;br /&gt;
Nous avons d'abord créé une machine virtuelle tournant sur debian à l'aide de la commande suivante:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname BalbastreSimon --force --dist bookworm --size 10G --memory 1G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il fallait ensuite faire les configurations réseau, nous avons ajouté ceci dans le fichier ''/etc/network/interfaces'' afin de permettre les connexions en ipv6:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auto enX0&lt;br /&gt;
iface enX0 inet6 auto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Nous avons ensuite ajouté ces lignes dans le fichier ''/etc/resolv.conf''  afin de stocker les adresses des serveurs DNS:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
domain plil.info&lt;br /&gt;
search plil.info plil.fr&lt;br /&gt;
nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Enfin, nous avons ajouté de nouvelles sources dans le fichier ''/etc/apt/sources.list'' pour pouvoir ajouter certains paquets jusqu'alors inaccessibles &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
deb     http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
deb-src http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IA ===&lt;br /&gt;
Nous avons utilisé nanoedge pour les entraînements. Nous avons choisi de détecter les mouvements de rotation de la main. Le format du dataset était le suivant:&lt;br /&gt;
&lt;br /&gt;
1 fichier par classe, 1 ligne par mouvement.&lt;br /&gt;
&lt;br /&gt;
Cela nous a permit de détecter les rotation dans un intervalle de temps prédéfini d'environ 7 secondes. &lt;br /&gt;
&lt;br /&gt;
==== Acquisition du dataset. ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import numpy as np&lt;br /&gt;
import keyboard&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
#py -m serial.tools.list_ports&lt;br /&gt;
n, m = 4, 4&lt;br /&gt;
res = (n,m)&lt;br /&gt;
&lt;br /&gt;
nb_sample_per_recording = 20&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
	file = sys.argv[1]&lt;br /&gt;
except:&lt;br /&gt;
	print(&amp;quot;Give file name as input.&amp;quot;)&lt;br /&gt;
	exit()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Writing to&amp;quot;, file)&lt;br /&gt;
&lt;br /&gt;
with serial.Serial('COM7', 460800, timeout=1) as ser:&lt;br /&gt;
	for i_sample in range(10):&lt;br /&gt;
		f = open(file, mode=&amp;quot;a&amp;quot;)&lt;br /&gt;
		print(&amp;quot;Press q to start recording&amp;quot;)&lt;br /&gt;
		while 1:&lt;br /&gt;
			if keyboard.is_pressed('q'):  # if key 'q' is pressed &lt;br /&gt;
				break  # finishing the loop&lt;br /&gt;
&lt;br /&gt;
		#synchronisation&lt;br /&gt;
		line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
		while line != &amp;quot;\n&amp;quot;:&lt;br /&gt;
			line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
&lt;br /&gt;
		print(&amp;quot;Sample number: {}&amp;quot;.format(i_sample))&lt;br /&gt;
		print(&amp;quot;Recording...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
		lines = []&lt;br /&gt;
		for t in range(nb_sample_per_recording):&lt;br /&gt;
			#converts to matrix&lt;br /&gt;
			mat = np.zeros(res)&lt;br /&gt;
			for i in range(n):&lt;br /&gt;
				line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
				line = str(line)&lt;br /&gt;
				cells = line.split('|')&lt;br /&gt;
				for j in range(m): &lt;br /&gt;
					intensity, state = cells[j].split(':')&lt;br /&gt;
					try:&lt;br /&gt;
						intensity = int(intensity)&lt;br /&gt;
					except:&lt;br /&gt;
						intensity = 0&lt;br /&gt;
					mat[i][j] = intensity&lt;br /&gt;
&lt;br /&gt;
			line = ser.readline()   # read a '\n' terminated line&lt;br /&gt;
			mat = mat.flatten()&lt;br /&gt;
			str_list = map(str,mat)&lt;br /&gt;
			line = &amp;quot;,&amp;quot;.join(str_list)&lt;br /&gt;
			lines.append(line)&lt;br /&gt;
			#np.savetxt(&amp;quot;main bouge.csv&amp;quot;, matrix, delimiter=&amp;quot;,&amp;quot;)&lt;br /&gt;
		lines = &amp;quot;,&amp;quot;.join(lines)&lt;br /&gt;
		f.write(lines)&lt;br /&gt;
		f.write(&amp;quot;\n&amp;quot;)&lt;br /&gt;
		print(&amp;quot;Finished&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
		f.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;L'IA fonctionnant très bien après validation (87,40% de précision avec le modèle random forest), nous avons décidé de détecter les mouvement en continu en faisant de l'augmentation de données.&lt;br /&gt;
&lt;br /&gt;
==== Augmentation ====&lt;br /&gt;
Nous avons découpé les échantillons de façon aléatoire pour détecter des parties de la rotation plus courtes.&lt;br /&gt;
&lt;br /&gt;
=== Communication ===&lt;br /&gt;
&lt;br /&gt;
==== Carte NUCLEO ====&lt;br /&gt;
Grâce à cube IDE, nous avons flashé la carte avec un des code d'exemples adapté au capteur et à la carte: 53L5A1_SimpleRanging.&lt;br /&gt;
&lt;br /&gt;
Nous avons modifié le code afin de rendre le formatage de communication série moins lourd.&lt;br /&gt;
&lt;br /&gt;
==== Réception des données sur la raspberry ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import numpy as np&lt;br /&gt;
import keyboard&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
#py -m serial.tools.list_ports&lt;br /&gt;
n, m = 4, 4&lt;br /&gt;
res = (n,m)&lt;br /&gt;
&lt;br /&gt;
with serial.Serial('COM7', 460800, timeout=1) as ser:&lt;br /&gt;
	#synchronisation&lt;br /&gt;
	line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
	while line != &amp;quot;\n&amp;quot;:&lt;br /&gt;
		line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
&lt;br /&gt;
	while 1:&lt;br /&gt;
		print(&amp;quot;New sample&amp;quot;)&lt;br /&gt;
		#converts to matrix&lt;br /&gt;
		mat = np.zeros(res)&lt;br /&gt;
		for i in range(n):&lt;br /&gt;
			line = ser.readline().decode()   # read a '\n' terminated line&lt;br /&gt;
			line = str(line)&lt;br /&gt;
			cells = line.split('|')&lt;br /&gt;
			for j in range(m): &lt;br /&gt;
				intensity, state = cells[j].split(':')&lt;br /&gt;
				try:&lt;br /&gt;
					intensity = int(intensity)&lt;br /&gt;
				except:&lt;br /&gt;
					intensity = 0&lt;br /&gt;
				mat[i][j] = intensity&lt;br /&gt;
		line = ser.readline()&lt;br /&gt;
		mat = mat.flatten()&lt;br /&gt;
		str_list = map(str,mat)&lt;br /&gt;
		line = &amp;quot;,&amp;quot;.join(str_list)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Nous avons fait tourné l'IA avec l'émulateur sur le serveur.&lt;br /&gt;
&lt;br /&gt;
== A detailler un peu mieux ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Formatage des messages envoyés par la Nucleo avec STM32CubeIDE&lt;br /&gt;
&lt;br /&gt;
-installation de mosquitto sur la VM&lt;br /&gt;
&lt;br /&gt;
-installation de mosquitto sur la raspberry (client)&lt;br /&gt;
&lt;br /&gt;
-en fait le client marche mieux en python sans mosquitto&lt;br /&gt;
&lt;br /&gt;
-en fait le broker marche mieux en python sans mosquitto non plus&lt;/div&gt;</summary>
		<author><name>Esimon</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/BalbastreSimon&amp;diff=3683</id>
		<title>SE5 ECEAI/eceai 2023/2024/BalbastreSimon</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/BalbastreSimon&amp;diff=3683"/>
		<updated>2023-12-20T17:03:27Z</updated>

		<summary type="html">&lt;p&gt;Esimon : /* IA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Le Sujet ==&lt;br /&gt;
L'objectif de ce TP est de créer un système capable de reconnaître certains mouvements à l'aide d'une caméra, notre système doit faire la différence entre une rotation de la main dans le sens horaire et une rotation dans le sens trigonométrique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'architecture utilisée est la suivante:&lt;br /&gt;
&lt;br /&gt;
Un capteur X-NUCLEO-53L5A1 récupère les données, il est consitué d'une matrice 8x8 de capteurs de distance, nous utiliserons ici une matrice 4x4 faisant partie du composant NUCLEO.&lt;br /&gt;
&lt;br /&gt;
Ce composant NUCLEO est envoie les données brutes à une stm32 chargée de les formater avant de les transmettre à une raspberry pi4.&lt;br /&gt;
&lt;br /&gt;
La raspberry pi utilise un script python pour récupérer les données et les envoyer par MQTT (un protocole basé sur TCP) à une machine virtuelle hébergée sur chassiron.&lt;br /&gt;
&lt;br /&gt;
Ce travail a été réalisé par Maxime Balbastre et Élias Simon&lt;br /&gt;
&lt;br /&gt;
=== Raspberry Pi4 ===&lt;br /&gt;
Nous avons d'abord cherché à mettre l'OS Raspbian sur la carte à l'aide de l'installeur &amp;quot;Raspberry PI Imager&amp;quot;&lt;br /&gt;
&lt;br /&gt;
L'objectif était de configurer la raspberry via une liaison série vers la zabeth. Devant les difficultés éprouvées, nous avons décider de nous tourner vers une autre connexion et nous avons re-flashé la carte en la connectant directement au routeur WiFi_IE_1 en autorisant les connexions ssh.&lt;br /&gt;
&lt;br /&gt;
De cette manière nous pouvions nous connecter à la raspberry par ssh en partant de n'importe quelle machine connectée à WiFi_IE_1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Machine virtuelle ===&lt;br /&gt;
Nous avons d'abord créé une machine virtuelle tournant sur debian à l'aide de la commande suivante:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname BalbastreSimon --force --dist bookworm --size 10G --memory 1G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il fallait ensuite faire les configurations réseau, nous avons ajouté ceci dans le fichier ''/etc/network/interfaces'' afin de permettre les connexions en ipv6:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auto enX0&lt;br /&gt;
iface enX0 inet6 auto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Nous avons ensuite ajouté ces lignes dans le fichier ''/etc/resolv.conf''  afin de stocker les adresses des serveurs DNS:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
domain plil.info&lt;br /&gt;
search plil.info plil.fr&lt;br /&gt;
nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Enfin, nous avons ajouté de nouvelles sources dans le fichier ''/etc/apt/sources.list'' pour pouvoir ajouter certains paquets jusqu'alors inaccessibles &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
deb     http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
deb-src http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IA ===&lt;br /&gt;
Nous avons utilisé nanoedge pour les entraînements. Nous avons choisi de détecter les mouvements de rotation de la main. Le format du dataset était le suivant:&lt;br /&gt;
&lt;br /&gt;
1 fichier par classe, 1 ligne par mouvement.&lt;br /&gt;
&lt;br /&gt;
Cela nous a permit de détecter les rotation dans un intervalle de temps prédéfini d'environ 7 secondes. L'IA fonctionnant très bien après validation (87,40% de précision avec le modèle random forest), nous avons décidé de détecter les mouvement en continu en faisant de l'augmentation de données. En découpant les échantillons de différenctes facons pour détecter des parties de la rotation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons fait tourner l'IA avec l'émulateur sur le serveur.&lt;br /&gt;
&lt;br /&gt;
== A detailler un peu mieux ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Formatage des messages envoyés par la Nucleo avec STM32CubeIDE&lt;br /&gt;
&lt;br /&gt;
-installation de mosquitto sur la VM&lt;br /&gt;
&lt;br /&gt;
-installation de mosquitto sur la raspberry (client)&lt;br /&gt;
&lt;br /&gt;
-en fait le client marche mieux en python sans mosquitto&lt;br /&gt;
&lt;br /&gt;
-en fait le broker marche mieux en python sans mosquitto non plus&lt;/div&gt;</summary>
		<author><name>Esimon</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/BalbastreSimon&amp;diff=3667</id>
		<title>SE5 ECEAI/eceai 2023/2024/BalbastreSimon</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/BalbastreSimon&amp;diff=3667"/>
		<updated>2023-12-20T16:50:49Z</updated>

		<summary type="html">&lt;p&gt;Esimon : /* Machine virtuelle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Le Sujet ==&lt;br /&gt;
L'objectif de ce TP est de créer un système capable de reconnaître certains mouvements à l'aide d'une caméra, notre système doit faire la différence entre une rotation de la main dans le sens horaire et une rotation dans le sens trigonométrique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'architecture utilisée est la suivante:&lt;br /&gt;
&lt;br /&gt;
Un capteur X-NUCLEO-53L5A1 récupère les données, il est consitué d'une matrice 8x8 de capteurs de distance, nous utiliserons ici une matrice 4x4 faisant partie du composant NUCLEO.&lt;br /&gt;
&lt;br /&gt;
Ce composant NUCLEO est envoie les données brutes à une stm32 chargée de les formater avant de les transmettre à une raspberry pi4.&lt;br /&gt;
&lt;br /&gt;
La raspberry pi utilise un script python pour récupérer les données et les envoyer par MQTT (un protocole basé sur TCP) à une machine virtuelle hébergée sur chassiron.&lt;br /&gt;
&lt;br /&gt;
Ce travail a été réalisé par Maxime Balbastre et Élias Simon&lt;br /&gt;
&lt;br /&gt;
=== Raspberry Pi4 ===&lt;br /&gt;
Nous avons d'abord cherché à mettre l'OS Raspbian sur la carte à l'aide de l'installeur &amp;quot;Raspberry PI Imager&amp;quot;&lt;br /&gt;
&lt;br /&gt;
L'objectif était de configurer la raspberry via une liaison série vers la zabeth. Devant les difficultés éprouvées, nous avons décider de nous tourner vers une autre connexion et nous avons re-flashé la carte en la connectant directement au routeur WiFi_IE_1 en autorisant les connexions ssh.&lt;br /&gt;
&lt;br /&gt;
De cette manière nous pouvions nous connecter à la raspberry par ssh en partant de n'importe quelle machine connectée à WiFi_IE_1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Machine virtuelle ===&lt;br /&gt;
Nous avons d'abord créé une machine virtuelle tournant sur debian à l'aide de la commande suivante:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname BalbastreSimon --force --dist bookworm --size 10G --memory 1G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il fallait ensuite faire les configurations réseau, nous avons ajouté ceci dans le fichier ''/etc/network/interfaces'' afin de permettre les connexions en ipv6:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auto enX0&lt;br /&gt;
iface enX0 inet6 auto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Nous avons ensuite ajouté ces lignes dans le fichier ''/etc/resolv.conf''  afin de stocker les adresses des serveurs DNS:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
domain plil.info&lt;br /&gt;
search plil.info plil.fr&lt;br /&gt;
nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Enfin, nous avons ajouté de nouvelles sources dans le fichier ''/etc/apt/sources.list'' pour pouvoir ajouter certains paquets jusqu'alors inaccessibles &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
deb     http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
deb-src http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IA ===&lt;br /&gt;
Nous avons utilisé nanoedge pour les entraînements. Nous avons choisi de détecter les mouvements de rotation de la main. Le format du dataset était le suivant:&lt;br /&gt;
&lt;br /&gt;
1 fichier par classe, 1 ligne par mouvement.&lt;br /&gt;
&lt;br /&gt;
Cela nous a permit de détecter les rotation dans un intervalle de temps prédéfini d'environ 7 secondes. L'IA fonctionnant très bien après validation (87,40% de précision avec le modèle random forest), nous avons décidé de détecter les mouvement en continu en faisant de l'augmentation de données.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons fait tourner l'IA avec l'émulateur sur le serveur.&lt;br /&gt;
&lt;br /&gt;
== A detailler un peu mieux ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-Formatage des messages envoyés par la Nucleo avec STM32CubeIDE&lt;br /&gt;
&lt;br /&gt;
-installation de mosquitto sur la VM&lt;br /&gt;
&lt;br /&gt;
-installation de mosquitto sur la raspberry (client)&lt;br /&gt;
&lt;br /&gt;
-en fait le client marche mieux en python sans mosquitto&lt;br /&gt;
&lt;br /&gt;
-en fait le broker marche mieux en python sans mosquitto non plus&lt;/div&gt;</summary>
		<author><name>Esimon</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:Algorithm_flowchart.png&amp;diff=3659</id>
		<title>Fichier:Algorithm flowchart.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:Algorithm_flowchart.png&amp;diff=3659"/>
		<updated>2023-12-20T16:37:09Z</updated>

		<summary type="html">&lt;p&gt;Esimon : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Algorithm flowchart&lt;/div&gt;</summary>
		<author><name>Esimon</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_syst%C3%A8me/r%C3%A9seau_2023/2024&amp;diff=1937</id>
		<title>SE5 système/réseau 2023/2024</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_syst%C3%A8me/r%C3%A9seau_2023/2024&amp;diff=1937"/>
		<updated>2023-10-06T14:59:58Z</updated>

		<summary type="html">&lt;p&gt;Esimon : /* Répartition des binômes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PRA SE5 =&lt;br /&gt;
&lt;br /&gt;
== Menu de la première séance ==&lt;br /&gt;
&lt;br /&gt;
Pour la  première séance du 06/10/2023 il vous est demandé d'effectuer individuellement les opérations listées ci-dessous.&lt;br /&gt;
* création d'une machine virtuelle sur le serveur &amp;lt;code&amp;gt;capbreton&amp;lt;/code&amp;gt; ;&lt;br /&gt;
* création d'un conteneur &amp;quot;à la main&amp;quot; sur votre station de travail &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt; :&lt;br /&gt;
** créez un conteneur isolé au maximum (sauf pour les utilisateur) avec la méthode décrite en cours,&lt;br /&gt;
** création d'un commutateur virtuel privé sur la &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt; dans le réseau IPv4 &amp;lt;code&amp;gt;192.168.68.0/24&amp;lt;/code&amp;gt;, l'adresse &amp;lt;code&amp;gt;192.168.68.1&amp;lt;/code&amp;gt; est affectée au commutateur lui-même,&lt;br /&gt;
** création d'une interface Ethernet virtuelle, une extrémité doit être envoyée dans le conteneur, l'autre dans le commutateur virtuel privé,&lt;br /&gt;
** mise en place d'une mascarade sur la &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt;, vérifiez que le conteneur a accès aux mêmes machines que la  &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Par binôme vous devez créer une machine virtuelle mandataire connectée sur le commutateur virtuel SE5 et sur le commutateur virtuel privé des machines virtuelles de services concernées (voir deuxième section du sujet).&lt;br /&gt;
&lt;br /&gt;
Globalement vous devez configurer le routeur principal de la promotion (voir la troisième section du sujet). Pour votre promotion il s'agit du Catalyst 9200 situé en E304. Il faut le connecter en fibre vers le serveur &amp;lt;code&amp;gt;capbreton&amp;lt;/code&amp;gt; de la E306 dans le commutateur virtuel SE5 et aussi en fibre vers le local technique SR52 sur un port dans le VLAN 531. Vous pouvez configurer le commutateur via l'utilitaire &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt; à partir de la machine &amp;lt;code&amp;gt;zabeth09&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Répartition des élèves pour la première séance :&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Station de travail !! Elève&lt;br /&gt;
|-&lt;br /&gt;
| zabeth02 || Elias SIMON&lt;br /&gt;
|-&lt;br /&gt;
| zabeth03 || Mathis RIFFAUT&lt;br /&gt;
|-&lt;br /&gt;
| zabeth04 || Dann RODENBURG&lt;br /&gt;
|-&lt;br /&gt;
| zabeth05 || Benjamin NGUYEN&lt;br /&gt;
|-&lt;br /&gt;
| zabeth06 || Halaoui mohammed&lt;br /&gt;
|-&lt;br /&gt;
| zabeth07 || Blgrim Haitam&lt;br /&gt;
|-&lt;br /&gt;
| zabeth08 || Florian Vallée&lt;br /&gt;
|-&lt;br /&gt;
| zabeth09 (routeur) || Julien Charleux&lt;br /&gt;
|-&lt;br /&gt;
| zabeth10 || Amine SELLALI&lt;br /&gt;
|-&lt;br /&gt;
| zabeth11 || Paul Amoros&lt;br /&gt;
|-&lt;br /&gt;
| zabeth12 || Maël Delaby&lt;br /&gt;
|-&lt;br /&gt;
| zabeth13 || Black Baptiste&lt;br /&gt;
|-&lt;br /&gt;
| zabeth14 || Timothé Brenier&lt;br /&gt;
|-&lt;br /&gt;
| zabeth15 || Jeanne Delcourt&lt;br /&gt;
|-&lt;br /&gt;
| zabeth16 || Estelle Godard&lt;br /&gt;
|-&lt;br /&gt;
| zabeth17 || Jason DELANNOY&lt;br /&gt;
|-&lt;br /&gt;
| zabeth18 || Chloé Lemaire&lt;br /&gt;
|-&lt;br /&gt;
| zabeth19 || Gabriel THOMAS&lt;br /&gt;
|-&lt;br /&gt;
| zabeth20 || Albin MOUTON&lt;br /&gt;
|-&lt;br /&gt;
| zabeth21 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth22 || Maxime Balbastre&lt;br /&gt;
|-&lt;br /&gt;
| zabeth26 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth27 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth28 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth30 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Répartition des binômes ==&lt;br /&gt;
&lt;br /&gt;
Concertez-vous pour trouver des noms de machines de services et de machines mandataires dans deux thèmes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Cahier !! Nom machine services &lt;br /&gt;
!IP machine services !! Nom de domaine !! Nom machine mandataire &lt;br /&gt;
!IP machine mandataires!! Elève &lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E1 | Cahier n°1]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E2 | Cahier n°2]]&lt;br /&gt;
| Elom|| || || Baloo|| || Elias SIMON&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E3 | Cahier n°3]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E4 | Cahier n°4]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E5 | Cahier n°5]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E6 | Cahier n°6]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E7 | Cahier n°7]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E8 | Cahier n°8]]&lt;br /&gt;
| Fondor|| || || mushu|| || Florian Vallée&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E9 | Cahier n°9]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E10 | Cahier n°10]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E11 | Cahier n°11]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E12 | Cahier n°12]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E13 | Cahier n°13]]&lt;br /&gt;
| Bogden|| || || BlancheNeige|| || Black Baptiste&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E14 | Cahier n°14]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E15 | Cahier n°15]]&lt;br /&gt;
| jiruus|| || || cruella|| || Jeanne Delcourt&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E16 | Cahier n°16]]&lt;br /&gt;
| exegol|| || || cruella|| || Estelle Godard&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E17 | Cahier n°17]]&lt;br /&gt;
| Jakku|| || || Jafar|| || Jason DELANNOY&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E18 | Cahier n°18]]&lt;br /&gt;
| naboo|| || || bouh|| || Chloé Lemaire&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E19 | Cahier n°19]]&lt;br /&gt;
| geonosis|| || || bouh|| || Gabriel THOMAS&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E20 | Cahier n°20]]&lt;br /&gt;
| alderaan|| || || Jafar|| || Albin MOUTON&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E21 | Cahier n°21]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E22 | Cahier n°22]]&lt;br /&gt;
| kashyyyk|| || || mushu|| || Maxime BALBASTRE&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E23 | Cahier n°23]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E24 | Cahier n°24]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Contrôle continu ==&lt;/div&gt;</summary>
		<author><name>Esimon</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_syst%C3%A8me/r%C3%A9seau_2023/2024&amp;diff=1931</id>
		<title>SE5 système/réseau 2023/2024</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_syst%C3%A8me/r%C3%A9seau_2023/2024&amp;diff=1931"/>
		<updated>2023-10-06T14:53:31Z</updated>

		<summary type="html">&lt;p&gt;Esimon : /* Menu de la première séance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PRA SE5 =&lt;br /&gt;
&lt;br /&gt;
== Menu de la première séance ==&lt;br /&gt;
&lt;br /&gt;
Pour la  première séance du 06/10/2023 il vous est demandé d'effectuer individuellement les opérations listées ci-dessous.&lt;br /&gt;
* création d'une machine virtuelle sur le serveur &amp;lt;code&amp;gt;capbreton&amp;lt;/code&amp;gt; ;&lt;br /&gt;
* création d'un conteneur &amp;quot;à la main&amp;quot; sur votre station de travail &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt; :&lt;br /&gt;
** créez un conteneur isolé au maximum (sauf pour les utilisateur) avec la méthode décrite en cours,&lt;br /&gt;
** création d'un commutateur virtuel privé sur la &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt; dans le réseau IPv4 &amp;lt;code&amp;gt;192.168.68.0/24&amp;lt;/code&amp;gt;, l'adresse &amp;lt;code&amp;gt;192.168.68.1&amp;lt;/code&amp;gt; est affectée au commutateur lui-même,&lt;br /&gt;
** création d'une interface Ethernet virtuelle, une extrémité doit être envoyée dans le conteneur, l'autre dans le commutateur virtuel privé,&lt;br /&gt;
** mise en place d'une mascarade sur la &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt;, vérifiez que le conteneur a accès aux mêmes machines que la  &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Par binôme vous devez créer une machine virtuelle mandataire connectée sur le commutateur virtuel SE5 et sur le commutateur virtuel privé des machines virtuelles de services concernées (voir deuxième section du sujet).&lt;br /&gt;
&lt;br /&gt;
Globalement vous devez configurer le routeur principal de la promotion (voir la troisième section du sujet). Pour votre promotion il s'agit du Catalyst 9200 situé en E304. Il faut le connecter en fibre vers le serveur &amp;lt;code&amp;gt;capbreton&amp;lt;/code&amp;gt; de la E306 dans le commutateur virtuel SE5 et aussi en fibre vers le local technique SR52 sur un port dans le VLAN 531. Vous pouvez configurer le commutateur via l'utilitaire &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt; à partir de la machine &amp;lt;code&amp;gt;zabeth09&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Répartition des élèves pour la première séance :&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Station de travail !! Elève&lt;br /&gt;
|-&lt;br /&gt;
| zabeth02 || Elias SIMON&lt;br /&gt;
|-&lt;br /&gt;
| zabeth03 || Mathis RIFFAUT&lt;br /&gt;
|-&lt;br /&gt;
| zabeth04 || Dann RODENBURG&lt;br /&gt;
|-&lt;br /&gt;
| zabeth05 || Benjamin NGUYEN&lt;br /&gt;
|-&lt;br /&gt;
| zabeth06 || Halaoui mohammed&lt;br /&gt;
|-&lt;br /&gt;
| zabeth07 || Blgrim Haitam&lt;br /&gt;
|-&lt;br /&gt;
| zabeth08 || Florian Vallée&lt;br /&gt;
|-&lt;br /&gt;
| zabeth09 (routeur) || Julien Charleux&lt;br /&gt;
|-&lt;br /&gt;
| zabeth10 || Amine SELLALI&lt;br /&gt;
|-&lt;br /&gt;
| zabeth11 || Paul Amoros&lt;br /&gt;
|-&lt;br /&gt;
| zabeth12 || Maël Delaby&lt;br /&gt;
|-&lt;br /&gt;
| zabeth13 || Black Baptiste&lt;br /&gt;
|-&lt;br /&gt;
| zabeth14 || Timothé Brenier&lt;br /&gt;
|-&lt;br /&gt;
| zabeth15 || Jeanne Delcourt&lt;br /&gt;
|-&lt;br /&gt;
| zabeth16 || Estelle Godard&lt;br /&gt;
|-&lt;br /&gt;
| zabeth17 || Jason DELANNOY&lt;br /&gt;
|-&lt;br /&gt;
| zabeth18 || Chloé Lemaire&lt;br /&gt;
|-&lt;br /&gt;
| zabeth19 || Gabriel THOMAS&lt;br /&gt;
|-&lt;br /&gt;
| zabeth20 || Albin MOUTON&lt;br /&gt;
|-&lt;br /&gt;
| zabeth21 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth22 || Maxime Balbastre&lt;br /&gt;
|-&lt;br /&gt;
| zabeth26 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth27 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth28 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth30 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Répartition des binômes ==&lt;br /&gt;
&lt;br /&gt;
Concertez-vous pour trouver des noms de machines de services et de machines mandataires dans deux thèmes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Cahier !! Nom machine services &lt;br /&gt;
!IP machine services !! Nom de domaine !! Nom machine mandataire &lt;br /&gt;
!IP machine mandataires!! Elève &lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E1 | Cahier n°1]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E2 | Cahier n°2]]&lt;br /&gt;
| Elom|| || || || || Elias SIMON&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E3 | Cahier n°3]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E4 | Cahier n°4]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E5 | Cahier n°5]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E6 | Cahier n°6]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E7 | Cahier n°7]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E8 | Cahier n°8]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E9 | Cahier n°9]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E10 | Cahier n°10]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E11 | Cahier n°11]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E12 | Cahier n°12]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E13 | Cahier n°13]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E14 | Cahier n°14]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E15 | Cahier n°15]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E16 | Cahier n°16]]&lt;br /&gt;
| exegol|| || || cruella|| || Estelle Godard&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E17 | Cahier n°17]]&lt;br /&gt;
| Jakku|| || || Jafar|| || Jason DELANNOY&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E18 | Cahier n°18]]&lt;br /&gt;
| naboo|| || || bouh|| || Chloé Lemaire&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E19 | Cahier n°19]]&lt;br /&gt;
| geonosis|| || || bouh|| || Gabriel THOMAS&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E20 | Cahier n°20]]&lt;br /&gt;
| alderaan|| || || Jafar|| || Albin MOUTON&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E21 | Cahier n°21]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E22 | Cahier n°22]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E23 | Cahier n°23]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E24 | Cahier n°24]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Contrôle continu ==&lt;/div&gt;</summary>
		<author><name>Esimon</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_syst%C3%A8me/r%C3%A9seau_2023/2024&amp;diff=1923</id>
		<title>SE5 système/réseau 2023/2024</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_syst%C3%A8me/r%C3%A9seau_2023/2024&amp;diff=1923"/>
		<updated>2023-10-06T14:16:13Z</updated>

		<summary type="html">&lt;p&gt;Esimon : /* Menu de la première séance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PRA SE5 =&lt;br /&gt;
&lt;br /&gt;
== Menu de la première séance ==&lt;br /&gt;
&lt;br /&gt;
Pour la  première séance du 06/10/2023 il vous est demandé d'effectuer individuellement les opérations listées ci-dessous.&lt;br /&gt;
* création d'une machine virtuelle sur le serveur &amp;lt;code&amp;gt;capbreton&amp;lt;/code&amp;gt; ;&lt;br /&gt;
* création d'un conteneur &amp;quot;à la main&amp;quot; sur votre station de travail &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt; :&lt;br /&gt;
** créez un conteneur isolé au maximum (sauf pour les utilisateur) avec la méthode décrite en cours,&lt;br /&gt;
** création d'un commutateur virtuel privé sur la &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt; dans le réseau IPv4 &amp;lt;code&amp;gt;192.168.68.0/24&amp;lt;/code&amp;gt;, l'adresse &amp;lt;code&amp;gt;192.168.68.1&amp;lt;/code&amp;gt; est affectée au commutateur lui-même,&lt;br /&gt;
** création d'une interface Ethernet virtuelle, une extrémité doit être envoyée dans le conteneur, l'autre dans le commutateur virtuel privé,&lt;br /&gt;
** mise en place d'une mascarade sur la &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt;, vérifiez que le conteneur a accès aux mêmes machines que la  &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Par binôme vous devez créer une machine virtuelle mandataire connectée sur le commutateur virtuel SE5 et sur le commutateur virtuel privé des machines virtuelles de services concernées (voir deuxième section du sujet).&lt;br /&gt;
&lt;br /&gt;
Globalement vous devez configurer le routeur principal de la promotion (voir la troisième section du sujet). Pour votre promotion il s'agit du Catalyst 9200 situé en E304. Il faut le connecter en fibre vers le serveur &amp;lt;code&amp;gt;capbreton&amp;lt;/code&amp;gt; de la E306 dans le commutateur virtuel SE5 et aussi en fibre vers le local technique SR52 sur un port dans le VLAN 531. Vous pouvez configurer le commutateur via l'utilitaire &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt; à partir de la machine &amp;lt;code&amp;gt;zabeth09&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Répartition des élèves pour la première séance :&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Station de travail !! Elève&lt;br /&gt;
|-&lt;br /&gt;
| zabeth02 || Elias SIMON&lt;br /&gt;
|-&lt;br /&gt;
| zabeth03 || Mathis RIFFAUT&lt;br /&gt;
|-&lt;br /&gt;
| zabeth04 || Dann RODENBURG&lt;br /&gt;
|-&lt;br /&gt;
| zabeth05 || Benjamin NGUYEN&lt;br /&gt;
|-&lt;br /&gt;
| zabeth06 || Halaoui mohammed&lt;br /&gt;
|-&lt;br /&gt;
| zabeth07 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth08 || Florian Vallée&lt;br /&gt;
|-&lt;br /&gt;
| zabeth09 (routeur) || Julien Charleux&lt;br /&gt;
|-&lt;br /&gt;
| zabeth10 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth11 || Paul Amoros&lt;br /&gt;
|-&lt;br /&gt;
| zabeth12 || Maël Delaby&lt;br /&gt;
|-&lt;br /&gt;
| zabeth13 || Black Baptiste&lt;br /&gt;
|-&lt;br /&gt;
| zabeth14 || Timothé Brenier&lt;br /&gt;
|-&lt;br /&gt;
| zabeth15 || Jeanne Delcourt&lt;br /&gt;
|-&lt;br /&gt;
| zabeth16 || Estelle Godard&lt;br /&gt;
|-&lt;br /&gt;
| zabeth17 || Jason DELANNOY&lt;br /&gt;
|-&lt;br /&gt;
| zabeth18 || Chloé Lemaire&lt;br /&gt;
|-&lt;br /&gt;
| zabeth19 || Gabriel THOMAS&lt;br /&gt;
|-&lt;br /&gt;
| zabeth20 || Albin MOUTON&lt;br /&gt;
|-&lt;br /&gt;
| zabeth21 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth22 || Maxime Balbastre&lt;br /&gt;
|-&lt;br /&gt;
| zabeth26 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth27 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth28 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth30 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Répartition des binômes ==&lt;br /&gt;
&lt;br /&gt;
Concertez-vous pour trouver des noms de machines de services et de machines mandataires dans deux thèmes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Cahier !! Nom machine services &lt;br /&gt;
!IP machine services !! Nom de domaine !! Nom machine mandataire &lt;br /&gt;
!IP machine mandataires!! Elève &lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E1 | Cahier n°1]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E2 | Cahier n°2]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E3 | Cahier n°3]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E4 | Cahier n°4]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E5 | Cahier n°5]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E6 | Cahier n°6]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E7 | Cahier n°7]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E8 | Cahier n°8]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E9 | Cahier n°9]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E10 | Cahier n°10]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E11 | Cahier n°11]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E12 | Cahier n°12]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E13 | Cahier n°13]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E14 | Cahier n°14]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E15 | Cahier n°15]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E16 | Cahier n°16]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E17 | Cahier n°17]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E18 | Cahier n°18]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E19 | Cahier n°19]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E20 | Cahier n°20]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E21 | Cahier n°21]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E22 | Cahier n°22]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E23 | Cahier n°23]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E24 | Cahier n°24]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Contrôle continu ==&lt;/div&gt;</summary>
		<author><name>Esimon</name></author>
	</entry>
</feed>