Rapport de Stage
Transcription
Rapport de Stage
Michel JANTON Etudiant Ingénieur-Maître Université de La Rochelle RAPPORT DE STAGE JUIN 1994 TABLE DES MATIERES TABLE DES MATIERES..................................................................................................................2 Avant propos.......................................................................................................................................3 I _ DESCRIPTION DU "DEFI FRANCAIS 95".............................................................................. 4 1.1 La Coupe America..........................................................................................................4 1.2 Le Secteur Tactique et Stratégie.....................................................................................4 1.3 Le Secteur Analyse Performance ...................................................................................5 II APERCU DU SUPPORT INFORMATIQUE DU SECTEUR ANALYSE................................... 6 2.1 Matériel ......................................................................................................................... 6 2.2 Logiciels......................................................................................................................... 6 III BORLAND C++ version 4.0......................................................................................................... 8 IV LE LANGAGE C++....................................................................................................................11 4.1 l'aspect objet................................................................................................................ 11 4.2 L'héritage...................................................................................................................... 11 4.3 Les fonctions virtuelles.................................................................................................13 V LA PROGRAMMATION SOUS WINDOWS............................................................................ 14 5.1 Concepts de base:......................................................................................................... 14 5.2 Gestion des événements:.............................................................................................. 14 5.3 Les ressources:..............................................................................................................15 VI LOGICIEL DESSINS DE SCHEMAS TACTIQUES (D.S.T.)................................................17 6.1 Généralités....................................................................................................................17 6.2 Description du Logiciel................................................................................................ 17 6.3 Réalisation du Cahier Des Charges.............................................................................. 17 6.4 Développement.............................................................................................................18 6.4 Problèmes rencontrés................................................................................................... 20 VII LOGICIEL D'ANALYSE DES PHASES TRANSITOIRES................................................... 21 7.1 Généralités sur l'analyse des données........................................................................... 21 7.2 Description du logiciel et cahier des charges............................................................... 21 7.3 Développement du logiciel...........................................................................................22 7.5 Phase de validation et évolution du logiciel................................................................. 28 VIII ENSEIGNEMENT RECU PAR CE STAGE.......................................................................... 30 8.1 Sur le développement de logiciel................................................................................. 30 8.2 Sur le fonctionnement d'une société............................................................................. 31 Postface.............................................................................................................................................32 2 Avant propos Dans le cadre de la troisième année de l'Institut Universitaire Professionnalisé de Génie Informatique de La Rochelle, j'ai effectué un stage de fin d'étude au sein du "Défi Français", à la base nautique de Sète. Ce stage a débuté fin Mars 1994 et s'est achevé fin Août. Le "Défi Français" a pour but de préparer avec l'équipe du "Team Marc Pajot Canal+", l'America's Cup, importante compétion nautique qui se déroule tout les trois ans et dont la prochaine édition aura lieu à San Diego (Californie), durant l'année 1995. D'ampleur internationale, cette compétition regoupe, outre la France, l'Espagne, l'Australie, la Nouvelle Zélande, le Japon et les Etats-Unis, tenant de la coupe. Demifinaliste en 1987 et en 1992, l'équipe regroupée autour de Marc Pajot s'est donné les moyens de remporter la coupe en 1995. En particulier, un très important travail de recherche a été mené par les concepteurs des bateaux. Le sujet principal de mon stage était le développement de logiciels en langage C++ et sous environnement Windows. J'ai ainsi participé à la réalisation du logiciel "Dessin de Schémas Tactiques" et du logiciel "Analyse des Phases Transitoires", logiciel de post traitement de données. Je tiens à remercier Monsieur Frédérique GRIZAUD, responsable du secteur Analyse du "Défi Français", pour m'avoir accueilli au sein de son équipe, et Monsieur Philippe BARIOD, mon Maître de stage qui m'a encadré et conseillé tout le long de ces cinq mois. Je tiens aussi à remercier Monsieur Hervé GUILLERMET qui m'a fait découvrir le "Défi" et m'a accompagné durant ce stage. 3 I _ DESCRIPTION DU "DEFI FRANCAIS 95" 1.1 La Coupe America Ancienne compétition nautique, l'America's Cup recouvre non seulement des enjeux sportifs, mais aussi des enjeux économiques et techniques. L'america's Cup se déroule en deux étapes. Dans un premier temps, les "Challenger", c'est-à-dire les équipages non américains, dispute la Coupe Vuitton . Le vainqueur de cette coupe aura alors la possibilité de disputer l'America's Cup contre le bateau américain, qui se sera montré le meilleurs lors de courses entre Defender, soit les équipages américains, détenteurs du titre. Sur le plan sportif, la compétition se présente sous la forme de séries de régates opposant deux adversaires (Match Racing). Les bateaux utilisés sont des ACC, avec un équipage de 16 personnes. Ces bateaux, par les hautes technologies utilisées employées pour leur réalisation, sont comparables aux F1 du monde automobile. C'est pourquoi la Coupe est très représentative du niveau technologique des compétiteurs et que tous les grands pays industriels aimeraient y briller afin d'imposer leur rang de grande puissance. Ainsi, ce n'est sûrement pas un hasard si, depuis leur victoire très symbolique sur les Britanniques en 1851, les Américains n'ont perdu qu'à une seule reprise la Coupe, exploit réalisé par les Australiens en 83. La remarquable prestation des Japonais réalisée pour leur première participation en 92 est aussi très significative de l'enjeu. Ces derniers seront d'ailleurs de très sérieux concurrents en 95. Le Défi Français s'est lui aussi organisé afin d'être compétitif en 95. Ainsi, un très important travail en Recherche et Développement a été mis en oeuvre pour obtenir un bateau performant, et ceci dès la fin de la dernière coupe. Ceci permet de penser que le Défi a mis toutes les chances de son côté afin de pouvoir remporter la prochaine édition de l America's Cup, qui aura lieu à San Diego en 1995. Ci-dessous, je décris les deux secteurs du "Défi" dans lesquels j'ai été amené à travailler. 1.2 Le Secteur Tactique et Stratégie C'est dans ce secteur qu'a débuté mon stage. Ce secteur a pour rôle de fournir des outils d'aide tactique en navigation, l'objectif finale étant l'élaboration d'un logiciel embarqué d'aide à la décision. Ce logiciel fournira aux navigants des informations sur le parcours, la météo et sur l'adversaire. Le développement a été confié à Philippe Bariod, qui travaille en collaboration avec Bertrand Pacé et Thierry Péponnet, tacticiens du "Team", ainsi qu'avec Christian Dumard, navigateur, et la cellule météo. En préambule à ce logiciel, P. Bariod et moi-même avons développé un logiciel, baptisé "Dessin de Schémas Tactiques". Ce logiciel permet aux tacticiens de réaliser les schémas des cas rencontrés en match racing. A terme, on espère constituer une 4 bibliothèque sur support informatique qui aidera à la réflexion des choix tactiques, à terre ou durant les régates, par l'intermédiaire du logiciel embarqué. 1.3 Le Secteur Analyse Performance Ce secteur, dirigé par Frédérique Grizaud, a notamment réalisé toutes les campagnes de mesures effectuées sur les bateaux laboratoires ("lab1" et "lab2") qui sont des ACC à l'échelle 1/2. Il a effectué ensuite les mesures sur F3 et F4, le nouveau ACC du "Défi", arrivé à Sète mi Juillet. Le rôle de ce secteur peut se diviser en 3 parties qui sont: _ l'installation et la maintenance de l'électronique embarquée _ le développement du logiciel d'acquisition des données _ l'analyse à terre des données C'est pour cette dernière partie qu'il m'a été demandé de développer un logiciel permettant de retracer les trajectoires à partir des données enregistrées et de pouvoir visualiser sous forme de graphes tous les paramètres. 5 II APERCU DU SUPPORT INFORMATIQUE DU SECTEUR ANALYSE 2.1 Matériel Le matériel utilisé provient d'UNISYS, fournisseur officiel du "Défi". Pour le développement, j'ai utilisé un PC 486DX66, possédant un disque dur de 340 Mo et 16 Mo de mémoire vive. Les autres machines du secteur étaient du même type avec une configuration semblable. On possède par ailleurs un disque de 2 go qui contient les données enregistrées à chaque sortie des bateaux et un lecteur de bande qui permet de les archiver. Un lecteur CD-ROM est aussi utilisé notamment pour charger le logiciel "Borland C++". Enfin, un modem permet d'envoyer des fax, se connecter au Minitel ou encore 'envoyer vers l'extérieur des fichier via une messagerie. La plus part des machines sont reliés par un réseau éthernet, ce qui permet d'échanger facilement des données et partager l'imprimante, le CD-ROM ou encore le modem. On peut noter que tout ceci se fait pour un coût relativement faible puisque qu'une carte éthernet coûte entre 1000 et 1500F suivant les configurations. 2.2 Logiciels DOS 6.0 : Cette version du DOS permet notamment le transfert de données entre deux disques dures de machines différentes, via la liaison série (interlink). Windows 3.11: Toutes les machines fonctionnent avec Windows 3.11, qui permet le fonctionnement en réseau. L'installation de ce système d'exploitation est particulièrement simple, ainsi que la gestion du réseau. En contre partie de la simplicité d'utilisation, ce gestionnaire de réseau offre moins de possibilités que par exemple un réseau Novell. En effet Windows 3.11 permet que de mettre en réseau les fichiers et non pas les applications. Borland C++ Ce logiciel a été choisi pour développer tous les logiciels utilisés par le "Défi", dans la mesure où tous les programmeurs ont adopté le C++ et programment des applications Windows. Excell et Access Ces deux logiciels font partie de l'"Office Pack" de MicroSoft, qui contient en plus Word, Power Point (dessin) et Project. Il est à noter le très faible coût de cette ensemble de logiciels, qui n'ont plus de concurrent sur le marché. 6 Access a été choisi pour créer la base de données. Simple, avec une interface très conviviale, Access permet de consulter rapidement la base et d'obtenir toutes les informations qui sont nécessaires. Excell est utilisé pour analyser des données de quantité moyenne, en utilisant notamment ses grands choix de graphes. Sch 1: Architecture matérielle du secteur analyse 7 III BORLAND C++ version 4.0 On utilise le logiciel "Borland C++ 4.0" pour développer les différentes applications. Voici les différents outils mis à la disposition du programmeur: L'éditeur: On peut choisir entre différents éditeurs, suivant les habitudes, notamment pour les raccourcis claviers et les indexations. On peut aussi noter que l'éditeur identifie automatiquement les commentaires, les constantes et les mots clé, et modifie leur couleur ce qui rend le texte beaucoup plus lisible. Le gestionnaire de projet: C'est lui qui effectue le "makefile" de l'application, déchargeant ainsi le programmeur. Ce dernier réalise l'arbre des différents modules de façon visuelle. Le Déboggueur: Il est particulièrement convivial et facile d'utilisation, puisque je n'ai pas eu besoin d'utiliser la documentation pour m'en servir. On peut notamment mentionner que: _ pour mettre des points d'arrêt, il suffit de placer le curseur à la ligne désirée et cliquer sur un bouton de la barre d'outil. Le même bouton permet d'enlever un point d'arrêt. De plus cette opération peut être faite dynamiquement, pendant l'exécution du programme. _ il existe des boutons pour exécuter pas à pas, pour exécuter jusqu'à la position du curseur. _ on peut visualiser dans une fenêtre la valeur des variables. _ on peut inspecter toutes les variables membres d'une même classe. Par ailleurs, un outil spécifique à Windows, "WinSight", permet de visualiser tous les messages reçus par les différentes fenêtres. La bibliothèque OWL: Cette bibliothèque est une version orientée objet de l'API de Windows. Elle contient ainsi les classes de base pour utiliser et manipuler les objets d'interfaces, comme TWindow ou TDialog. Elle facilite nettement la programmation Windows. "AppliExpert" et "ClassExpert" Ce sont des logiciels générateurs de code. Ces deux outils aident considérablement le développeur. AppliExpert crée automatiquement l'ossature d'une application typique de Windows, en écrivant notamment les classes de base, (correspondant aux fenêtres, à l'Application...), en y incluant un menu par défaut, en gérant les impressions. AppliExpert crée un fichier de ressource, où il inclut les Menus, les boites de dialogues standards, les icônes, etc. ClassExpert permet de gérer les classes de l'application . Ainsi, il peut créer des classes dérivées à partir de classes courantes (TDialog, TWindow, TEdit...). On peut alors facilement surcharger les fonctions virtuelles et les fonctions correspondant soit aux commandes du ou des menus, soit aux messages. Le 8 programmeur n'a plus qu'à écrire le code des fonctions, ClassExpert se chargeant d'écrire les déclarations. ClassExpert s'avère très efficace pour implémenter les classes correspondant aux boites de dialogue créés dans les ressource , puisque qu'il crée la classe et permet d'inclure tous les objets de contrôle associé à cette boite. L'intérêt de ces outils est évident: _ ils réduisent le nombre de lignes à écrire _ ils évitent certaines erreur dû à des oublis _ ils standardisent l'organisation du code, facilitant ainsi sa lecture et sa maintenance. Malgré les progrès apportés, on note certaines lacunes: _ on ne peut créer, et donc manipuler, n'importe quelle classe. seules des classes dérivées de certaines classes de base peuvent l'être. En faite, la majorité des classes de l'application doivent être écrite par le programmeur. _ la gestion des classes n'est pas toujours simple. Ainsi, ClassExpert se bloque parfois lorsque l'on veut enlever ou ajouter des classes. Ainsi, ces outils nous laissent un peu sur notre fin, et semblent très en dessous des possibilités offertes par "AppliBuilder" de "NextStep" Resource Workshop (RW): Cet outil permet de construire des objets d'interface, tel que les fenêtres de dialogue, contenant les objets de contrôle (bouton, case d'édition, texte...), dessins (bitmap) pour les icônes et boutons d'outils, les menus. C'est l'équivalent d'InterfaceBuilder de "NextStep". Ainsi, le programmeur crée l'interface de son application en ayant directement son aspect visuel. RW se charge de créer un fichier ASCII contenant toutes les informations concernant les objets. On peut aussi sauvegarder des objets dans des fichiers à part, afin d'être réutilisés dans d'autres applications. A tous les objets, peut être associé un identificateur, qui est lui même associé à un nom par l'intermédiaire d'un " #define ", contenu dans un fichier ".rh". Cet identificateur est alors passé en paramètre lors de la création de l'objet dans le programme. RW peut être utilisé seul, mais il est beaucoup plus intéressant de l'utiliser avec AppliExpert car alors le .rh est automatiquement créé et mis à jour, et de plus, on peut créer automatiquement le code associé aux objets "dialogue", directement accessible par ClassExpert. RW est, à mon sens, un outil indispensable puisqu'il permet d'avoir rapidement une idée de l'interface de l'application, qui peut facilement être modifié, tout cela sans écrire une ligne de code. De plus, l'association de l'objet d'interface avec l'objet de programmation C++ est très simple. On peut néanmoins regretter que la manipulation des identificateurs ne soit pas totalement transparent. En effet, pour éviter des conflits, le programmeur doit parfois fixer lui-même ces identificateurs. Par ailleurs l'importation d'objets n'est pas toujours facile. Il semble que le plus simple est d'utiliser le copier-coller, mais celui-ci n'effectue pas la mise-a-jours du fichier rh. En conclusion, on peut dire que les outils utilisés sont plutôt performants. On note notamment la grande convivialité du logiciel, obtenu par ces barres d'outils et ses menus flottants (contextuels) qui rend très rapidement accessible les différentes commandes. 9 On remarque aussi la tendance à programmer en manipulant simplement les objets, le programmeur n'ayant plus qu'à décrire et construire, de manière plus ou moins visuelle, les objets et à écrire les méthodes (comportement) spécifiques. Néanmoins, on peut regretter le manque de documentations et la faiblesse des explications fournies par "Borland". 10 IV LE LANGAGE C++ Le langage C++ est un langage orienté objet, particulièrement bien adapté pour développer des applications utilisant une interface graphique comme Windows. Il reste suffisamment proche du C, et peut être facilement utilisé par programmeurs plus habitués au C. Ainsi, toutes les applications développées par le défi ont été écrites en C++. Ce langage présente de nombreux avantages, outre qu'une certaine prépondérance dans le monde de l'informatique. 4.1 l'aspect objet Cet aspect détermine une façon de développer et facilite l'organisation du code. Une classe représente un objet. Un objet a certaines caractéristiques, définies par ses variables. Un objet a un comportement, défini par ses fonctions membres. Elles permettent de manipuler l'objet et ses variables. Cette approche facilite la programmation pour notamment deux raisons: _ lors de la conception, les données correspondent aux objets informatiques, ce qui permet une analyse "naturelle" du projet. _ Le fait de regrouper les données simplifie ensuite leur manipulation. En effet, le programmeur n'a, alors, plus qu'à utiliser les fonctions membres pour gérer l'objet sans avoir besoins de considérer l'ensemble des paramètres (encapsulation). Ceci implique une bonne analyse des différents objets et une certaine rigueur dans l'écriture des fonctions membres, pour respecter l'encapsulation des données. Il me semble néanmoins important de respecter l'aspect objet du C++ pour tirer meilleure partie de ce langage. 4.2 L'héritage C'est un des apports les plus significatifs du C++ . Il permet principalement à une classe de récupérer simplement les données d'une classe de base et ses fonctions membres, et donc de réutiliser du code. Ainsi, on est très fréquemment amené à dériver les classes d'ObjectWindows, notamment celles gérant les différentes fenêtres afin d'avoir des classes spécifiques. On peut aussi créer des classes génériques à l'aide de l'héritage, ce qui permet de gérer des ensembles d'objets de classes différentes par l'intermédiaire de leur classe de base commune. L'exemple ci-dessous est extrait du logiciel de Dessins Tactiques. "TObjet" représente la classe de base des objets utilisés par l'applications, TBouee et TBateauCourse sont des classes dérivées. On peut noter que les données communes comme "position", "taille" et "orientation" sont regroupés dans la classe de base et non pas besoin d'être remis dans les classes dérivées. 11 class TObjet { protected: TPoint position; float taille; float orientation; TRect zone_occupee; int type; t_courbe courbe; int rayonOutline; TPoint trace[MAX_PTS]; public: TObjet(); virtual void dessiner(TDC* dc); virtual void dessinerCourbe(TDC* dc) {courbe.Dessiner(dc);} ; virtual void dessinerOutline(TDC*dc, int nbPts); virtual void FaireGlisser(TDC* dc,TPoint point); virtual void FairePivoter(TDC* dc,float angle); virtual void SetPosition(TPoint point); virtual void SetOrientation(float n_orientation); void SetOutline(int Le_f_outline, int Le_rayonOutline); void SetFlagNumero(int val); void SetNumero(int Le_numero) {numero= Le_numero;}; BOOL PointDansObjet(const TPoint& point) {return zone_occupee.Contains(point);}; TRect GetZoneOccupee(){return zone_occupee;}; void SetCourbe(t_courbe La_courbe) {courbe= La_courbe; f_avecCourbe= 1;}; }; class TBouee: public TObjet { int type_bouee; public: enum {BOUEE_ISOLEE, BOUEE_DEPART, BOUEE_ARRIVEE, BOUEE_SOUS_VENT}; TBouee(); TBouee(int le_type_bouee,TPoint point,float angle=0,float n_taille=1); int GetTypeBouee() {return(type_bouee);}; void dessiner(TDC* dc); void dessinerOutline(TDC* dc, int nbPts); }; BOUEE_AU_VENT, class TBateauCourse: public TObjet { TPoint dessinVoile[21]; int type_bateau; int amure; int formeVoile; int angleVoile; public: TBateauCourse(); // barlins TBateauCourse(int le_type,TPoint point=TPoint(0,0),float angle=0,float n_taille=1) ; void dessiner(TDC* dc); void FaireGlisser(TDC* dc,TPoint point); void SetReglage(int Le_reglage, int dirVent); void SetMastLine(int val); void SetEngagement(int val); 12 int GetTypeBateau() {return(type_bateau);}; int GetAngleVoile() {return(angleVoile);}; private: void CalculerAngleVoile(int dirVent); void CalculerDessinVoile(TPoint dessinVoile[], int&nbPts); }; 4.3 Les fonctions virtuelles Ces fonctions sont utilisées par les classes de bases, permettant aux classes dérivées de surcharger ces fonctions afin de déterminer leur propre comportement. Ainsi, on peut utiliser la fonction comme étant la fonction de la classe de base, mais dont le comportement correspond à la fonction dérivée. Dans l'exemple précédent, la fonction "Dessiner()" est déclaré virtuelle, puis surchargée dans les classes dérivées, ceci permet dans le code de dessiner un objet sans savoir la classe exacte de l'objet. Le code peut alors s'écrire: class TSchema { TObjet** tableau; int nb_objets; int taille; public: TSchema(); ~TSchema(); TObjet* Rechercher(TPoint point, TDC* dc); void Ajouter(TObjet* un_objet); void dessiner(TDC* dc); }; void TSchema::dessiner(TDC* dc) { for (int i=0; i<nb_objets; i++) { tableau[i]->dessiner(dc); // appel a la dessiner propre à chaque classe dérivée de TObjet } } 13 V LA PROGRAMMATION SOUS WINDOWS 5.1 Concepts de base: L'élément essentiel d'une application est ... sa fenêtre. C'est à travers elle que l'utilisateur communique avec l'application. Ainsi, contrairement à une application classique, une application Windows est organisée de manière à ce que ce soit l'utilisateur qui commande l'application et non pas l'inverse. L'application doit alors gérer par des fonctions (handler) les messages envoyer par l'utilisateur par l'intermédiaire de la souris ou du clavier. Ces messages proviennent essentiellement: _ de la sélection d'un menu _ d'un mouvement, d'un clic ou double clics de la souris _ d'un clic dans un bouton _ de l'entrée de texte dans une fenêtre texte. _ ... 5.2 Gestion des événements: Cette gestion se fait principalement au niveau des objets représentant les fenêtres, en créant une table de réponse. Cette table indique que l'objet réagit à cet événement et précise la fonction à exécuter. Voici un exemple de table de réponse: // GESTION DES MESSAGES RECU PAR LA FENETRE PRINCIPALE DEFINE_RESPONSE_TABLE1(FenDst,TWindow) //ev menu fichier EV_COMMAND(CM_FICHIERNOUVEAU,CmNouveau), EV_COMMAND(CM_FICHIERSAUVER_SOUS,CmSauverSous), EV_COMMAND(CM_FICHIEROUVRIR,CmOuvrir), EV_COMMAND(CM_FICHIERFERMER,CmFermer), EV_COMMAND(CM_FICHIERINFOSCARACTERISTIQUES,CmInfos), EV_COMMAND(CM_FICHIERRECHERCHER,CmRechercher), EV_COMMAND(CM_FICHIERIMPRIMER,CmImprimer), EV_COMMAND(CM_FICHIERCHOIX_IMPRIMANTE,CmChoixPrt), //ev souris EV_WM_LBUTTONDOWN, EV_WM_RBUTTONDOWN, EV_WM_MOUSEMOVE, EV_WM_LBUTTONUP, EV_WM_RBUTTONUP, EV_WM_LBUTTONDBLCLK, EV_WM_CHAR, //divers EV_WM_ACTIVATE, END_RESPONSE_TABLE; Les premiers messages proviennent du menu. Les noms des fonctions répondant aux événements "souris" sont standardisés, c'est pourquoi on ne les indique pas dans la table. De plus, certaines fonctions des classes de base d'ObjectWindows sont des handlers. Elles sont en généralement déclarées virtuelles pour pouvoir être surchargées. C'est ainsi le cas 14 de la fonction Paint, associée à ev_paint qui est appelée lorsque la fenêtre doit être redessinée. 5.3 Les ressources: Windows permet de créer et de stocker des objets d'interface indépendamment du code de l'application (et donc de manière statique). Ces objets sont essentiellement: _ des dessins bitmap (Icône) _ Les menus _ les boites de dialogue (Apparence, boutons, texte ...) _ chaînes de caractères utilisées par les barres d'état. Exemple de fichier de ressources: /**************************************************************************** exemple.rc produced by Borland Resource Workshop *****************************************************************************/ #include <exemple.rh> BITMAP_1 BITMAP { '42 4D 66 01 00 00 00 00 00 00 76 00 00 00 28 00' '00 00 14 00 00 00 14 00 00 00 01 00 04 00 00 00' '00 00 F0 00 00 00 00 00 00 00 00 00 00 00 00 00' '00 00 10 00 00 00 00 00 00 00 00 00 80 00 00 80' '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' '00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' '00 00 FF FF FF 00 EE EE EE EE EE EE EE EE EE EE' '44 4C EE EE EE EE EE EE EE EE EE EE 23 10 EE EE' 'EE EE EE EE EE EE EE EE 88 C8 EE EE EE EE EE EE' 'EE EE EE EE 00 31 EE EE EE EE EE EE EE EE EE EE' '10 25 EE EE EE EE EE 00 0E EE EE EE 99 55 EE EE' 'EE EE E0 99 90 EE EE EE 10 25 EE EE EE EE 09 FF' 'F9 0E EE EE 9D 44 EE EE EE E0 99 99 99 90 EE EE' '22 26 EE EE EE E0 99 9F 99 90 EE EE 00 01 EE EE' 'EE E0 9F 99 9F 90 EE EE 19 A2 EE EE EE EE 09 99' '99 0E EE EE 20 02 EE EE EE EE E0 99 90 EE EE EE' '44 4C EE EE EE EE EE 00 0E EE EE EE 01 03 EE EE' 'EE EE EE E9 EE EE EE EE 22 44 EE EE EE EE EE 99' 'EE EE EE EE 41 26 EE EE EE EE 99 9E EE EE EE EE' '21 91 EE EE EE EE EE EE EE EE EE EE 02 54 EE EE' 'EE EE EE EE EE EE EE EE 45 F4 EE EE EE EE EE EE' 'EE EE EE EE 0B 0A' } #include "..\..\..\bc4\include\owl\editfile.rc" 15 DIALOG_1 DIALOG 45, 50, 189, 124 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CLASS "bordlg" CAPTION "DIALOG_1" FONT 8, "MS Sans Serif" { CONTROL "", -1, "BorShade", BSS_VDIP | BSS_LEFT | WS_CHILD | WS_VISIBLE, 135, 0, 1, 124 CONTROL "", IDOK, "BorBtn", BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 144, 14, 37, 25 CONTROL "", IDCANCEL, "BorBtn", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 144, 49, 37, 25 CONTROL "", IDHELP, "BorBtn", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 144, 84, 37, 25 COMBOBOX IDC_COMBOBOX1, 11, 28, 84, 33, CBS_DROPDOWNLIST | WS_TABSTOP LTEXT "Paramètres", -1, 13, 15, 60, 8 CONTROL "Radio", IDC_RADIOBUTTON1, "BorRadio", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 58, 82, 10 CONTROL "Radio", IDC_RADIOBUTTON2, "BorRadio", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 11, 77, 81, 10 CONTROL "Check", IDC_CHECKBOX1, "BorCheck", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 11, 100, 76, 10 } IDM_EDITFILE MENU { POPUP "&File" { MENUITEM "&New", CM_FILENEW MENUITEM "&Open...", CM_FILEOPEN MENUITEM "&Save", CM_FILESAVE MENUITEM "Save &As...", CM_FILESAVEAS MENUITEM SEPARATOR MENUITEM "E&xit", CM_EXIT } POPUP "&Edit" { MENUITEM "&Undo\aAlt+BkSp", CM_EDITUNDO MENUITEM SEPARATOR MENUITEM "&Cut\aShift+Del", CM_EDITCUT MENUITEM "C&opy\aCtrl+Ins", CM_EDITCOPY MENUITEM "&Paste\aShift+Ins", CM_EDITPASTE MENUITEM "&Delete\aDel", CM_EDITDELETE MENUITEM "C&lear All\aCtrl+Del", CM_EDITCLEAR } 16 VI LOGICIEL DESSINS DE SCHEMAS TACTIQUES (D.S.T.) 6.1 Généralités Ce logiciel permet de créer des schémas de situations en régate. Outre, la possibilité de réaliser facilement de tels schémas, le logiciel fournit un moyen de stoker et de s'échanger les schémas. Par ailleurs, les documents pourront être plus tard utilisés en régates. L'une des exigences à ce logiciel était la rapidité de sa réalisation, afin que les tacticiens puissent en disposer le plus tôt possible. Ainsi, on a planifié son développement sur un mois. En fait, il nous a fallu, à P. Bariod et moi-même, environ 40 jours pour obtenir une première version utilisable. Ma participation avec P. Bariod à la conception de ce logiciel m'a permis de m'initier aux outils de développement, à "Borland C++" et à la programmation sous Windows. 6.2 Description du Logiciel Le logiciel permet d'abord de placer des bateaux de course à différentes positions, la trajectoire entre deux positions étant tracée automatiquement. De même les voiles s'adapteront suivant la position du bateau et pourront être modifiés ensuite. D'autres objets comme les bateaux comités, les bateaux spectateurs et les bouées pourront être ajoutés au schéma. Chaque objet graphique peut être bougé et orienté à l'aide de la souris. De même, on peut modifier la trajectoire. Par ailleurs, l'utilisateur peut insérer des commentaires et "faire parler" les bateaux à l'aide de bulle. Les "laylines" (lignes correspondant aux trajectoires optimal) et les cercles autours des bouées pourront être dessiné automatiquement. Le schéma contient des informations caractéristiques qui sont en outre la date, le nom de l'auteur, la référence à la règle. On pourra de plus sauvegarder le schéma avec toutes ses informations et l'imprimer. Ce logiciel doit être convivial et facile d'utilisation. De plus il doit respecter les habitudes et conventions utilisées en match racing. 6.3 Réalisation du Cahier Des Charges Le cahier des charges a été élaboré par P. Bariod avec les tacticiens du "Team". L'interface (menu, fenêtre, boites de dialogue) a été définie à partir des idées des futurs utilisateurs après avoir été clarifiées et organisées par P. Bariod. Ce dernier a de plus défini les objets informatiques correspondants aux objets graphiques qui pourront être dessinés ainsi que l'objet "conteneur". Il a en plus spécifié certains algorithmes. Il est à noter que, excepté quelques détails mineurs, le cahier des charges n'a pas été modifié durant le développement. 17 6.4 Développement Pour le développement, nous nous sommes répartis les tâches. Ainsi il m'a été confié: _ la réalisation du menu de la fenêtre principale _ l'implémentation de différentes boites de dialogues _ l'implémentation des objets graphiques et leur manipulation _ l'implémentation des bulles et des commentaires _ la gestion des barres de défilement _ la réalisation des commandes de zoom (avant, arrière et tout). _ l'impression du schéma et des informations caractéristiques P. Bariod a pour sa part réalisé: _ l'implémentation de l'objet contenant l'ensemble des objets graphiques _ le tracé des trajectoires _ le tracé des voiles _ le tracé des laylines, des cercles. _ la sauvegarde du schéma _... Ci-après est décrit de façon plus détaillée le travail que j'ai réalisé dans ce logiciel. a_ Menu et boites de dialogue Il s'agit d'une part de créer les ressources et d'autrepart d'écrire le code permettant d'utiliser ces objets. Le menu est composé de 4 menus déroulant: _ menu fichier (nouveau, ouvrir, sauver, imprimer ...) _ menu édition ( ajouter un objet, insérer un bateau, supprimer ...) _ menu option (laylines, cercle, vent...) _ menu zoom Les différentes boites de dialogue sont: _ la fenêtre de contrôle des objets _ la fenêtre permettant de choisir une vue de départ _ la fenêtre permettant de saisir les informations caractéristiques _ les diverses fenêtres permettant de modifier les options La réalisation des ressources se fait par Resource Workshop. Ceci est assez rapide. L'écriture du code est par contre un peu plus long. En effet, si pour les menus il suffit de créer une table de réponse, pour les boites de dialogue, il faut systématiquement implémenter des classes dérivées de TDialog, contenant les différents objets de contrôles, ainsi que les fonctions permettant de recueillir les données. La fenêtre la plus complexe à réaliser fut la fenêtre de contrôle puisque elle devait être interactive avec la fenêtre principale, obligeant à contrôler toutes les événement reçus par cette boite. Les différents menus et boites de dialogue se trouvent en annexe. 18 b_ Les objets graphiques Les différents types d'objets sont: _ les bateaux Défi _ les bateaux adversaires _ les bateaux comité _ les bateaux juges _ les bateaux WindJudge _ les bateaux spectateurs _ les bouées _ les flèches ( voir leur représentation en annexe). Chaque objet peut être bougé, tourné et agrandi, ce qui nous oblige de les représenter sous forme vectoriel. Ainsi, chaque point de l'objet est calculé en fonction de sa position, de son orientation et de sa taille. La manipulation des objets se fait soit à l'aide de la souris, soit par la fenêtre de contrôle. Les fonctions permettant de gérer les objets avec la souris sont: void EvLButtonDown(UINT, TPoint&); void EvRButtonDown(UINT, TPoint&); void EvMouseMove(UINT, TPoint&); void EvLButtonUp(UINT, TPoint&); void EvRButtonUp(UINT, TPoint&); c'est à dire les handlers aux événements souris. Par ailleurs, tous ces objets son dérivée de TObjet, classe générique, ce qui permet de pouvoir les stocker et les manipuler facilement. c_ Les bulles et les commentaires Ces objets dérivent aussi de TObjet, puisqu'ils font aussi partie du schéma. Il peuvent ainsi être bougés, voir tournés pour la bulle. La difficulté supplémentaire provient de l'insertion du texte, qu'il faut redessiner dans le schéma, tout en adaptant le contour du texte ou du commentaire. Pour cela, on utilise une fenêtre de saisie, qui permet de saisir le texte et d'écrire simultanément dans la fenêtre principale. Afin que la fenêtre de saisie puisse indifféremment servir pour les bulles et les commentaires, j'ai utilisé une classe générique dont j'ai fait dériver les objets bulle et commentaire. d_ Les barres de défilement: Ces barres permettent de se déplacer dans le schéma et pas se limiter à la taille de la fenêtre. La représentation de ces barres est déjà inclue dans la classe de base TWindow. Pour pouvoir les manipuler, il suffit de leur associer un objet TScroller et de surcharger les fonctions membres virtuels "HScroll()" et "VScroll()", qui sont les fonctions répondant aux événements reçus par les barres. e_ Zoom Les commandes de zoom permettent d'agrandir ou de diminuer la zone visualisée ainsi que d'avoir une vue de l'ensemble du schéma. Pour cela, il faut modifier l'échelle et l'origine utilisées pour les tracés (repère logique). Ceci s'est avéré un peu plus difficile à mettre en œuvre que prévu, car il fallait que le zoom s'effectue par rapport au centre de la fenêtre, afin qu'il n'y ait pas une 19 impression de décalage pou l'utilisateur. Par ailleurs on devait s'assurer que la position des barres de défilement restait cohérente lors des changements d'origine. f_ Impression: Pour l'impression, on a voulu laisser à l'utilisateur la possibilité de placer le schéma où il le désirait sur la feuille, afin qu'il puisse être inséré dans un autre document. Le code pour réaliser l'impression est assez simple puisque la classe TPrintOut de OWL encapsule tout ce qui est "driver" et configuration d'impression. Il a suffi de réécrire la fonction PrintPage, dans laquelle on écrit vers l'imprimante de la même façon que si on écrivait vers la fenêtre. L'impression se compose en fait du schéma et des informations caractéristiques ce qui m'a obligé de diviser la fenêtre en deux parties, en modifiant le "viewport" ( zone d'affichage physique). 6.4 Problèmes rencontrés La principale difficulté rencontrée venait de mon manque de connaissance de Borland et de bibliothèque OWL, ainsi que de l'API de Windows. J'ai dû en effet passer beaucoup de temps à rechercher les fonctions et à savoir comment les utiliser correctement. C'était notamment le cas lorsqu'il fallait modifier les échelles et les origines ou lorsqu'il fallait retrouver le centre de la fenêtre. Souvent cela portait sur des détails anodins. Sur le plan des méthodes de travail en général, une certaine rigueur était nécessaire dans l'écriture du code, dans la mesure où ce code était réutilisé par P. Bariod. Ainsi, les fonctions devaient être, évidement fiables mais aussi devaient permettre de manipuler les objets en toute sécurité. On retrouve ainsi la notion d'encapsulation des données, l'idéal étant que ces données puissent être manipulées uniquement par les fonctions membres. Ceci n'a pas été toujours le cas, néanmoins la fusion des différentes parties s'est faite sans grande difficulté. 20 VII LOGICIEL D'ANALYSE DES PHASES TRANSITOIRES 7.1 Généralités sur l'analyse des données Actuellement les données sont sauvegardées sous le format "ockam", la centrale d'acquisition utilisée sur les bateaux. Ce sont des relevés réalisés au 1/4 s. Ces fichiers restent difficilement exploitables. D'abord, leur taille est très importante (entre 4 et 12 Mo), ensuite il contient des erreurs dû à des pertes d'octets sur le bus. Enfin, la fréquence d'échantillonnage n'est pas toujours exactes ce qui rend difficile de dater les données avec précision. Jusqu'à présent, on a utilisé des fichiers de données échantillonnées à 30s, qui sont les points moyennés des points "1/4s". Ces points "30s" sont suffisants pour l'études des performances en régime stable du bateau et permet d'avoir ces caractéristiques globales. Mais ces données deviennent insuffisantes pour analyser des manoeuvres dont la durée est en général inférieure à la minute. Or, en régate, seulement 20% du temps se fait en régime stabilisé pour 80% en régime transitoire, d'où l'intérêt de pousser plus loin l'analyse et de développer des outils permettant d'étudier aisément les points au "1/4" de seconde. 7.2 Description du logiciel et cahier des charges Le problème provient du fait qu'on ne sait pas exactement comment analyser une manoeuvre et en particulier on ne sait elles vont être les valeurs caractéristiques à calculer. Par conséquent, le logiciel devra permettre d'abord une analyse qualitative, puis une analyse quantitative qui devra être affinée. Pour l'analyse qualitative, on désire pouvoir afficher la trajectoire et chaque paramètre mesurés sur le bateau (vitesse, angle de barre, vent, gîte ...) sous forme de courbe. On veut aussi pouvoir se déplacer avec un curseur sur la trajectoire et comparer les valeurs des différents paramètres à la position donnée. Pour l'analyse qualitative, on va procéder de la manière suivante: a) on définit 3 temps sur la trajectoire (graphiquement dans une première version), correspondant au début du virement (t0), à la fin de la montée au vent (t1), à la fin de la relance (t2). b)on calcule: _ entre t0 et t2, la perte de VMG (gain sur l'axe du vent) par rapport à une trajectoire rectiligne, les minima et maxima de la vitesse du bateau, de l'angle au vent apparent et de la barre. _ entre t0 et t1, le taux de giration, la perte de vitesse, le gain au vent et le rayon de courbure _ entre t1 et t2, la perte au vent, l'accélération et le rayon de courbure. 21 De plus, on veut pouvoir calculer entre 2 temps les accélérations, les rayons de courbure ainsi que le VMG. Sur les graphes, on veut pouvoir calculer les minima , maxima et les moyennes de chaque courbe. Par ailleurs, le logiciel sera amené à évoluer. Ainsi, la construction du logiciel devra être suffisamment général pour pouvoir ajouter par la suite de nouveaux outils d'analyse. 7.3 Développement du logiciel a_ L'interface utilisateur Les fenêtres: J'ai choisi d'utiliser une interface multi-documents, qui se compose d'une fenêtre principale et de fenêtres filles, qui peut être icônisées et déplacées à l'intérieure de le fenêtre mère. De plus, une barre d'outils et une barre d'état sont insérées à la fenêtre principale. La barre d'outils contient notamment les boutons permettant de se déplacer sur la courbe, alors que la barre d'état permet de fournir des informations sur les commandes sélectionnées. Sch 2: Apparence générale de l'application Les menus: Il y a 3 menus différents suivant que soit la fenêtre principale, une fenêtre contenant un graphe ou une fenêtre contenant une trajectoire qui est sélectionnée. Le menu principale est composée: _ d'un menu Fichier, permettant d'ouvrir des fichiers "30s" ou "1/4s", d'imprimer ou de sortir de l'application. _ d'un menu Fenêtre permettant d'organiser la position des fenêtres _ d'un menu donnant des informations sur le logiciel. 22 A ce menu de base, vient s'ajouter pour les fenêtres filles un menu graphe et un menu outils, dont le contenu diffère suivant qu'il s'agit d'une fenêtre graphe ou d'une fenêtre trajectoire. Fenêtre "trajectoire" et fenêtre "graphe" La fenêtre graphe contient d'une part une ou plusieurs courbes de paramètres provenant soit de la même manoeuvre soit de manoeuvres différentes et d'autre part des valeurs des paramètres au temps fixé par le curseur. La fenêtre trajectoire contient en plus du tracé de trajectoire, l'affichage des valeurs de la barre, de la vitesse du bateau, de son cap, de la force du vent et sa direction. Fenêtres de dialogue Elles sont au nombre de 3, auxquelles viennent s'ajouter les fenêtres permettant d'afficher les résultats. L'une permet de choisir le paramètre à afficher dans une fenêtre graphe. Une autre sert à modifier l'échelle des graphes et offre la possibilité de choisir différentes option (échelle optimum, échelle identique pour chaque courbe ...). Enfin, la dernière sert à saisir les temps soit directement au clavier, soit à l'aide du curseur. En annexe, est représentée chaque boîte de dialogue, ainsi que les menus. b_ Organisation des données L'objet TParametre C'est l'objet de base qui encapsule les données. Il contient notamment le tableau de données en eux-mêmes, ainsi que des attributs permettant de définir le paramètre temps. Celui est déterminée par l'équation: t = début + i.delta_t, i étant l'indice du tableau des données. Il contient en plus des informations sur l'origine du paramètre, c'est-à-dire le nom du bateau sur lequel a été enregistré les données, la date et l'heure de la manoeuvre. L'objet TCourbe Il est composé de un ou deux paramètres, correspondant à la composante Y et X de la courbe. Si X est initialisé à NULL, Y est représenté en fonction de son paramètre temps. Il possède aussi les attributs xmin, ymin, xmax et ymax pour définir les limites de la courbe et des axes. Si l'indicateur "f_autoscale" est vrai alors les minima et maxima correspondent à ceux des deux paramètres X et Y. Les objets de type "Doc" et "View" Chacune des entités "Trajectoire" et "Graphe" sont divisées en deux couches, une couche "visualisation" et une couche "document". La couche "document" sert à encapsuler les données sous forme de liste soit de paramètres, soit de courbes. La couche "Visualisation" est utilisée pour représenter le document à l'écran. 23 Sch 3: Objets Trajectoire et Graphe Lecture des données La lecture des données se fait soit dans un fichier "30s" (d'extension db1), soit dans uns fichier "1/4s" (d'extension pai). Pour cela, j'ai défini deux objets "Document", TTrjDoc et TTrj2Doc, le deuxième dérivant du premier. Les fichiers PAI sont composés d'une première série de colonnes comportant les paramètres jugés indispensables aux différents calculs. A ces paramètres, peuvent s'en ajouter d'autres qui pourront être utilisés par la suite. Les fichiers DB1 ont par contre un nombre fixé de champs dont certains peuvent être vide. Dans ce cas là, la fonction GetVal() de TParametre retourne zéro. A partir des paramètres lus, on calcule "X", "Y" et "Courbure". Ces paramètres peuvent par la suite être recopiés dans un objet TGraphDoc à l'aide de la boîte de dialogue "AddParam". Le fait de faire une recopie au lieu d'utiliser une référence assure aux objets graphes une parfaite autonomie. sch 4: Ajout de courbes 24 c_ Gestion du temps Déplacement des curseurs La barre d'outils contient des boutons plus un curseur qui permet de balayer toute la durée d'une manoeuvre. Un point rouge sur la trajectoire et une barre rouge sur le graphe permet de visualiser la position courante. Un déplacement du curseur entraine la mise-àjour de ces marques, ainsi que des valeurs des paramètres affichés. sch 5: Modification du temps courant Saisie des temps L'utilisateur va être amené à sélectionner des temps soit pour analyser les manoeuvres soit pour définir l'intervalle de calcul. Ceci se fait par l'intermédiaire de la boîte de dialogue, "TDTemps". Elle permet de visualiser les temps enregistrés et de les modifier, soit directement au clavier, soit à l'aide du curseur, le temps s'affichant simultanément dans la barre d'outils et dans la fenêtre de dialogue. Par Ailleurs, pour bien visualiser la position choisie, on affiche des marques sur le graphe ou sur la trajectoire. sch 6: système de saisie des temps 25 d_ Algorithmes de calculs Calcul de la trajectoire La trajectoire tracée correspond à "l'estime", c'est-à-dire celle déduite de la vitesse et du cap du bateau. Or, comme la vitesse est en fait une vitesse mesurée par rapport à l'eau, on obtient une trajectoire dite de surface. Celle-ci est différente de la trajectoire sur le fond à cause du courant. Il est à remarquer que la trajectoire fond peut être mesuré par un GPS. Pour le calcul, on utilise les approximations: X(t+dt) ~ X(t) + X'(t).dt Y(t+dt) ~ Y(t) + Y'(t).dt d'où les formules de récurrences: X0 = 0 Xn = Xn-1 + Vxn . delta_t Y0 = 0 Yn = Yn-1 + Vyn . delta_t avec Vx = VitBateau . sin (AngleCompas) Vy = VitBateau . cos(AngleCompas) Il faut noter que ce calcul ne fait pas intervenir l'angle de dérive qui peut faire varier la direction du bateau de deux ou trois degrés par rapport à son cap. comparaison estime/gps 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -0.4 -0.2 0 0.2 0.4 0.6 0.8 Sch 7 26 Calcul des dérivées première et seconde J'utilise la formule de Taylor: f(t+dt) = f(t) + f'(t)dt + f''(t)dt²/2 + o(dt²) f(t-dt) = f(t) - f'(t)dt + f''(t)dt²/2 + o(dt²) d'où f'(t) = (f(t+dt) - f(t-dt)) / (2dt) + ε avec | ε | < | fmax - fmin | . dt f''(t) = ( f (t+dt) + f (t-dt) - 2f (t) ) / dt² + ε avec | ε | < | fmax - fmin | . dt² Calcul des accélérations et du rayon de courbure L'accélération tangentielle correspond à la dérivée de la norme de la vitesse. L'accélération radiale se calcule par la formule: ar = v . (dθ/dt) où θ correspond à l'angle de compas. Le rayon de courbure se calcule par la formule: Vitesse = R * (dθ/dt) d'où R = v / (dθ/dt) Calcul du VMG (Velocity Made Good) Le VMG est la composante de la vitesse suivant l'axe du vent, axe orienté suivant la direction d'où vient le vent et peut se calculer par la formule: VMG = (distance/ delta_t) * cos (TrueWindAngle) (cf sch ci-dessous ) sch 8: Calcul du VMG 27 Il existe déjà un paramètre VMG "instantanée" fourni par la centrale d'acquisition Ockam. Mais celui devient très approximatif à cause du temps de réponse des capteurs, lors des manoeuvres. Pour calculer le VMG dans un virement on décide de prendre: _ comme direction du vent, la moyenne entre la direction mesurée au début de la manoeuvre et celle mesurée à la fin. WindDir = (WindDir0 + WindDir1) / 2 _ comme distance, on prend d = √ (x1 -x0)² + (y1 - y0)² où P(x0,y0) et P(x1,y1) sont les positions estimées. Ce calcul ne tient pas compte du courant ni pour la direction du vent ni pour la distance parcourue. Ceci n'est pas gênant dans la mesure où on désire avec le VMG connaître le comportement propre du bateau, donc indépendamment du milieu extérieur. 7.5 Phase de validation et évolution du logiciel Une fois le développement achever, je suis passé à une phase de validation du logiciel consistant à déterminer et rectifier tous les défauts et mal fonctionnements du logiciel. Cette phase définit de plus des modifications ou ajouts plus importants pour que le logiciel soit plus performant. Notamment, je prévois d'apporter des modifications aux niveaux de la lecture de données et dans l'analyse des résultats. Lecture des données Actuellement, le fichier PAI est créé par un autre logiciel, CORRECT10, écrit par P. BARIOD en 1992. Ce logiciel permet d'extraire une manoeuvre, connaissant son heure de début, d'un fichier "Ockam". Cette manipulation devient vite fastidieuse vue le nombre importants de manoeuvres qu'on ne peut extraire qu'un par un. De plus, il est difficile de connaître l'heure de début des manoeuvres à moins de les noter sur l'eau. L'utilisation d'un fichier "30s" s'avère pas suffisamment précis pour détecter facilement une manoeuvre. Lorsque le système d'acquisition "VME" sera mis en place, on prévoit de lire un fichier "1/4s" et de créer des fichiers "PAI" directement avec le logiciel, ce qui rendra le tâche plus facile. Analyse des manoeuvres Dans sa forme première, le logiciel permet de choisir une partie de trajectoire définissant l'intervalle de calcul et effectuer une analyse de la manoeuvre. Les résultats peuvent être imprimés. De plus, deux fenêtres "résultat" peuvent être simultanément affichées ce qui permet de faire des comparaisons entre deux manoeuvres. 28 Cette analyse reste néanmoins limitée. Il semble en effet indispensable de pouvoir analyser l'ensemble des manoeuvres. Pour cela, on prévoit de mettre en place une base de données, réalisée à partir des résultats. Cette base de données devrait permettre d'effectuer des statistiques et de définir des valeurs de référence. Ceci implique de sauvegarder les résultats soit dans un fichier, soit directement dans la base. On avait aussi prévu de pouvoir sauvegarder des courbes qui serviraient de référence à d'autre trajectoire. Mais ceci ne semble pas à priori d'une utilité primordiale. Par contre, il semble intéressant d'améliorer l'analyse qualitative en permettant d'afficher dans une même fenêtre deux trajectoires. Ceci implique de pouvoir synchroniser les manoeuvres. 29 VIII ENSEIGNEMENT RECU PAR CE STAGE 8.1 Sur le développement de logiciel Durant ce stage, j'ai pu me rendre compte de toutes les difficultés du développement, de la réalisation du cahier des charges jusqu'à la mise au point du logiciel. Ci-dessous, j'ai fait la synthèse des différentes remarques importantes pour le développement. Le cahier des charges et l'analyse De la réalisation du cahier des charges dépend tout ce qui suit. Cette étape demande une collaboration étroite entre le programmeur et les utilisateurs, afin de définir les fonctionnalités du logiciels. Il s'agit souvent d'établir des compromis entre les besoins et les délais demandés pour pouvoir se fixer des objectifs raisonnables. Le programmeur doit aussi mettre au clair les différentes idées des utilisateurs, en fonctions de ces connaissances en objet d'interface et manipulations de données informatiques. Ceci demande principalement de l'expérience. Il ne faut négliger aucune des différentes phases et pouvoir estimer leur durée respective. La phase d'analyse est aussi primordiale. Elle détermine les différents objets et modules à implémenter. Une bonne ou mauvaise analyse peut faire gagner ou perdre beaucoup de temps. Elle doit notamment être aussi exhaustive que possible afin de pouvoir écrire le maximum de code et limiter les compilations. Il semble en effet désastreux pour le rendement d'ajouter sans cesse des bouts de codes entre deux compilations. Elle doit par ailleurs être suffisamment bien construite pour pouvoir apporter des améliorations futures. La construction d'interface graphiqhe L' interface n'est pas à négliger puisqu'elle détermine la manière dont va pouvoir être utiliser le logiciel. Celle-ci doit être suffisamment conviviale et simple, afin que l'utilisateur ne soit pas gêner dans sa tâche. Ceci demande souvent du temps pour être mis au point. Il faut pouvoir se mettre à la place de l'utilisateur, qui n'est lui n'est en générale pas informaticien et n'a pas les mêmes habitudes. Enfin sa réalisation nécessite une bonne connaissance de la bibliothèque utilisée en l'occurrence "OWL" et "API" et donc de passer beaucoup de temps à se documenter. L'écriture du code Le code doit pouvoir être lu et réutiliser le plus aisément possible par un autre développeur. Dans cette perspective, il est souhaitable d'utiliser des conventions. Ces conventions portent sur la syntaxe (placement des virgules, des points virgules, accolades), sur les noms des variables et des classes, qui doivent par ailleurs suffisamment expressifs. On aura aussi soins de mettre des commentaires, si nécessaire. 30 sch 9 : les différentes phases de développement 8.2 Sur le fonctionnement d'une société Problème d'organisation L'objectif du Défi n'étant pas productif, le financement des différents secteurs est un peu particulier. Néanmoins le fonctionnement est semblable aux autres sociétés, avec tous les problèmes de délais à respecter, de budget à ne pas dépasser, aux problèmes clientsfournisseurs. Bien que faisant partie intégrante du "Défi", le secteur Analyse essaie de fonctionner de manière autonome, avec son propre budget et sa propre organisation. Il est ainsi amené à considérer les autres secteurs ("Team", concepteurs, voilerie ...) comme ses "clients". Ceci permet de travailler avec une équipe restreinte, d'une dizaine personnes, ce qui favorise la communication et simplifie le côté administratif. Malgré tout, la logistique reste un problème permanent. Problèmes de communication La communication est primordiale dans une société. Ainsi régulièrement étaient organisées des réunions de travail ou briefing au niveau du secteur et au niveau de l'ensemble du "Défi". Les briefing du secteur permettent de faire le bilan du travail de chacun et de se refixer de nouveaux objectifs. Ceci est particulièrement important pour la motivation de chacun et pour le travail effectué corresponde bien aux différents besoins. Les briefing généraux permettent de voir l'avancement de l'ensemble du "Défi". Ils servent aussi à présenter l'activité de chaque secteur. Il est en effet important que tous les secteurs soient sensibilisé à l'activité des autres dans la mesure où ils sont souvent amenés à collaborer. L'exemple du problème de la qualité des mesures pour cela très significatif. En effet, plusieurs secteurs sont concernés, les navigants qui peuvent juger sur le bateau si les mesures semblent correctes, les électroniciens qui savent si les capteurs sont bien étalonnés et enfin l'analyste qui traite les données. Or chacun a sa vision du problème mais aucun n'a la vue d'ensemble. 31 Seul une collaboration étroite entre les différents secteurs peut résoudre pleinement le problème. Postface Participer au "Défi Français", a été une expérience particulièrement passionnante, tant sur le plan technique que sur le plan humain. J'ai ainsi pu apprendre la programmation sous Windows, interface qui est devenu un standard dans le monde et dont l'utilisation risque encore de se renforcer avec la nouvelle version 4.0. Sûrement plus important, j'ai aussi appris à gérer un projet dans le temps, à me fixer des objectifs et à les atteindre dans les délais demandés. Mais l'expérience humaine a été a mon avis encore plus enrichissante. En effet, participer à un challenge d'envergure international a été extrêmement motivant. Chaque personne que j'ai rencontré au "Défi", navigants, techniciens ou ingénieurs, travaille avec la même passion pour atteindre leur but commun à tous: rapporter la Coupe de l'America en Europe. L'esprit de travail était très stimulant, et ceci malgré un contexte économique difficile. J'espère pouvoir garder un tel esprit dans la suite de ma carrière professionnelle. 32