Mise en œuvre coté programmation

   On veut réaliser un robot commander à distance, via un réseau wifi local, alors la notion de communication client serveur est imposée, en effet, il faut qu’on utilise un ordinateur et qu’on ce connecte au robot pour le diriger par exemple, alors plusieurs ordinateurs peuvent le contrôler aussi, il suffi de leurs installer l’application pour le commander, et donc l’utilisateur de l’ordinateur et un client du serveur qui est le robot.

 

   En langage C, la communication client serveur ce réalise en utilisant les Sockets, alors qu’est ce qu’un Socket ?

Un socket est un point de connexion (ou point d'extrémité) servant d'élément de référence dans les échanges entre processus locaux ou distants. Son but étant de faire communiquer des processus entre eux, la plus grande difficulté est la préparation et la création de celles-ci. Une fois cette phase achevée, le programmeur se retrouve en possession d'un descripteur. Ce dernier est ensuite utilisé, comme descripteur de fichier, par les autres appels systèmes tels que Send () et Recive () misent en œuvre dans les différentes phases de la communication.

 

   Ces deux fonctions servent à envoyer et recevoir des donner entre le serveur et le client. Alors on a écrit deux programmes se basant sur les sockets, un pour le client et l’autre pour le serveur. Le rôle du programme client est donc d’envoyer les commandes correspondantes aux taches que l’utilisateur souhaite réaliser, l’autre programme reçoit ces commandes, et il les exécute, et donc le robot réalise ces taches. Les sockets vont être alors employés dans les deux programmes :

- Le programme client (ou l’application client) qui sera sur l’ordinateur de contrôle.

- Le programme serveur, qui sera sur la carte Fox (la carte mère du robot).


Alors on va parler indépendamment de ces deux programmes.

 

Le programme client

       C’est ce programme que l’utilisateur va voir, et avec le quel il sera on contact, et donc on l’a réalisé sous forme d’interfaces graphiques pour facilite l’utilisation du robot. On veut que le robot se déplace en mode graphique, à l’aide du clavier et en mode auto, alors on a préféré de programmer chacune de ces fonctionnalité séparément, comme ça on réduira la charge sur le processeur de l’ordinateur du client, car chacun des programme qui réaliseront ces fonctionnalités sera de petit taille, et donc aura moins besoin de ressources qu’un programme où toutes les fonctionnalités sont implémentées en même temps. En plus cela simplifiera notre travail, soi dans la détection des erreurs, ou dans la vérification du bon fonctionnement du programme et même dans la programmation et la lisibilité du code qu’on a écrit. On a réalisé alors trois programmes qui sont :

 


        ClientSDL pour le déplacement en mode clavier.

        Clientgtk pour le déplacement en mode graphique.

        Clientauto pour le déplacement en mode automatique.

 

 

Chacun de ces programmes contient un bloc d’instruction qui permet la connexion avec le serveur, donc il a son propre socket pour établir cette connexion. Mais les autres blocs sont différents.

 

ClientSDL

 

Le programme ClientSDL  permet le déplacement par clavier, pour le développer on a utilisé une bibliothèque qui s’appel SDL, il faut l’ajouter à notre outille de développement pour le langage C. La SDL (Simple Direct-Media Layer) est écrite en langage C, elle est très utilisée dans le monde de la création d'applications multimédias en deux dimensions comme les jeux vidéo, les émulateurs, etc. cette bibliothèque est sous licence LGPL (Less General Public License) alors elle est libre. Elle est multiplateformes (Windows, linux, MacOs), elle peut être utilisée par de nombreux langages de programmation comme C/C++, Java, C#, D, Lisp, Pascal ...

 

Maintenant supposons par exemple qu’on veut faire avancer le robot, alors il faut appuyer sur la touche   up     du clavier, et là le programme déclenche un événement en liaison avec le numéro de la touche et va envoyer un autre numéro qu’on a fixé pour le serveur, le serveur reconnaît se numéro, et donc le robot va bouger vers l’avant. Et c’est là l’intérêt de la SDL, car c’est grâce à ses fonctions qu’on a pu gérer cet événement, qui est le fait de pouvoir lier un numéro de notre choix à la touche up  .

Les autres mouvements sont traités de la même manière. Et c’est ainsi qu’on a pu réaliser cette fonctionnalité de déplacement par clavier.

 

. . .

/* On teste le type d'évènement */

 //si on appuis sur une touche du clavier//
if(event.type == SDL_KEYDOWN ) 

   {

 

     switch (event.key.keysym.sym)

 

         {

     // si c’est la touche haut du clavier//

 


case SDLK_UP:

                       

                               //...............action........................ //

          

                                sprintf(action, "10"); 

                                                         

 

                       break;

. . .

          }

     }

 

. . .

 

 

Pour le programme Clientgtk, il sert a déplacer le robot en mode graphique. Alors quand on lance se programme, une interface graphique s’affiche sur l’écran, où il y’a des boutants pour choisir le mode qu’on veut, soi la direction soi le mouvement de la Cam, aussi d’autre boutants pour la direction, pour réaliser cette interface, on a travaillé avec GTK+. Se qu’il faut savoir c’est que GTK+ est une bibliothèque graphique qui permet de créer des programme de type GUI (programme à interface graphique) comprenant fenêtres, boutons, zones de texte, etc., elle est libre (open source), multiplateformes, elle est écrite en langage C et permet le développement en plusieurs langages de programmations parmi lesquels C, C++, Ada, Perl, Python, PHP et bien d'autres. Pour l’utiliser il faut aussi l’ajouter à l’outille de développement du langage C.

 

On a précisé au départ de cette partie que tous ces programmes du coté client doivent avoir un bloc d’instructions pour les sockets pour établir la connexion avec le robot, alors en plus de ce bloc, Le programme Clientgtk a un autre bloc pour l’interface graphique, il est composer de fonction prédéfinis sur la bibliothèque GTK+, qu’on a utiliser pour la création des boutants de l’interface, aussi pour lier ces boutants à l’action souhaité. 

 

 

 

 

Le programme serveur

 

     Le programme serveur est programmer écrit en C, il est dans la carte fox, dès son lancement, il reste en attente de la connexion d’un client, une fois cette connexion établit, il attend que le client lui envoi une commande, et il communique le code ASCII,en fait cette commande est un numéro qu’on a choisi pour chaque action, par exemple pour le déplacement en avant le numéro c’est « 10 ». La communication est réaliser à l’aide des sockets, pour le transfert du code ASCII en à utiliser la bibliothèque termios.h, qui sert à utiliser le port COM (ttyS0 sous linux).

 

Du côté du serveur, on a besoin aussi d’un programme pour récupérer le flux vidéo de la Cam et la capture d’images. Le pilote de la vidéo pour Linux V4L2 (Video for Linux) qui permet d’utiliser la Cam, est déjà installé dans la distribution Debian disponible pour la carte Fox G20. On a utilisé le logiciel mjpeg_streamer qui récupère le flux vidéo de V4L2 et l’envoi via une session HTTP. Alors on a créé cette page HTML. Ce logiciel utilise l’applet java Cambozola développé pour afficher les flux vidéos, elle est très utiliser dans ce domaine, et plusieurs développeurs l’utilise pour diffuser en direct le flux vidéo des Cams au travers du monde entier.

Pour le mjpeg_streamer on obtient le meilleur résultat en utilisations Google Chrome sur n'importe quel OS.

Il faut installer donc mjpeg_streamer sur la carte fox, et copier la page html dans le dossier /MJPG-streamer debarm/ MJPG-streamer debarm/va/www, et le client peu lui accéder via un navigateur internet en tapant l’adresse IP du serveur.

 

 

 

 

vers le haut