Modifications

Sauter à la navigation Sauter à la recherche
Ligne 124 : Ligne 124 :     
===Le réseau===
 
===Le réseau===
 +
===Le réseau===
 +
Pour bien transmettre les coordonnées de tous les robots en jeu à nos deux robots, nous dévions établir une réseau de communication capable de supporter au moins deux clients, qui ces deux clients puissent se connecter à n'import quelle moment, et que tant le serveur comme les robots soient capables de supporter des éventuelles erreurs pendant la communication de forme qu'ils n’arrêtent pas son exécution. 
 +
Pour la création de cette réseau, nous utilisons la librairie '''socket''' de '''Python''', qui nous permet de créer les voies de communication entre le système de repérage (serveur) et les deux robots (clients). Nous créons donc des sockets de la famille d'adresse IPv4 du type '''SOCKET_STREAM''' pour le protocole '''TCP'''. La transmission des données via ce voie se fait avec des '''bytes'''. Python nous offre quelques options pour convertir des entiers et strings en bytes avec des simples fonctions, mais pour convertir des autres types d'objets, comme dans notre cas des '''matrices numpy''', on besoin de la librairie '''pcikle'''.
 +
Pickle est capable de sérialiser  n'import quel type d'objet sous forme binaire. Avec cette sérialisation, nous pouvons désormais envoyer notre table de coordonnées facilement avec les sockets.
 +
Pour la gestion de nos deux clients, on utilise la librairie '''select'''. Grâce à cette librairie, on peut manipuler le flux entrée/sortie pour tous les clients qui sont connectés.
 +
Après cette bref description des librairies nécessaires, on part sur l'architecture de cet système de communication.
 +
 +
[[Fichier:Diagramme_Reseau]]
 +
 +
En commençant par le serveur, nous devons d'abord lui associer une adresse IP et un numéro de port, qui seront utilisés par les clients pour se connecter. Après cela, nous avons mis le serveur en attente de nouvelles demandes de connexion. Le serveur étant prêt, il gère les demandes de connexion et les clients déjà connectés avec '''select.select'''. Si on a une nouvelle client, on accepte sa connexion et reçoit son adresse et son identifiant. Dés que les clients sont connectes, le serveur reçoit l’information de l'orientation du vent du robot 1, ajoute cette information au tableau de coordonnées, et il repasse cette information vers les deux robots.
 +
Bien que cela n'apparaisse pas dans le diagramme, le serveur gère la déconnexion d'un client en cas d'erreur dans ce processus. La '''gestion d'erreur''' c'est important, parce que si quelque arrive au robot pendant le jeu, cela peut cause des erreurs d’exécution du programme, et faire que le serveur tombe. Évidemment que nous ne voulons pas que cela se passe, donc, dès que le serveur percevoir une erreur soit dans la connexion, envoi ou réception des messages, etc, il ferme la connexion avec le robot en question et continue son fonctionnement normalement.
 +
 +
Du côte client, le procédure de création du socket c'est similaire à celui du serveur. Mais, au lieu de l'associer à un adresse, on utilise '''socket.connnect''' pour envoyer une demande de connexion, avec son propre adresse et son identifiant. Dés connecte, le Robo 1 commence a envoyer l'orientation du vent au système de repérage, et après, il reçoit le nouveau tableau de coordonnées. Par contre, le Robo 2 ne fait que recevoir les données du système. Pour la '''gestion d'erreurs''' des robots, nous utilisons aussi la librairie '''errNO''', qui nous permet de gérer des erreurs d'entrée / sortie quand du système d'exploitation quand il n'y a plus de messages à recevoir du serveur.
 +
 
===Support mécanique===
 
===Support mécanique===
 
[[Fichier:Boite caméra - serveur.png|vignette|droite|Modèle 3d de la boite conceptualisée pour supporter la caméra, la Raspberry Pi et une batterie usb|400px]]
 
[[Fichier:Boite caméra - serveur.png|vignette|droite|Modèle 3d de la boite conceptualisée pour supporter la caméra, la Raspberry Pi et une batterie usb|400px]]
39

modifications

Menu de navigation