Introduction
Dans ce projet, la tâche qui m’a été confiée était de développer sur un poste distant une
Interface Homme-Machine (IHM) de contrôle et de test des différentes fonctionnalités du
robot, telles que :
L’asservissement numérique de position et de vitesse d'un moteur à courant continu
L’asservissement de position et de vitesse d'un moteur pas-à-pas
Le contrôle d'une caméra intelligente
Le pilotage d'un télémetre Infra-Rouge
Le pilotage d'une récepteur-démodulateur Infra-Rouge
Le pilotage d'un modulateur-émetteur Infra-Rouge
Chacun de ces modules correspond à un ensemble de classes développées en C++ par les six
autres étudiants de ce projet.
Choix logiciels (langage et environnement de
développement)
Dans un premier temps, le choix du format de développement de l’IHM s’orientait vers MFC
(Microsoft Foundation Class) sous Visual Studio 6.0, ou à l’aide des librairies Qt sous linux ,
avec une programmation en C++ dans les deux cas. L’application aurait donc été stockée sur
un poste distant, avec une connexion au robot à l’aide du serveur web embarqué, en
l’occurrence BOA, package de µClinux (version embarquée de linux), système d’exploitation
utilisé sur les cartes ColdFire.
L’utilisation du CGI aurait donc été nécessaire pour permettre la communication entre les
programmes fonctionnant sur le robot et l’IHM. La Common Gateway Interface est une
technologie standard implémentée sur tous les serveurs Web. Elle permet l'échange de
données (dans les deux sens) entre un programme de votre cru et le contenu d'une page Web
visualisée par un internaute distant. Par extension, on appelle aussi "CGI" les programmes
utilisant cette interface. Un tel programme peut être écrit à l'aide de n'importe quel langage de
programmation : les plus utilisés sont C, Perl ou encore python. A la différence d'un script
Java, le programme CGI sera exécuté sur la machine hébergeant le serveur Web, et non sur la
machine du client.
Mais cette méthode impliquait un choix de système d’exploitation unique, et une application
stockée hors du robot, nécessitant de la transporter séparément et de l’installer avant chaque
utilisation. Java s’est donc imposé comme langage nécessaire à ce projet, puisqu’ étant multi-
plateformes, et portable si l’on utilise la méthode des applets stockées sur le robot et
téléchargées chez le client par l’intermédiaire du serveur web.
Une fois l’applet téléchargée, celle-ci communique avec les programmes exécutés sur le robot
via le réseau TCP/IP câblé (puis sans-fil WIFI par la suite), par l’intermédiaire d’une socket,
sorte de conduit qui permet la communication entre deux processus, ceux-ci pouvant être
actifs sur des machines différentes.
Le Java
Mis au point en 1991 par la firme Sun Microsystems, Java est un langage orienté objet
reprenant les caractéristiques principales du C++, le rendant moins encombrant et plus
portable, et éliminant ses points difficiles, ses caractéristiques critiques, telles que :
les pointeurs (permettant d’écrire n’importe où en mémoire et de faire des dégâts)
la surcharge d'opérateurs
l'héritage multiple
la libération de mémoire (qui est transparente pour l'utilisateur, il n'est plus nécessaire
de créer de destructeurs)
Il intègre de plus une meilleure gestion des erreurs.
Les chaînes et les tableaux sont désormais des objets faisant partie intégrante du langage.
Toutefois Java est beaucoup moins rapide que le langage C++, il perd en rapidité ce qu'il
gagne en portabilité…
Fichier source, compilation et machine virtuelle
Le fichier source d'un programme écrit en Java est un simple fichier texte dont l'extension est
par convention .java. Ce fichier source doit être un fichier texte non formaté, c'est-à-dire un
fichier texte contenant uniquement les caractères ASCII de base.
Contrairement aux langages compilés traditionnels, pour lesquels le compilateur crée un
fichier binaire directement exécutable par un processeur donné (c'est-à-dire un fichier binaire
contenant des instructions spécifiques à un processeur), le code source Java est compilé en un
langage intermédiaire (appelé pseudo-code ou bytecode) dans un fichier portant le même nom
que le fichier source à l'exception de son extension (.class).
Compilation traditionnelle :
Fichier
source
Fichier compilé
sous Linux Fichier compilé
sous Windows Fichier compilé
sous UNIX
Système Linux Système
Windows Système UNIX
Compilation
Exécution
Compilation Java :
Pseudo
code
Machine
virtuelle Linux Machine virtuelle
Windows Machine
virtuelle UNIX
Système Linux Système
Windows Système UNIX
Compilation
Exécution
Exécution
Fichier
source
Précompilation
Cette caractéristique est majeure, car c'est elle qui fait qu'un programme écrit en Java est
portable, c'est-à-dire qu'il ne dépend pas d'une plate-forme donnée. En réalité le code
intermédiaire n'est exécutable sur aucune plate-forme sans la présence d'une machine
virtuelle, un interpréteur (la machine virtuelle est d'ailleurs parfois appelée interpréteur Java)
tournant sur une plate-forme donnée, et capable d'interpréter le code intermédiaire.
Pour effectuer ces compilations, il est nécessaire de disposer du Java Development Kit. Le
JDK est le kit de développement de base que propose gratuitement la firme Sun Microsystem.
Téléchargeable sur le site de cette dernière (http://java.sun.com), le Kit de développement
comprend plusieurs outils, parmi lesquels:
javac: le compilateur Java
java: un interpréteur d'applications (machine virtuelle)
applet viewer: un interpréteur d'applets
jdb: un débogueur
javap: un décompilateur, pour revenir du bytecode au code source
javadoc: un générateur de documentation
jar: un compresseur de classes Java
Applications et Applets
Java permet de créer deux types de programmes:
Les applications : programmes tels qu'on les connaît, c'est-à-dire s'exécutant dans le
système d'exploitation à condition d'avoir installé une machine virtuelle.
Les applets (prononcez Applettes, et traduisez Appliquettes en français) : il s'agit de
petites applications destinées à fonctionner sur un navigateur. Ainsi une applet a un
champ d'action beaucoup plus réduit qu'une application pour des raisons de sécurité
(une applet ne peut par exemple pas accéder au système sur lequel elle s'exécute...).
Voici donc le code d'une applet toute simple:
import java.awt.*;
public class FirstApplet extends java.applet.Applet {
public void init (){
add(new Label("Hello World"));
}
}
Le programme devrait en toute logique afficher le message "Hello World" à l'écran sur le
navigateur.
Les sockets
Il s'agit d'un modèle permettant la communication inter processus (IPC - Inter Process
Communication) afin de permettre à divers processus de communiquer aussi bien sur une
même machine qu'à travers un réseau TCP/IP. La communication par socket est souvent
comparée aux communications humaines. On distingue ainsi deux modes de communication:
Le mode connecté (comparable à une communication téléphonique), utilisant le
protocole TCP. Dans ce mode de communication, une connexion durable est établie
entre les deux processus, de telle façon que l'adresse de destination n'est pas nécessaire
à chaque envoi de données. De plus, si un paquet se perd il sera automatiquement
retransmis. Malheureusement cela engendre une perte de temps.
Le mode non connecté (analogue à une communication par courrier), utilisant le
protocole UDP. Ce mode nécessite l'adresse de destination à chaque envoi, et aucun
accusé de réception n'est donné. Ainsi, on communique plus vite car c’est un protocole
plus léger (utilisé en streaming vidéo, voix sur IP …).
Leur représentation dans le modèle OSI se situe juste au-dessus de la couche transport
(protocoles UDP ou TCP), elle-même utilisant les services de la couche réseau (protocole IP /
ARP).
Modèle des sockets
Modèle OSI
Application utilisant les sockets
7 Application
6 Présentation
5 Session
UDP/TCP
4 Transport
IP/ARP
3 Réseau
Ethernet, ...
2 Liaison
1 Physique
Comme dans le cas de l'ouverture d'un fichier, la communication par socket utilise un
descripteur pour désigner la connexion sur laquelle on envoie ou reçoit les données. Ainsi la
première opération à effectuer consiste à appeler une fonction créant un socket et retournant
un descripteur (un entier) identifiant de manière unique la connexion. Ainsi ce descripteur est
passé en paramètres des fonctions permettant d'envoyer ou recevoir des informations à travers
la socket.
Voici le schéma d'une communication en mode connecté (mode utilisé dans notre cas) :
Serveur
Client
socket()
bind()
listen()
accept()
recv()
send()
socket()
connect()
recv()
send()
Pour implémenter les sockets en C/C++, nous
utilisons des fonctions et des structures
disponibles dans la librairie <sys/socket.h> :
•Socket() : création de la socket
•Bind() : lier à une adresse et un port
•Listen() : en attente de connexion
•Accept() : accepte la connexion
•Connect() : établit une connexion avec un
serveur
•Recv() : lecture dans la socket
•Send() : écriture dans la socket
•Close() : fermeture de la socket
Environnement de développement
Pour réaliser l’interface et le code nécessaire à son
fonctionnement, je me suis aidé de l’ environnement de
développement NetBeans, un outil pour écrire, compiler,
déboguer et déployer des programmes, dans n’importe quel langage, dont Java l’utilisation
du JDK se fait donc implicitement. Etant lui-même écrit en Java, son utilisation est identique
sous Windows et sous Linux. Cela m’a donc offert une liberté supplémentaire, puisque je
pouvais facilement m’adapter aux systèmes d’exploitations dont je disposais.
Pour le développement des programmes fonctionnant sur les cartes ColdFire l’intérieur du
robot), le langage étant le C++ et le compilateur étant spécifique au système d’exploitation
µClinux, je me servais d’un simple bloc-notes et d’une console pour compiler.
1 / 16 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !