Rapport de stage - Defence Research Reports
Transcription
Rapport de stage - Defence Research Reports
Rapport de stage Interfaçage et évaluation d’outils de visualisations 3D RAPPORT DE CONTRACTEUR PRÉPARÉ POUR DEFENCE R&D CANADA - VALCARTIER R&D POUR LA DÉFENSE CANADA - VALCARTIER QUEBEC, QC G3J 1X5 CANADA Numéro de contrat : W7701-053273/001/QCL Numéro du document : CR 2007 - 298 Autorité scientifique : Éric Dumais Tél: 418-844-4000 ext. 4464 PAR David Prévost NUMERICA TECHNOLOGIES INC. 3420 rue Lacoste Québec, QC G2E 4P8 Canada 31 Août 2006 L’entrepreneur est entièrement responsable de la validité scientifique ou technique de ce rapport de contrat, et le contenu de ce rapport n’est pas nécessairement approuvé ni entériné par R et D pour la défense Canada. CR 2007 – 298 Résumé Des interfaces ont été conçues entre Matlab/Simulink et des outils de visualisation 3D pour effectuer l’illustration en 3 dimensions d’une simulation de trajectoires d’objets calculée par un modèle Simulink. Deux outils, Simdis et XPlane, sont en mesure de montrer graphiquement une simulation selon deux modes soit en temps réel, pendant que Simulink calcule les données, ou en temps différé, après le calcul de toutes les données. La méthode choisie, le réseau local, pour transmettre les données en mode temps réel demande l’utilisation de deux ordinateurs soit un pour calculer la simulation et l’autre pour l’illustrer. Pour le mode temps différé, un fichier est créé comprenant les données calculées par Simulink. Par la suite, l’outil est démarré et lit ce fichier pour y effectuer la simulation graphiquement. Des améliorations à ces interfaces sont mentionnées. Aussi, une évaluation rapide de différents outils a été complétée ressortant des caractéristiques intéressantes. Finalement, d’autres informations sont disponibles sur presque tout ce que j’ai fait durant le stage. CR 2007 - 298 i Page intentionnellement laissée en blanc. ii CR 2007 - 298 Table des matières 1. Introduction ................................................................................................................... 1 1.1 Description générale de l’interfaçage ............................................................... 1 1.2 Modèle Simulink .............................................................................................. 2 1.2.1 1.3 2. Interface Diva ................................................................................................... 4 1.3.1 Fonctionnement ................................................................................... 4 1.3.2 Fonctions génériques ........................................................................... 4 Interfaçage de Simdis .................................................................................................... 6 2.1 Description générale......................................................................................... 6 2.2 Interface DSC Server........................................................................................ 6 2.3 3. Bloc Ouput3D...................................................................................... 3 2.2.1 Modification de l’interface DSC Server.............................................. 6 2.2.2 Fonction waitClientsConnection ......................................................... 6 2.2.3 Classe DSC2ASILogger...................................................................... 7 Implantation dans Diva..................................................................................... 7 2.3.1 Temps réel et fichier............................................................................ 7 2.3.2 SeekerCone.......................................................................................... 9 Interfaçage de XPlane.................................................................................................. 10 3.1 Description générale...................................................................................... 10 3.2 Interface RTSP ............................................................................................... 10 3.3 3.4 CR 2007 - 298 3.2.1 Fonctionnement ................................................................................. 10 3.2.2 Fichier mdf ........................................................................................ 11 3.2.3 Programme translator.exe.................................................................. 11 Implantation dans Diva................................................................................... 11 3.3.1 Simulation en temps réel ................................................................... 11 3.3.2 Fichier................................................................................................ 13 3.3.3 Variable d’environnement XPLANE ................................................ 13 Plugin API ...................................................................................................... 14 3.4.1 Dataref ............................................................................................... 14 3.4.2 Avion de l’utilisateur et des multijoueurs ......................................... 14 iii 3.5 Implantation du plugin ................................................................................... 14 3.5.1 Démarrage et arrêt du plugin............................................................. 14 3.5.2 Simulation en temps réel ................................................................... 16 3.5.3 Simulation par fichier ........................................................................ 18 3.5.4 Affichage d’une simulation ............................................................... 19 3.5.5 Représentation des données dans la mémoire du vecteur de position et de temps...................................................................................................... 22 3.5.6 3.6 4. Structure de fichier de simulation................................................................... 24 Interfaçage de Mak Stealth .......................................................................................... 25 4.1 Description générale....................................................................................... 25 4.2 Interface VR-Link .......................................................................................... 25 4.3 Interface Data Logger..................................................................................... 25 4.4 Compatibilité & licences ................................................................................ 25 4.4.1 4.5 5.1 FSUIPC .......................................................................................................... 28 5.2 API multiplayer .............................................................................................. 28 FSVPI ................................................................................................ 28 Améliorations possibles............................................................................................... 29 6.1 6.2 6.3 Simdis............................................................................................................. 29 6.1.1 Interface Diva .................................................................................... 29 6.1.2 SeekerCone........................................................................................ 29 6.1.3 Plugin API ......................................................................................... 29 XPlane ............................................................................................................ 30 6.2.1 Protocole............................................................................................ 30 6.2.2 Plugin de l’interface Diva (DIVAxplaneplugin.xpl) ......................... 30 6.2.3 Fichier Objet comme modèle ............................................................ 31 Mak Stealth..................................................................................................... 31 6.3.1 iv Simulation en temps réel et par fichier.............................................. 26 Interfaçage de Microsoft flight simulator 2004 ........................................................... 28 5.2.1 6. Versions utilisées............................................................................... 26 Implantation dans Diva................................................................................... 26 4.5.1 5. Association des shapes avec les modèles 3D de XPlane................... 23 Plugin API ......................................................................................... 31 CR 2007 - 298 7. Développements futurs................................................................................................ 33 7.1 8. 9. Autres outils de visualisation.......................................................................... 33 7.1.1 Microsoft Flight Simulator X ............................................................ 33 7.1.2 Flight Gear......................................................................................... 33 7.1.3 Virtual Environment Concordia ........................................................ 33 7.2 Bloc Ouput3D................................................................................................. 33 7.3 Diva extended : Implantation de parties articulées......................................... 33 7.3.1 Gestion des parties articulées dans l’interface Diva .......................... 33 7.3.2 Première implantation possible ......................................................... 35 7.3.3 Deuxième implantation possible ....................................................... 35 7.3.4 Troisième implantation possible........................................................ 36 7.3.5 Quatrième implantation possible....................................................... 36 7.3.6 Problème : Uniformisation des variables .......................................... 36 Autres .......................................................................................................................... 37 8.1 XPlane 8.50 .................................................................................................... 37 8.2 Aerosim .......................................................................................................... 37 8.3 Bug Simplay ................................................................................................... 37 8.4 Interface Diva de Viewpoint .......................................................................... 38 8.5 Interface Diva du protocole DIS..................................................................... 38 Caractéristiques des outils de visualisation ................................................................. 39 9.1 Caractéristiques vérifiées................................................................................ 39 9.2 Gestion de la caméra ...................................................................................... 41 9.3 Autres caractéristiques.................................................................................... 44 10. Conclusion................................................................................................................... 46 11. Annexe......................................................................................................................... 47 11.1 Bloc Ouput3D................................................................................................. 47 11.1.1 Couches du bloc ouput3D ................................................................. 47 11.1.2 Code de la s-function de Diva ........................................................... 49 11.1.3 Modification apportée ....................................................................... 53 11.1.3.1 Contraintes avec interface Diva ..................................... 54 11.2 Debugger le plugin XPlane.................................................................................. 55 CR 2007 - 298 v 12. Références ................................................................................................................... 56 12.1 DIVA .............................................................................................................. 56 12.2 Simdis............................................................................................................. 56 12.2.1 Outils pour les modèles 3D et map 3D.............................................. 56 12.3 XPlane ............................................................................................................ 56 12.3.1 Plugin API ......................................................................................... 56 12.3.2 Outils pour les modèles 3D et map 3D.............................................. 57 12.4 Viewpoint ....................................................................................................... 57 12.4.1 Outils pour les modèles 3D et map 3D (ChunkedLOD) ................... 57 12.5 Mak Stealth..................................................................................................... 57 12.5.1 Outils pour les modèles 3D et map 3D.............................................. 57 12.6 RTSP .............................................................................................................. 57 12.7 Microsoft Flight Simulator ............................................................................. 58 12.7.1 Multiplayer API................................................................................. 58 vi 12.8 FSUIPC & WideFS ........................................................................................ 58 12.9 FSVPI ............................................................................................................. 58 12.10 Aerosim .......................................................................................................... 58 CR 2007 - 298 Liste des figures Figure 1 - Représentation générale de base de l'interfaçage....................................................... 1 Figure 2 - Représentation générale avancée de l'interfaçage...................................................... 1 Figure 3 - Exemple d’un modèle Simulink (fichier MultiGun.mdl)........................................... 2 Figure 4 - Représentation générale de l'interfaçage de Simdis................................................... 6 Figure 5 - Diagramme de séquence de l'interface Diva de Simdis ............................................. 8 Figure 6 - Représentation générale de l'interfaçage de XPlane ................................................ 10 Figure 7 - Diagramme de séquence d’une simulation en temps réel de l’interface Diva de XPlane ............................................................................................................................... 12 Figure 8 - Diagramme de séquence d’une simulation par fichier de l’interface Diva de XPlane13 Figure 9 - Diagramme de séquence du démarrage et arrêt du plugin de XPlane...................... 16 Figure 10 - Diagramme de séquence d’une simulation en temps réel du plugin de XPlane .... 17 Figure 11 - Diagramme de séquence d’une simulation par fichier du plugin de XPlane ......... 19 Figure 12 - Diagramme de séquence de la lecture d’une simulation du plugin de XPlane ...... 21 Figure 13 - Représentation des données dans la mémoire du vecteur de position et de temps 22 Figure 14 - Représentation générale de l'interfaçage de Mak Stealth....................................... 25 Figure 15 - Diagramme de séquence d’une simulation pour l’interface Diva de Mak Stealth. 27 Figure 16 - Outil de visualisation: Viewpoint .......................................................................... 42 Figure 17 - Outil de visualisation: Simdis ................................................................................ 42 Figure 18 - Outil de visualisation: XPlane ............................................................................... 43 Figure 19 - Outil de visualisation: SimPlay.............................................................................. 43 Figure 20 - Outil de visualisation: Mak Stealth........................................................................ 44 Figure 21 - Outil PlotXY de Simdis ......................................................................................... 45 Figure 22 - Bloc Output3D principal........................................................................................ 47 CR 2007 - 298 vii Figure 23 - Fenêtre du bloc Ouput3D (masque) affichant les options disponibles à l'utilisateur47 Figure 24 - Couche interne du bloc Output3D ......................................................................... 48 Figure 25 - Fenêtre de la s-function du bloc Output3D............................................................ 49 Figure 26 - Évolution de base des fonctions d'une s-function .................................................. 50 Figure 27 - Évolution complexe des fonctions d'une s-function (Partie 1) .............................. 51 Figure 28 - Évolution complexe des fonctions d'une s-function (Partie 2) .............................. 52 Figure 29 - Fenêtre éditrice du masque du bloc Ouput3D montrant les modifications apportées53 Liste des tableaux Tableau 1 - Fonctions génériques de l'interface Diva................................................................. 4 Tableau 2 - Variables utilisées pour l'implantation des Seeker Cones ....................................... 9 Tableau 3 - Exemple d’un fichier model.txt, modèle de XPlane 8.40...................................... 23 Tableau 4 - Exemple de structure de fichier pour une simulation avec XPlane ....................... 24 Tableau 5 - Certaines caractéristiques vérifiées d'outils de visualisation................................. 39 Tableau 6 - Format de modèle de fichier compatible avec Viewpoint..................................... 40 Tableau 7 - Format de fichier de map 3D compatible avec Mak Stealth ................................. 41 Tableau 8 - Gestion de la caméra d'outils de visualisation....................................................... 41 Tableau 9 - Description de certaines fonctions de la s-function du bloc Output3D ................. 49 Tableau 10 - Code de la s-function du bloc Output3D ............................................................. 50 Tableau 11 - Variables ajoutées au masque du bloc Output3D................................................ 53 Tableau 12 - Code ajouté au dialog callback du masque du bloc Output3D........................... 54 viii CR 2007 - 298 Intentionnellement en blanc. CR 2007 - 298 ix 1. Introduction Le groupe de simulation d’engagement, systèmes d’armes à comme objectif d’améliorer l’efficacité des systèmes d’armes. Pour ce faire, la modélisation et la simulation (M&S) sont utilisées afin de démontrer des concepts novateurs de systèmes d’armes. Plus précisément, la M&S sert à représenter fidèlement le comportement de systèmes impliqués dans un engagement. Les simulations permettent de générer plusieurs données numériques utiles pour l’analyse des résultats. Cependant, il est intéressant de voir une représentation graphique du déplacement des objets simulés. L’utilisation d’outils de visualisation en trois dimensions permet de voir le déroulement réel, donc graphiquement de la simulation. De plus, le développement d’une interface standardisée entre les logiciels de modélisation et les environnements de visualisation permet d’utiliser plus facilement une variété d’outils. 1.1 Description générale de l’interfaçage Pour effectuer de la M&S, le logiciel MATLAB/Simulink est utilisé pour calculer les données nécessaires à l’affichage graphique. Comme la Figure 1 le montre, ces informations sont envoyées à une interface appelée Diva qui convertira les données dans le format approprié pour ensuite les envoyer vers l’outil de visualisation sélectionné par l’utilisateur. Matlab/Simulink: Calculs Données Diva: Conversions Viewer3D : Affichage Données Figure 1 - Représentation générale de base de l'interfaçage De façon plus précise, durant la simulation, la position dans l’espace (coordonnées X, Y, Z) et l’orientation (angles psi, phi et thêta) des entités sont envoyées vers l’interface Diva implantée dans un modèle Simulink grâce à une « s-function » comme représenté à la Figure 2. Par la suite, Diva convertit ces données dans le système de coordonnées de l’outil de visualisation choisi et les envoie (via internet, un réseau local ou bien un fichier) selon la méthode implantée dans l’interface Diva. Matlab Simulink Block simulink (s-function) *Diva Internet Réseau Fichier Mémoire Viewer3D Figure 2 - Représentation générale avancée de l'interfaçage CR 2007 - 298 1 1.2 Modèle Simulink C’est un modèle Simulink, comme la Figure 3, qui est utilisé pour calculer les données nécessaires à l’affichage graphique. Ce modèle est constitué de plusieurs blocs Figure 3 - Exemple d’un modèle Simulink (fichier MultiGun.mdl) provenant de librairies développées au centre RDDC Valcartier. Ces blocs représentent l’aérodynamisme, la gravité, etc. On peut voir que ce modèle est constitué d’un avion (Mig29) et d’un bateau (Destroyer) possédant quatre missiles (ProjectileX). 2 CR 2007 - 298 1.2.1 Bloc Ouput3D Ce bloc, comme le monte le panneau en bas à gauche de la Figure 3, permet de choisir l’outil de visualisation désiré, le modèle 3D des entités et leur nom. Ces paramètres sont passés en argument à la s-function à l’intérieur du bloc et sont par la suite envoyés aux fonctions de l’interface Diva. Pour plus de détail sur les couches du bloc Ouput3D voir l’annexe 11.1.2. Des modifications apportées à ce bloc ont permis d’ajouter l’option pour effectuer une simulation en temps réel et/ou dans un fichier et d’activer des « seekerCone » pour les entités choisies. Ces paramètres sont ajoutés à la variable « Mars_Setup_String » qui est un argument de la s-function. Par la suite, ils sont passés via une « target sting » à l’interface Diva. Finalement, comme chaque outil permet des options différentes, un script est utilisé pour adapter le panneau selon le choix de l’outil fait par l’utilisateur. Ce script effectue aussi l’ajout de certains paramètres à la variable Mars_Setup_String. Pour une explication complète sur les modifications apportées à ce bloc voir l’annexe 11.1 Bloc Ouput3D. CR 2007 - 298 3 1.3 Interface Diva L’interface Diva, créée par la « Defence Science and Technology Organisation of Australia », est utilisée pour uniformiser l’utilisation des outils de visualisation et ainsi permettre l’interfaçage rapide de plusieurs outils avec Matlab/Simulink. Elle a aussi la caractéristique de passer facilement d’un outil à l’autre selon le choix de l’utilisateur. 1.3.1 Fonctionnement Un fichier DLL est créé pour chaque outil de visualisation à interfacer. Lors de l’utilisation de l’outil interfacé, ce fichier est chargé en mémoire. Donc, si plusieurs outils sont interfacés, l’interface Diva charge le DLL approprié selon le choix de l’utilisateur. 1.3.2 Fonctions génériques Pour être en mesure de passer rapidement et facilement d’un DLL à un autre l’interface Diva comprend un nombre de fonctions qui doivent absolument être implantées dans l’interfaçage des outils. Le Tableau 1 énumère les fonctions les plus importantes. Tableau 1 - Fonctions génériques de l'interface Diva Fonctions OpenViewer CreateEntity UpdateEntity DestroyEnity CloseViewer Utilité Simulation en temps réel Traite les choix de l’utilisateur et ouvre ou attend l’ouverture de l’outil Crée une entité avec un nom et un modèle (envoi selon le protocole choisi) Mets à jour la position d’une entité (envoyée selon le protocole choisi) Enlève une entité de la simulation (envoyée selon le protocole choisi) Arrête la simulation Simulation par fichier Traite les choix de l’utilisateur et crée le fichier de simulation Crée une entité avec un nom et un modèle (écrit dans le fichier) Mets à jour la position d’une entité (écrite dans le fichier) Enlève une entité de la simulation (écrite dans le fichier) Ouvre l’outil avec le fichier créé Même si nous utilisons les mêmes fonctions dans chaque interface, la différence est dans la façon de les implanter pour chaque outil. Par exemple, si un outil permet seulement la simulation en temps réel et l’autre par fichier, nous voyons selon le tableau que les deux créent une entité. L’un enverra les données par réseaux vers l’outil tandis que l’autre écrira les données dans un fichier qui pourra être visionné ultérieurement 4 CR 2007 - 298 Dans la section 1.2.1 Bloc Ouput3D, nous avons parlé de la target string, c’est la fonction OpenViewer de l’interface Diva qui utilise les éléments de cette Variable. Cette dernière y est analysée pour en extraire les choix que l’utilisateur a faits dans le bloc output3D (sauf le choix de l’outil). CR 2007 - 298 5 2. Interfaçage de Simdis 2.1 Description générale Pour interfacer Simdis avec Diva, comme la Figure 4 l’illustre, nous avons utilisé le protocole DSC créé par « Naval Research Laboratory » (NRL) qui est le groupe développant Simdis. Ils ont aussi créé une interface, appelée DSC Server, pour utiliser ce protocole. Nous utilisons DSC Server, mais une version modifiée pour nos besoins. Donc, cette interface est utilisée pour communiquer avec Simdis via un réseau local ce qui nous permet de faire une simulation temps réel. L’ajout d’une classe, nous a permis d’enregistrer les activités de cette interface pour permettre la simulation par fichier. Il a fallu se conformer à la structure de fichier utilisée par Simdis (.asi) pour être compatible avec l’outil. Matlab/ Diva Simulink Interface DSC Server Réseau local Viewer 3D: Simdis Fichier : Structure ASI Figure 4 - Représentation générale de l'interfaçage de Simdis 2.2 Interface DSC Server L’interface DSC utilise une connexion TCP et une connexion UDP. Le TCP sert à gérer la connexion et par la suite le UDP est utilisé pour envoyer rapidement la création et la mise à jour des entités. 2.2.1 Modification de l’interface DSC Server Des modifications à l’interface ont été apportées pour combler deux besoins. Il fallait lors d’une simulation en temps réel attendre que Simdis soit complètement chargé et connecté au serveur (Diva). Aussi, nous devions enregistrer dans un fichier la création et la mise à jour des entités faites par Diva pour la simulation par fichier. 2.2.2 Fonction waitClientsConnection L’implantation de la fonction waitClientsConnection permet d’attendre la connexion d’un nombre de clients pour un temps limite désiré. Donc, grâce à cette fonction nous attendons, pendant un certain de temps, que Simdis soit connecté avant 6 CR 2007 - 298 de continuer la simulation. Voir la fonction waitClientConnection du fichier DSCServer.cpp pour plus de détail. 2.2.3 Classe DSC2ASILogger L’implantation de cette classe a été basée sur la classe DCSFileLogger développée par NRL. Cette dernière est dérivée de DCSLogger. Nous avons ajouté des fonctions pour être en mesure de convertir correctement la structure DSC utilisée par DSC Server dans la structure ASI: structure de fichier compatible avec Simdis. Il a fallu être très prudent, car certaines données, qui sont utilisées par les deux structures, sont définies de façons différentes. Par exemple, la couleur était définie comme étant RRGGBBAA dans la structure DSC, mais dans la structure ASI, elle était AABBGGRR. 2.3 Implantation dans Diva 2.3.1 Temps réel et fichier L’implantation d’une simulation en temps réel et par fichier est très étroite. Comme l’illustre la Figure 5, l’interface DSC Server utilise la classe DSC2ASILogger. Donc, l’interface DSC comprend la classe nécessaire à la génération d’une simulation dans un fichier. Alors, dans la Figure 5, quand la fonction OpenViewer est appelée la target string, contenant les choix de l’utilisateur, est analysée pour pour mettre certaines variables booléennes à vrai. Ensuite, un serveur est créé et le choix de l’utilisateur d’enregistrer la simulation ou non, variable boolLog, est envoyé au serveur via la fonction start. Si l’utilisateur a choisi une simulation temps réel seulement et non temps réel depuis un autre ordinateur (real-time simulation on remote), la fonction shellExecute ouvre Simdis selon certaines options. Ces options permettent à Simdis d’ouvrir en mode client (DC) et de se connecter sur l’ordinateur local (127.0.0.1). Enfin, notre fonction ajoutée (waitclientconnection) attend la connexion de Simdis soit celle partie avec shellExecute ou celle que l’utilisateur ouvre pour jouer la simulation depuis un autre ordinateur (real-time simulation on remote). CR 2007 - 298 7 Figure 5 - Diagramme de séquence de l'interface Diva de Simdis Dans UpdateEntity, si l’utilisateur a choisi de créer un seekerCone pour cette entité, nous créons un BeamHeader avec des données par défaut. Le BeamID utilise l’ID (numéro d’identification) de l’entité dont il est associé, mais incrémenté par 100 000 000. De cette façon, nous supposons qu’il n’y aura pas plus que 100 000 000 entités créées lors d’une simulation. Lorsque le beam est créé, nous faisons une mise à jour du beam grâce à un BeamData qui utilise la position angulaire (psi, phi, thêta) de l’entité avec lequel il est associé. Finalement, la fonction idle est utilisée lorsque, pour un temps donné, toutes les entités ont été mise à jour. Elle permet d’accepter de nouvelles connexions et aussi de déterminer la fréquence à laquelle nous envoyons les mises à jour des entités. Finalement, dans closeViewer, si l’utilisateur a choisi seulement une simulation par fichier, Simdis sera ouvert avec comme argument le fichier créé lors de la simulation et ainsi l’utilisateur pourra jouer la simulation 8 CR 2007 - 298 2.3.2 SeekerCone L’implantation des seekerCone ne s’est pas fait comme étant une partie articulée d’une entité. Quand l’utilisateur choisit cette option dans le bloc ouput3D, il doit indiquer pour quelles entités il veut des seekerCones. Par la suite, on tient des vecteurs de booléen pour savoir quelles entités possèdent un seekerCone. Les données utilisées pour créer ce dernier sont fixes. De plus, le seekerCone suit complètement les mouvements de l’entité qui lui est associée : la mise à jour du seekerCone se fait à partir de la position angulaire de l’entité associée. Voici les variables utilisées et leurs valeurs : Tableau 2 - Variables utilisées pour l'implantation des Seeker Cones Variables Valeurs Beam horizontale width 3º Beam verticale width 3º Beam lenght 1000 m azimuth pointing direction Variable psi de l’entité associée elevation pointing direction Variable thêta de l’entité associée Aussi, le numéro d’identification utilisé pour créer un seekerCone est celui de l’entité incrémentée par 100 000 000, mais il faut faire attention, car nous supposons qu’il n’y aura pas plus que 100 000 000 entités créées lors d’une simulation. S’il y en a plus, il y aura une confusion dans les numéros. CR 2007 - 298 9 3. Interfaçage de XPlane 3.1 Description générale La Figure 6 montre comment XPlane et Diva échangent les données via l’interface/protocole RTSP. Cette interface est utilisée pour la simulation en temps réel. Elle est implantée dans l’interface Diva et aussi dans un plugin créé pour communiquer avec XPlane. Pour la simulation par fichier, une structure de fichier a été établie. Ainsi, Diva crée un fichier suivant cette structure et le plugin lit ce fichier pour communiquer les données à XPlane. Matlab/ Simulink Réseau local Interface RTSP Viewer 3D: Plugin DLL XPlane Interface RTSP Fichier Diva Figure 6 - Représentation générale de l'interfaçage de XPlane 3.2 Interface RTSP Cette interface a été créée dans le but de faire de la simulation sur plusieurs ordinateurs, mais nous l’utilisons ici seulement pour faire l’échange de données entre Diva et XPlane. Normalement le RTSP est constitué d’un contrôleur et de fédérations, mais ici nous avons seulement deux fédérations : Diva et XPlane. De plus, l’utilisation que nous en faisons est plutôt simple: déclarer nos messages dans un fichier mdf, générer nos fichiers C++ avec le programme translator.exe et utiliser nos messages dans l’interface. 3.2.1 Fonctionnement RTSP utilise des adresses multi destinataires pour envoyer des données ou des messages. Pour chaque structure de données ou messages déclarés, le protocole y associe une adresse multi destinataire. Donc, pour échanger toutes les données, il faut que Diva et XPlane soient connectés à toutes les adresses multi destinataires utilisées. L’interface RTSP fait tout ce travail pour nous. Voir la documentation de RTSP à la section 12.5 des références pour plus de détails sur l’interface. 10 CR 2007 - 298 3.2.2 Fichier mdf RTSP échange des données ou messages via des structures prédéfinies déclarées dans un fichier mdf. Ce fichier permet de choisir une adresse multidestinataire et un port par défaut. Chaque structure (messages) est associée avec une adresse et un port qui sont une incrémentation de l’adresse et port par défaut. Aussi, on retrouve la liste des fédérations utilisées, ici c’est XPlane et Diva, et pour chacun d’eux la liste des messages à laquelle elles sont inscrites : qu’elles doivent recevoir et envoyer. Voir le fichier Xplane.mdf pour plus de détails. 3.2.3 Programme translator.exe Une fois le fichier mdf complété, nous utilisons le programme « translator.exe » (ou le script translate.bat) pour générer automatiquement les classes C++ nécessaires à l’utilisation des messages que nous désirons envoyer entre Diva et XPlane. Grâce à ce programme, tout le côté réseau est caché, cela permet une utilisation simple et rapide. Mais d’un autre côté si plus tard nous voulons modifier les structures utilisées, il faut régénérer nos classes et les ajouter de nouveau à notre projet. Donc, grâce au fichier mdf, le programme crée les fichiers C++ suivant automatiquement : XPlanePluginRcv.h, XPlanePluginSend.h, DIVAXPlaneRcv.h, DIVAXPlaneSend.h, _MsgData.cpp. Les fichiers XPlanePluginRcv.h et XPlanePluginSend.h définissent les structures que le plugin de XPlane doit recevoir et envoyer. DIVAXPlaneRcv.h et DIVAXPlaneSend.h définissent la même chose, mais pour Diva. De plus, chaque structure à envoyer possède une fonction pour mettre les données sur le réseau. Finalement, chaque structure à recevoir comprend une fonction setCallback qui permet d’enregistrer une fonction appelée lors de la réception du message. 3.3 Implantation dans Diva Quand Diva démarre, la fonction openViewer traite les choix de l’utilisateur à partir de la target string. Elle analyse cette string et met des booléens à vrai ou faux. Donc, c’est ici que la simulation par fichier et/ou en temps réel commence. Remarquez que la simulation par fichier peut se faire durant une simulation en temps réel. La seule différence est que nous ne partirons pas l’outil de visualisation à la fin pour voir la simulation. 3.3.1 Simulation en temps réel Pour une simulation en temps réel, comme la Figure 7 montre, la fonction openViewer enregistre les fonctions à appeler lors de la réception de message et demande à XPlane s’il est ouvert et attend sa réponse, mais seulement pour un temps donné. CR 2007 - 298 11 Lors de la création d’une entité (createEntity), les données sont gardées dans un tableau pour les envoyer ultérieurement à partir de la fonction UpdateEntity. Ainsi, nous envoyons à XPlane toutes les entités à créer en une seule fois ce qui implique qu’il faut créer toutes les entités avant le premier appel de UpdateEntity. De cette façon, nous évitons la perte d’une partie de la simulation qui serait causée par le chargement d’un modèle. Comme mentionné précédemment, lors du premier appel de UpdateEntity, les modèles sont envoyés à XPlane et nous attendons une réponse. Par la suite, si toutes les entités ont été mises à jour pour un temps données, les positions sont envoyées sans attendre de réponse pour améliorer la vitesse de la simulation. Figure 7 - Diagramme de séquence d’une simulation en temps réel de l’interface Diva de XPlane Notez que chaque message envoyé et reçu sont des objets distincts. J’ai fait abstraction de l’instanciation de ces objets dans la Figure 7: tous les appels sont faits comme étant des fonctions de RTSP, mais en réalité chaque message possède sa propre fonction send ou setCallback. 12 CR 2007 - 298 3.3.2 Fichier Dans une simulation par fichier toute la simulation est enregistrée dans un fichier créé par Diva et nommé dans le code « XPlaneSimulation.txt ». La structure suivie est décrite dans la section 3.6. L’outil est démarré à la fin pour voir la simulation. Notez que même si une simulation en temps réel se déroule une simulation par fichier est possible, mais l’outil de visualisation ne sera pas démarré à la fin. Donc, dans la fonction openViewer, si l’utilisateur n’a pas choisi une simulation en temps réel, nous enregistrons un « 1 » dans le fichier pour indiquer au plugin lors de son ouverture qu’il doit charger la simulation contenue dans le fichier. Par la suite, la création et les mises à jour des entités sont enregistrées. À la fin, dans closeViewer, si nous ne sommes pas dans le mode temps réel, nous créons un second fichier selon cet emplacement mit dans le code C++ : C:\Documents and Settings\All Users\Application Data\ XPlaneSimulation.txt Ce fichier contient l’emplacement du fichier de la simulation. C’est à partir de ce fichier que le plugin pourra savoir où se trouve le fichier contentant toute la simulation. Finalement, XPlane est ouvert grâce à la fonction shellExecute et la variable d’environnement XPLANE. Figure 8 - Diagramme de séquence d’une simulation par fichier de l’interface Diva de XPlane 3.3.3 Variable d’environnement XPLANE Nous utilisons une variable d’environnement pour être indépendants des versions futures de XPlane vu que le path de l’exécutable change souvent. Cette variable est utilisée pour partir XPlane suite à une simulation par fichier. Voici un exemple pour la version 8.40 : XPLANE = C:\Program Files\X-Plane 8.40\X-Plane 840.exe CR 2007 - 298 13 Notez que XPLANE est en MAJUSCULE et qu’un redémarrage de l’ordinateur est possible pour que cette variable prenne effet. 3.4 Plugin API L’interface plugin permet de modifier le comportement de XPlane et d’y ajouter de nouvelles fonctionnalités comme la compatibilité avec Diva. 3.4.1 Dataref Les dataref sont les données utilisées par XPlane. On y retrouve en autre la position en X, Y, Z et les angles psi, phi, thêta. Les données sont représentées sous forme d’arborescence comme : « sim/flightmodel/position/theta ». Pour les utiliser, nous appelons la fonction XPLMFindDataRef du plugin API une fois pour emmagasiner son emplacement en mémoire dans une variable de type XPLMDataRef. Par la suite, nous pouvons lire/écrire ces données en utilisant les fonctions XPLMSetData/XPLMGetData appropriées. Une liste exhaustive de tous les dataref existe sur le site du plugin API (voir la section Références). 3.4.2 Avion de l’utilisateur et des multijoueurs Dans XPlane 8.40, il y a une différence entre l’avion de l’utilisateur et les autres avions (multi joueurs). Alors, l’arborescence des datarefs utilisées est différente pour l’utilisateur et les multijoueurs. Aussi, certaines fonctions sont conçues seulement pour les avions multijoueurs (même s’il semble fonctionner avec l’avion de l’utilisateur) et souvent pour être en mesure de les utiliser il faut avoir le contrôle des avions grâce à la fonction XPLMAcquirePlanes. 3.5 Implantation du plugin Un plugin, implantant l’interface RTSP et la structure de fichier établie a été créé à partir d’un plugin API. Grâce à ce plugin, XPlane est compatible avec des simulations en temps réel et par fichier faite à partir de Diva. De plus, l’utilisateur peut enregistrer dans la mémoire une simulation en temps réel pour la rejouer et la sauvegarder dans un fichier. Aussi, il peut ouvrir un fichier d’une simulation conçue par lui-même ou précédemment sauvegardée. Lors de l’affichage d’une simulation par fichier ou d’une simulation en temps réel enregistrée dans la mémoire l’utilisateur peu recommencer et pauser cette simulation. 3.5.1 Démarrage et arrêt du plugin 14 CR 2007 - 298 La Figure 9 explique le fonctionnement du plugin lorsque XPlane est démarré et fermé. Lors de l’ouverture de XPlane, les fonctions XPluginStart et XPluginEnable sont appelées. Pour la fermeture ce sont les fonctions XPluginDisable et XPluginStop. Dans XPluginStart, nous recherchons les dataref pour la position (X, Y, Z, psi, phi, thêta) des entités, enregistrons des fonctions qui devront êtres appelées par XPlane et créons un menu pour interagir avec l’utilisateur. Dans XPluginEnable, nous créons la connexion RTSP, enregistrons les fonctions pour la réception des messages et démarrons la connexion pour la simulation temps réel ou lisons le fichier de simulation si XPlane avait été démarré par Diva. Pour la lecture du fichier de simulation, le plugin ouvre le fichier situé dans : C:\Documents and Settings\All Users\Application Data\ XPlaneSimulation.txt et lit le contenu indiquant l’emplacement du fichier de simulation. De plus, le fichier de simulation sera lu seulement si la première ligne contient le caractère « 1 » indiquant que ce fichier provient d’une simulation faite par Diva et qu’il n’a jamais été lu. À la fermeture du plugin, nous arrêtons notre connexion RTSP relâchons les avions multijoueur dont nous avons pris contrôles afin de modifier leur trajectoire. CR 2007 - 298 15 Figure 9 - Diagramme de séquence du démarrage et arrêt du plugin de XPlane 3.5.2 Simulation en temps réel La Figure 10 illustre le processus lors d’une simulation en temps réel. Lorsque la fonction startNetwork est appelée, soit au démarrage du plugin ou par l’utilisateur, nous prenons le contrôle des avions afin que XPlane ne modifie pas leur trajectoire de façon automatique, et demandons à XPlane d’appeler la fonction MyReceiveMsgCallback à chaque « frame » 16 CR 2007 - 298 Figure 10 - Diagramme de séquence d’une simulation en temps réel du plugin de XPlane La fonction MyReceiveMsgCallback sert à recevoir les messages envoyés par Diva grâce à PollRcv. Donc, dépendant du message reçu, une fonction, enregistrée au démarrage du plugin, sera appelée pour traiter ce message. CR 2007 - 298 17 Lors de la réception des modèles, la fonction Model_Callback est appelée. Dans un premier temps, elle vérifie grâce à la fonction Check3DModel les modèles envoyés s’ils contiennent un chemin valide vers un fichier-modèle de XPlane. Ensuite, si certains modèles ne sont pas trouvés, on appelle find3DModelPath qui fait la recherche des noms de modèles (« shape ») reçus. En réalité, cette fonction fait une recherche dans le fichier « model.txt » qui contient une association entre un nom, shape, et le chemin complet vers un fichier modèle de XPlane. Si certains modèles ne sont toujours pas trouvés, alors add3DModelPathToModelFile ouvre une fenêtre pour chaque modèle et demande à l’utilisateur d’ouvrir un fichier-modèle de XPlane pour l’associer au nom de modèle reçu. Cette nouvelle association est enregistrée dans le fichier model.txt. Après la vérification de tous les modèles des entités, nous les chargeons et nous désactivons la physique grâce à XPLMDisableAIForPlane pour éviter l’effet de la gravité. Lors de la réception des mises à jour de la position des entités, la position des entités est mises à jours par les fonctions XPLMSetData sur chaque variable : X, Y, Z, psi, phi, thêta. De plus, si l’utilisateur voulait enregistrer la simulation en temps réel, ces positions sont insérées dans un vecteur pour utilisation ultérieure. Le temps utilisé, emmagasiné dans un vecteur, est le temps de la réception du message. À la fin de la simulation en temps réel, si l’utilisateur l’a enregistrée, la fonction controlSimWidget est appelée. Cette fonction affiche un panneau permettant de contrôler la simulation. Finalement, lorsque la fonction stopNetwork est appelée, cela fait arrêter l’appel de la fonction MyReceiveMsgCallback. Notez que chaque message envoyé et reçu sont des objets distincts. J’ai fait abstraction de l’instanciation de ces objets dans la Figure 10: tous les appels sont faits comme étant des fonctions de RTSP mais en réalité chaque message possède sa propre fonction send ou setCallback. 3.5.3 Simulation par fichier La fonction readFile est appelée à l’ouverture du plugin lors d’une simulation par fichier créée par Diva ou bien lorsque que l’utilisateur ouvre un fichier de simulation à partir du menu. Donc, cette fonction arrête la simulation en temps réel. Elle vérifie les modèles 3D et les charge comme décrit dans la section 3.5.2. Ensuite une fonction insère les données de temps et positions dans des vecteurs. Finalement, le fichier est fermé et la fonction controlSimWidget est appelée pour dessiner le panneau de contrôle de la simulation. 18 CR 2007 - 298 Figure 11 - Diagramme de séquence d’une simulation par fichier du plugin de XPlane 3.5.4 Affichage d’une simulation La Figure 12 représente le processus lors du déroulement d’une simulation en temps réel enregistrée en mémoire ou d’un fichier ouvert par l’utilisateur. Lorsque controlSimWidget est appelée le panneau est dessiné et la fonction controlSimHandler est enregistrée grâce à XPAddWidgetCallback pour que XPlane appel cette fonction lors d’interactions avec le panneau. Donc, la fonction controlSimHandler enregistrée reçoit les interactions de l’utilisateur. Ainsi, si l’utilisateur clique sur le bouton « start/restart », nous demandons à XPlane, grâce à XPLMSetFlightLoopCallbackInterval, d’appeler la fonction MyPlayingPositionCallback à chaque frame ce qui fera jouer la simulation. Pour « pause/unpause », nous demandons à XPlane de recommencer à appeler MyPlayingPositionCallback ou d’arrêter de l’appeler selon un booléen indiquant si la simulation est déjà en mode pause ou non. Le bouton « cancel » arrête la simulation CR 2007 - 298 19 complètement, vide les vecteurs de positions et de temps de leur contenu et enlève le panneau de contrôle. 20 CR 2007 - 298 Figure 12 - Diagramme de séquence de la lecture d’une simulation du plugin de XPlane CR 2007 - 298 21 La fonction MyPlayingPositionCallback met à jour la position des entités selon le temps dans le vecteur de temps et du temps courant de XPlane (reçu grâce à la fonction XPLMGetElapsedTime). Donc, le temps de XPlane est comparé avec celui du vecteur et tant que le temps du vecteur est plus petit ou égal, nous mettons à jour la position des entités grâce à XPLMSetData et au vecteur de position. Lorsque le temps du vecteur est plus grand, nous retournons -1 indiquant à XPlane de rappeler la fonction à la prochaine frame. De plus, nous utilisons une variable globale pour être en mesure d’itérer dans les vecteurs. 3.5.5 Représentation des données dans la mémoire du vecteur de position et de temps Les vecteurs de position et de temps contiennent les données suite à la lecture d’un fichier ou à l’enregistrement d’une simulation. En réalité, le vecteur de position est un vecteur de map STL entre l’ID d’une entité et un vecteur comprenant la position de cette entité. De plus, chaque index du vecteur de position correspond à un temps du même index dans le vecteur de temps. La Figure 13 illustre les vecteurs en question. Time vector Time1 Time2 Time3 Time4 Time5 Time6 Time7 Time8 Time9 … association Position vector 0 1 2 3 4 5 6 7 8 … Pointer … maps Entity 3 Positions vectors Entity 1 Positions X Y Z Psi Phi Theta … X Y Z Psi Phi Theta Figure 13 - Représentation des données dans la mémoire du vecteur de position et de temps 22 CR 2007 - 298 3.5.6 Association des shapes avec les modèles 3D de XPlane Nous utilisons le fichier model.txt créé dans le dossier système de XPlane pour faciliter l’utilisation des noms de fichiers de modèles 3D (fichier modèle) de XPlane dans le bloc Ouput3D. Donc, au lieu d’écrire le chemin complet du fichier, l’utilisateur peut écrire le nom qu’il désire. Si ce nom est contenu dans le fichier model.txt alors le fichier modèle devrait être chargé correctement. Par contre, s’il ne trouve pas le nom, il demandera à l’utilisateur un fichier modèle à associer avec ce nom et sauvegardera la nouvelle association dans le fichier model.txt. La structure du fichier est simple : un nom (ou shape), une tabulation et le nom d’un fichier modèle de XPlane, avec le chemin à partir du dossier système de XPlane. Le Tableau 3 montre des associations faites pour tous les modèles de XPlane 8.40. Tableau 3 - Exemple d’un fichier model.txt, modèle de XPlane 8.40 Fuji Aircraft\Airships\Fuji Blimp\Fuji.acf Hindenburg Aircraft\Airships\Hindenburg\Hindenburg.acf skyship600x Aircraft\Airships\Skyship600X\skyship600x.acf Austins Airliner Aircraft\Austin's Designs\Austins Airliner.acf Austins Flying Car-2-seat Aircraft\Austin's Designs\Austins Flying Car-2-seat.acf Austins Hi Efficiency-2-seat Aircraft\Austin's Designs\Austins Hi Efficiency-2seat.acf Austins Hi Efficiency-4-seat Aircraft\Austin's Designs\Austins Hi Efficiency-4seat.acf Austins Personal Supersonic Aircraft\Austin's Designs\Austins Personal Supersonic.acf Austins Personal VTOL Aircraft\Austin's Designs\Austins Personal VTOL.acf Blown Flap Space Shuttle Aircraft\Austin's Designs\Blown Flap Space Shuttle.acf Death-Trap Aircraft\Austin's Designs\Death-Trap.acf Demented Loner Aircraft\Austin's Designs\Demented Loner.acf Hybrid Pusher Aircraft\Austin's Designs\Hybrid Pusher.acf Mega-Hyper-Sonic Aircraft\Austin's Designs\Mega-Hyper-Sonic.acf V-44 Twin Osprey Aircraft\Austin's Designs\V-44 Twin Osprey.acf F-4 Aircraft\Fighters\F-4 Phantom\F-4.acf FA-22 Aircraft\Fighters\FA-22 Raptor\FA-22.acf Cessna 172SP Aircraft\General Aviation\Cessna 172SP\Cessna 172SP.acf King Air B200 Aircraft\General Aviation\King Air B200\King Air B200.acf Piper Malibu Aircraft\General Aviation\Piper PA-46-310P\Piper Malibu.acf S-H Cirrus Aircraft\Gliders\S-H Cirrus\S-H Cirrus.acf B-52G NASA Aircraft\Heavy Metal\B-52G NASA\B-52G NASA.acf United-Air Aircraft\Heavy Metal\B747-400 United\United-Air.acf Speed-Bird Aircraft\Heavy Metal\B777-200 British Airways\Speed-Bird.acf KC-10 Aircraft\Heavy Metal\KC-10\KC-10.acf Jetranger Aircraft\Helicopters\Bell 206\Jetranger.acf BELL47 Aircraft\Helicopters\Bell 47\BELL47.acf Robinson R22 Beta Aircraft\Helicopters\Robinson R22 Beta\Robinson R22 Beta.acf S-61 Aircraft\Helicopters\S-61\Sea King.acf Sea King Aircraft\Helicopters\Sea King\Sea King.acf MarsJet Mars Aircraft\Planes\MarsJet\MarsJet.acf MarsRocket Aircraft\Mars Planes\MarsRocket\MarsRocket.acf Northrop B-2 Spirit Aircraft\Mega-Planes!\Northrop B-2 Spirit\Northrop B-2 Spirit.acf B-1B Lancer Aircraft\Mega-Planes!\Rockwell B-1B Lancer\B-1B Lancer.acf SR-71 Aircraft\Mega-Planes!\SR-71 Blackbird-D21a\SR-71.ACF PT60RC Aircraft\Radio Control\PT_60\PT60RC.acf Raptor 30 V2 Aircraft\Radio Control\Raptor 30\Raptor 30 V2.acf Japanese Aircraft\Anime Science Fiction\Japanese Anime\Japanese Anime.acf CL415v8 Aircraft\Seaplanes\Bombardier Canadair CL-415\CL415v8.acf orbiter Aircraft\Space Ships\Space Shuttle\orbiter.acf CR 2007 - 298 23 BA6093 Aircraft\VTOL\Bell 609\BA6093.acf F-35b Aircraft\VTOL\F-35 JSF\F-35b.acf AV8B Aircraft\VTOL\Royal Navy Sea Harrier\AV8B.acf V-22 Osprey Aircraft\VTOL\V-22 Osprey\V-22 Osprey.acf X-15 Aircraft\X-Planes\X-15\X-15.ACF X-30 Aerospace Plane Aircraft\X-Planes\X-30 NASP\X-30 Aerospace Plane.acf F-4 Phantom Aircraft\Fighters\F-4 Phantom\F-4.acf MIG-29(USSR) Aircraft\Austin's Designs\Austins Airliner.acf N.B. Il est important que les associations soient séparées par une tabulation et qu’on retrouve une nouvelle ligne vide à la fin du fichier. 3.6 Structure de fichier de simulation Le Tableau 4 montre la structure de fichier utilisée pour créer ou sauvegarde une simulation dans un fichier. Nous utilisons le tag <Shape> et <Position>. Shape est suivie de l’ID de l’entité et du nom du modèle. Position est suivie par : l’ID de l’entité, le temps, X, Y, Z, psi, phi et thêta. Le système de coordonnées utilisé est Z Sud, X Est, Y Haut et les angles sont en degré. De plus, les données sont séparées par des espaces blancs seulement et le nom du modèle peut être un nom de fichier-modèle de XPlane incluant le chemin à partir du dossier d’installation de XPlane. Tableau 4 - Exemple de structure de fichier pour une simulation avec XPlane 0 <Shape> 0 Aircraft\Austin's Designs\Austins Airliner.acf <Shape> 1 Ship <Shape> 2 ASRAAM <Shape> 3 ASRAAM <Shape> 4 ASRAAM <Shape> 5 ASRAAM <Position> 0 0 -4000 50 5000 45 0 0 <Position> 1 0 0 0 0 0 0 0 <Position> 2 0 0 0 0 0 0 0 <Position> 3 0 0 0 0 0 0 0 <Position> 4 0 0 0 0 0 0 0 <Position> 5 0 0 0 0 0 0 0 <Position> 0 0.005 -3999 50 4999 45 0 0 <Position> 1 0.005 0 0 0 0 0 0 <Position> 2 0.005 0 0 0 -144.303 0 3.0222 <Position> 3 0.005 0 0 0 0 0 0 <Position> 4 0.005 0 0 0 0 0 0 <Position> 5 0.005 0 0 0 0 0 0 <Position> 0 0.01 -3998 50 4998 45 1.16954e-005 0 <Position> 1 0.01 0 0 0 0 0 0 <Position> 2 0.01 -2.97038 0.268647 4.13423 -144.303 7.02853e-006 3.02248 <Position> 3 0.01 0 0 0 0 0 0 <Position> 4 0.01 0 0 0 0 0 0 <Position> 5 0.01 0 0 0 0 0 0 24 CR 2007 - 298 4. Interfaçage de Mak Stealth 4.1 Description générale Comme la Figure 14 le démontre, nous utilisons l’interface VR-Link pour effectuer notre simulation en temps réel avec Mak Stealth via le protocole DIS. De plus, pour faire une simulation par fichier nous utilisons l’interface Data Logger. Matlab/ Simulink Diva VRLink Mak Stealth Protocole DIS Data Logger Réseau local Fichier Figure 14 - Représentation générale de l'interfaçage de Mak Stealth 4.2 Interface VR-Link Cette interface a été développée par les créateurs de Mak Stealth dans le but de faciliter l’interfaçage des programmes avec le protocole DIS et HLA. Cette interface comprend des fonctions pour créer des entités et les mettre à jour tout en enveloppant l’utilisation du protocole. 4.3 Interface Data Logger Cette interface peut être utilisée pour créer un fichier de simulation et le faire jouer. Il peut aussi enregistrer dans un fichier une simulation utilisant le protocole DIS et HLA sur un réseau. 4.4 Compatibilité & licences Une chose importante lors de l’utilisation d’interface créée par Mak est que plusieurs versions existent ce qui apporte des problèmes de compatibilité entre interfaces. Donc, lors de leur utilisation, il est important de vérifier la documentation ou de contacter leur support technique à ce sujet. Autre problème des produits Mak est l’utilisation des licences. Seulement un programme à la fois peut utiliser une licence. Donc, seulement une personne à la fois pourra utiliser Mak Stealth pour voir une simulation si seulement une licence est achetée. CR 2007 - 298 25 4.4.1 Versions utilisées Présentement, nous utilisons VR-Link 3.9.3 et Data Logger 3.11.5 pour interfacer Mak Stealth. Cette version de Data Logger doit utiliser VR-Link 3.9.3 d’après la documentation. Notre problème est que nous possédons seulement une licence pour 3.7.1. Selon le support technique de Mak, la licence de 3.7.1 ne devrait pas fonctionner pour 3.9.3, mais nous ne l’avons pas testé. Donc, il faut soit acheter une nouvelle licence pour VR-Link 3.9.3 ou bien acheter une ancienne version du Data Logger compatible avec VR-Link 3.7.1. Une troisième solution serait de ne pas utiliser le Data Logger. 4.5 Implantation dans Diva Au moment de l’écriture de ce document, le code implanté pour interfacer Mak Stealth n’a pu être testé dû à des problèmes de licence. 4.5.1 Simulation en temps réel et par fichier L’implantation de l’interface Data Logger utilisée est celle pour enregistrer du trafic sur un réseau. L’approche pour simplement créer un fichier et y insérer les données n’a pas été implantée, car il faut avoir accès aux paquets UDP. Ces paquets existent lors de la création d’une entité avec l’interface VR-Link mais aucune fonction ne semble exister pour y avoir accès. Par contre, si nous utilisons VR-Link pour créer nous-mêmes nos paquets nous pourrions essayer cette approche. Pour lire un fichier, nous démarrons le programme Data Logger. Une seconde approche serait d’implanter dans Diva les fonctions et le GUI de l’interface Data Logger pour lire un fichier, ce qui semble inutile. Donc, la Figure 15 montre l’implantation de Diva non testée, mais compilable. Dans openviewer les choix de l’utilisateur sont analysés grâce à la target string. Peut importe que l’utilisateur ait choisi de faire une simulation en temps réel ou par fichier, nous créons un « exercice » (DtExerciseConn ::gConn) car il est nécessaire pour enregistrer la simulation dans un fichier. Alors, cette connexion est créée sur le port 3000 à l’adresse 127.0.01. Si l’utilisateur choisit de faire une simulation par fichier, nous créons un Dtlogger, créons le fichier « MakStealthSim.lgr » et, grâce à la fonction record, demandons à l’interface DtLogger d’enregistrer la simulation dans le fichier créé. Dans CreateEntity, nous créons une nouvelle entité, accédons à son état, et modifions son nom. Ensuite, nous insérons cette nouvelle entité dans un vecteur pour permettre sa modification ultérieurement. Dans UpdateEntity, nous allons chercher l’entité créée dans le vecteur, accédons à son état, modifions sa position (et orientation). Ensuite, la fonction tick de 26 CR 2007 - 298 l’interface DtEntityPublisher vérifie les modifications effectuées et envoie à l’outil les données nécessaires. La fonction tick de l’interface DtLogger permet d’enregistrer le trafic réseau. Il est donc nécessaire d’envoyer les données des entités sur le réseau avant de les enregistrer. Notez que c’est seulement lors des appels des fonctions tick que les données sont envoyées et enregistrées du réseau. Aussi, il faudra peut-être appeler tick pour chaque entité dans le vecteur. Il serait possible qu’il faille attendre que toutes les entités soient mises à jour pour un temps donné avant d’appeler tick pour chaque entité. Il faudra tester ces possibilités lorsqu’une licence sera valide. Dans destroyEntity, nous effaçons du vecteur l’entité pour l’enlever de la simulation. Finalement, closeviewer efface toutes les entités créées dans le vecteur et l’exercice. De plus, si l’utilisateur a choisi une simulation par fichier, la version DIS de Mak Stealth et le programme Data Logger sont démarrés via la fonction shellExecute. Data Logger ouvre le fichier est envoie les données du fichier à l’adresse 127.0.0.1. Donc, Mak Stealth DIS devrait se connecter à 127.0.0.1 lors de son ouverture. Aussi, vérifier s’il faut ouvrir Data Logger avant Mak Stealth DIS. Figure 15 - Diagramme de séquence d’une simulation pour l’interface Diva de Mak Stealth CR 2007 - 298 27 5. Interfaçage de Microsoft flight simulator 2004 L’interfaçage de FS2004 n’a pas été commencé faute d’interface comprenant nos besoins et de technologies dépréciées. 5.1 FSUIPC Cette interface permet de mettre à jour seulement un avion, car les données utilisées pour contrôler les autres avions sont en mode de lecture seulement. Cette lacune est plutôt due à Microsoft flight simulator qu’à l’interface en temps que tel. Cette interface aurait été intéressante vu qu’une seconde interface appelée WideFS permettait l’utilisation de FSUIPC à travers un réseau. 5.2 API multiplayer Microsoft avait sorti cette interface pour permettre de manipuler les avions multijoueurs, mais maintenant il n’en supporte plus l’utilisation. De plus, pour utiliser cette interface, il faut utiliser la technologie DirectPlay qui elle aussi est dépréciée et en plus Microsoft a enlevé toute documentation sur son site. Par contre, il faut mentionner que d’après certains documents sur internet, plusieurs personnes ont réussi à utiliser cette interface, en autre, un plugin permettant la visualisation d’une simulation HLA a été créé (voir la section Références). 5.2.1 FSVPI Cette interface utilise l’interface multiplayer pour permettre le contrôle de plusieurs avions tout en enveloppant la technologie DirectPlay. Deux problèmes : cette interface semble être conçue seulement pour Borland Together et il serait impossible de seulement mettre à jour la position des avions sans l’effet de la physique. Un email a été envoyé au développeur lui demandant une confirmation de ces problèmes, mais aucune réponse n’a été reçue. 28 CR 2007 - 298 6. Améliorations possibles 6.1 Simdis 6.1.1 Interface Diva L’interface Diva lors d’une simulation temps réel attend un certain temps (fonction idle) après la mise à jour des positions des entités. Ce temps pourrait être variable et suivre l’intervalle de temps (time step) de la simulation. Dans ce cas, il faudra vérifier si toute la simulation se déroule et s’affiche bien en utilisant deux ordinateurs. Avec un ordinateur, la simulation se déroulera sûrement trop rapidement. Dans ce cas, il faudrait mettre une borne inférieure comme intervalle de temps. Aussi, cette borne inférieure sera probablement variable en fonction des ressources de la machine. 6.1.2 SeekerCone L’implantation du seekerCone utilise des valeurs par défaut. L’interface Diva et le bloc ouput3D pourraient être modifiés pour permettre à l’utilisateur de modifier une seule fois les dimensions du seekerCone. Pour une modification dynamique du seekerCone, il faudrait l’implanter comme une partie articulée (voir la section 7.3). 6.1.3 Plugin API L’utilisation du plugin API développé par les créateurs de Simdis pourrait être utile à plusieurs niveaux. Nous pourrions mettre de côté l’interface DSC et utiliser le plugin API. Comme dans le cas de XPlane, nous pourrions créer notre propre protocole ou bien utiliser un standard comme DIS. Ce plugin pourrait permettre de garder la simulation en mémoire pour que Simdis puisse l’a rejoué à la fin d’une simulation temps réel. Aussi, il serait pratique d’automatiser l’utilisation des vues ou des fenêtres de vues (viewport) de Simdis, créer de nouvelles vues, etc. CR 2007 - 298 29 6.2 XPlane 6.2.1 Protocole L’interface Diva implante le protocole RTSP pour communiquer avec le plugin. Nous pourrions aussi utiliser le protocole DIS pour effectuer la simulation. Dans ce cas, il faudrait trouver des classes permettant l’interfaçage avec DIS. Aussi, sur plusieurs forums, certaines personnes mentionnaient avoir commencé un plugin pour rendre XPlane compatible avec le protocole DIS. Il faudrait vérifier pour obtenir et tester ce plugin (voir la section Références pour des liens vers des forums). Aussi, la fonction (ou callback) permettant de recevoir des messages de Diva est appelée à chaque frame de XPlane. Je crois que de cette façon, le nombre de frames par seconde est diminué ce qui affecte la qualité du graphique. Une façon de corriger cela serait d’utiliser un thread pour recevoir les messages et lors de la réception du message utiliser la fonction XPLMSetFlightLoopCallback pour que XPlane appelle la bonne fonction. Il ne faudra surtout pas oublier d’utiliser des mutex pour éviter la corruption des données. 6.2.2 Plugin de l’interface Diva (DIVAxplaneplugin.xpl) Le plugin pourrait être amélioré de plusieurs façons. Premièrement, modifier le code pour implanter plus de classes au lieu d’avoir toutes les fonctions au même endroit. Par exemple, la gestion des vecteurs de positions et de temps pourrait être enveloppée dans une classe. Deuxièmement, ajouter un meilleur contrôle sur la lecture d’une simulation pour permettre le saut à un endroit dans la simulation, de modifier la vitesse de déroulement; de choisir la latitude et longitude où la simulation se déroule, etc. Troisièmement, lors de l’enregistrement d’une simulation en temps réel, le temps enregistré est celui de la réception du message. Nous pourrions modifier cela pour enregistrer le temps de la simulation selon Diva/Simulink. Dans ce cas, il faudra modifier les classes utilisées par le protocole RTSP pour ajouter le temps comme donnée à envoyer (voir section 3.2.2 et 3.2.3). Quatrièmement, créer un panneau de contrôle, pour la simulation en temps réel afin de faciliter l’enregistrement en mémoire. Il faudrait aussi tester l’utilisation répétée de cet enregistrement. Cinquièmement, la gestion de la mémoire, lors de l’enregistrement d’une simulation temps réel ou de la lecture du fichier, est seulement effectuée par la saisie d’erreur de la classe vecteur de la STL. Dans ce cas, il est possible que les vecteurs utilisés encombrent toute la mémoire et que la simulation ne se fasse pas 30 CR 2007 - 298 correctement. Donc, il faudrait instaurer un moyen de contrôler ce phénomène. Il faudrait peut-être lire seulement des parties d’un fichier. Ou bien lors d’enregistrements, de sauvegarder tout ça dans un fichier avant de continuer. Il est primordial de vérifier l’efficacité pour ne pas nuire à la simulation. Sixièmement, le fichier model.txt (voir section 3.5.6) peut seulement être modifié à la main. L’ajout d’une fonctionnalité dans le plugin pour le modifier et éviter des erreurs humaines serait intéressante. Septièmement, lors de la simulation par fichier, Diva met dans un fichier spécifique le chemin d’un autre fichier qui lui contient la simulation. Après quelques tests, j’ai remarqué que lorsque nous partons XPlane avec Diva, le dossier courant (working directory) semble être modifié pour celui où nous créons le fichier de simulation. Donc, dans le plugin, au lieu d’ouvrir le fichier et lire le chemin du fichier de simulation, nous pourrions essayer d’ouvrir directement le fichier comme si nous étions dans le dossier courant. Finalement, nous pourrions aussi ajouter des fonctionnalités pour mieux contrôler la caméra : créer des vues prédéfinies, faire comme le plug-in DynamicCamera, mais changer les noms par ceux de la simulation et enlever les avions indisponibles. Aussi, une meilleure interaction avec l’utilisateur de l’état du plugin (mode lecture, mode temps réel activé, mode pause, mode enregistrement, etc.) et des erreurs serait plus agréable. Noter que des tests ont été effectués sur XPlane 8.05 et 8.40 dans un laboratoire avec Matlab 2006. Toutes les fonctionnalités semblent être opérationnelles. Si des avions sont manquants dans une simulation, vérifiez dans les options de XPlane le nombre d’avions que XPlane dessine. 6.2.3 Fichier Objet comme modèle XPlane permet d’ajouter une infinité de graphiques sous forme d’un fichier objet (.OBJ). Si nous utilisons ce format de fichier comme modèle 3D à nos entités, nous pourrions ajouter une quantité illimitée d’entités. Aussi, je crois que la conversion de modèle serait plus facile. Le seul problème serait l’implantation de cette idée dans le plugin : il faudra utiliser des fonctions et dessiner à chaque frame l’entité (à vérifier). De plus, le plugin DynamicCamera (XCamera) ne fonctionnera plus, donc il faudra faire notre propre gestion de caméra. 6.3 Mak Stealth 6.3.1 Plugin API Il faut souligner qu’un plugin API est disponible pour Mak Stealth. La version de l’API venant avec la version 6.0 de Mak Stealth permet, d’après le support CR 2007 - 298 31 technique, d’ajouter des entités à partir de fichiers et de leur associer des vues de caméra pour permettre de les suivre. 32 CR 2007 - 298 7. Développements futurs 7.1 Autres outils de visualisation 7.1.1 Microsoft Flight Simulator X Cette version de flight simulator sort en octobre 2006. Probablement que Microsoft sortira par la suite des interfaces, comme l’interface multiplayer, pour modifier le comportement du jeu. Une chose à regarder est si FSUIPC permet de contrôler plusieurs avions. L’auteur tient cette interface à jour ce qui nous demanderait moins de supports techniques pour des versions prochaines de Flight Simulator. 7.1.2 Flight Gear Cet outil est « open Source », alors le code source est accessible pour modification ce qui permettrait sûrement de l’interfacer avec Diva. Noter qu’un bon début pour l’interfaçage serait de regarder les blocs Aerosim qui permettent de contrôler un avion via Simulink. De plus, je crois que seulement 3 avions peuvent être vus en même temps avec cet outil lorsqu’on contrôle les avions de l’ordinateur. 7.1.3 Virtual Environment Concordia Cet outil ne possède pas d’interface graphique comme les autres. C’est une interface C++ permettant de tracer des objets grâce au Direct3D. Des fonctions semblent être utilisables pour faire une gestion de la caméra. De plus, il faut installer le DirectX SDK de Microsoft pour l’utiliser. Donc, vu qu’il faut programmer presque toutes les fonctionnalités que nous retrouvons dans les autres outils, cette interface n’est pas très intéressante 7.2 Bloc Ouput3D 7.3 Diva extended : Implantation de parties articulées 7.3.1 Gestion des parties articulées dans l’interface Diva L’interface Diva supporte l’utilisation de partie attachées (attached part), qui est probablement la même chose que des parties articulées, via la fonction : CR 2007 - 298 33 « UpdateEntityExtraData(TEntity &Entity, long& DataID, double &Data) ». Cette fonction doit être appelée pour mettre à jour les données sur les parties articulées avant d’appeler la fonction UpdateEntity qui elle fait le vrai traitement des données sur les parties articulées c’est-à-dire envoie réellement les mises à jour à l’outil de visualisation. Les arguments de la fonction sont comme suit : Entity qui est juste un « handler » vers l’entité auquel est associé la partie articulée à traiter; DataID est le numéro indiquant la donnée de la partie articulée qui doit être modifiée et finalement Data est la nouvelle valeur. Donc, pour ajouter une partie articulée, il faut utiliser le DataID défini comme étant la partie articulée que nous voulons. Le Tableau donne les définitions données aux DataID selon l’interface Diva. Il est à noter que nous pouvons sûrement modifier et ajouter de nouvelles définitions. Tableau 5 - Partie du fichier Diva.h définissant les DataIDs pour l’implantation des parties articulées // // // // // // // // // ---------------------------------------------VARIABLE SERIES ENTITY ASSOCIATION 100 aircraft 200 missile 300 submarine 500 generic radar and ground parts 11100 generic AMRAAM parts 33300 environment ---------------------------------------------- const const const const const const const const const const const const const 34 long long long long long long long long long long long long long DATA_ID_Rudder_Azim DATA_ID_LeftAileron_Elev DATA_ID_RightAileron_Elev DATA_ID_LeftElevon_Elev DATA_ID_RightElevon_Elev DATA_ID_LeftFlap_Elev DATA_ID_RightFlap_Elev DATA_ID_LeftCanard_Elev DATA_ID_RightCanard_Elev DATA_ID_LandingGear_Extent DATA_ID_SwingWing DATA_ID_Throttle DATA_ID_AfterBurner_On = = = = = = = = = = = = = 101; 102; 103; 104; 105; 106; 107; 108; 109; 110; 111; 112; 113; const long DATA_ID_Periscope_Extent = 301; const const const const const const const const const const const const const const long long long long long long long long long long long long long long DATA_ID_Turret_Azim DATA_ID_TurretGun_Elev DATA_ID_Launcher_Azim DATA_ID_Launcher_Elev DATA_ID_Radar_Azim DATA_ID_Radar_Elev DATA_ID_Radar_Beamwidth DATA_ID_Turret2_Azim DATA_ID_TurretGun2_Elev DATA_ID_Launcher2_Azim DATA_ID_Launcher2_Elev DATA_ID_Radar2_Azim DATA_ID_Radar2_Elev DATA_ID_Radar2_Beamwidth = = = = = = = = = = = = = = 501; 502; 503; 504; 505; 506; 507; // 3db to 3db 521; 522; 523; 524; 525; 526; 527; // 3db to 3db const const const const const long long long long long DATA_ID_Box_Azim DATA_ID_Box_Elev DATA_ID_Box_MinRange DATA_ID_Box_MaxRange DATA_ID_Box_MinRangeRate = = = = = 11111; 11112; 11113; 11114; 11115; CR 2007 - 298 const const const const const const const const const const const const const const const const long long long long long long long long long long long long long long long long DATA_ID_Box_MaxRangeRate DATA_ID_Box_Width DATA_ID_Box_Height DATA_ID_Box_Colour DATA_ID_Box2_Azim DATA_ID_Box2_Elev DATA_ID_Box2_MinRange DATA_ID_Box2_MaxRange DATA_ID_Box2_MinRangeRate DATA_ID_Box2_MaxRangeRate DATA_ID_Box2_Width DATA_ID_Box2_Height DATA_ID_Box2_Colour DATA_ID_DatalinkCue_Updated DATA_ID_TrackFile_RangeRate DATA_ID_TrackFile_Colour = = = = = = = = = = = = = = = = 11116; 11117; 11118; 11119; 11121; 11122; 11123; 11124; 11125; 11126; 11127; 11128; 11129; 11131; 11141; 11142; const const const const long long long long DATA_ID_Smoke DATA_ID_CloudBaseAltitude_Z DATA_ID_CloudCeilingAltitude_Z DATA_ID_MeteorologicalVisibility = = = = 33301; 33302; 33303; 33304; // Standard colours const double DATA_CL_Black const double DATA_CL_Blue … = 0; = 1; 7.3.2 Première implantation possible Comme la s-function créée par les développeurs de Diva, n’implante pas la fonction updateEntityExtraData, nous pourrions les contacter pour vérifier s’ils ont une nouvelle version utilisant des parties articulées. 7.3.3 Deuxième implantation possible Pour utiliser l’implantation des parties articulées déjà instaurée dans l’interface Diva, il faudra ajouter la fonction updateEntityExtraData dans la s-function du bloc Ouput3D en s’assurant qu’elle est utilisée avant UpdateEntity. Un port pourrait être ajouté au bloc Ouput3D pour les données reliées à cette fonction. Une matrice 3XN pourrait être utilisée comme suit : [EntityID DataID Data]. La dimension N est nécessaire pour traiter plusieurs « Extra Data » à un temps donné c’est-à-dire qu’il faut appeler la fonction UpdateEntityExtraData N fois dans la s-function. Grâce à cette implantation, nous pouvons facilement ajouter de nouvelles parties articulées en ajoutant des DataID. De plus, nous pouvons ajouter des DataID spécifiques pour chaque outil et ainsi être en mesure d’utiliser certaines particularités qu’il possède. Le seul problème est que nous ne pouvons pas spécifier un nom de modèle de façon dynamique pour les parties articulées. CR 2007 - 298 35 7.3.4 Troisième implantation possible Une autre solution serait d’utiliser les fonctions : CreateEntity(char* Name, char* Shape, double time, TEntity* Entity) UpdateEntity(TEntity Entity, Seconds Time, Mars::TDynamicState* state). Dans « Name » ou « Shape » on pourrait retrouver un mot clé spécifiant de quelle partie articulée il s’agit et avec quelle entité (un entier) elle est associée. De cette façon, nous pourrions lui associer un modèle et un nom. Par la suite, nous pourrions mettre à jour la partie articulée en utilisant TDynamicState, nous aurions 12 ou 24 variables utilisables si la variable membre Mars::TMatrix peut être utilisé pour emmagasiner des données. Avec cette approche, nous pouvons avoir un ID, un nom, et un modèle pour la partie articulée, mais nous n’avons que 12 ou 24 variables pour mettre à jour l’état de la partie articulée (ce qui est probablement suffisant). 7.3.5 Quatrième implantation possible La dernière solution serait de créer notre propre fonction avec les variables que nous voulons utiliser. Nous pourrions nous baser sur les variables utilisées par SIMDIS, Mak Stealth et d’autres outils de visualisation supportant déjà les parties articulées. 7.3.6 Problème : Uniformisation des variables Finalement, le plus gros problème sera d’uniformiser les variables à utiliser, car les données exigées dépendent de l’outil. Par exemple, SIMDIS traite un beam comme une entité attachée à une autre entité et il a besoin de deux ID, la hauteur, longueur, l’azimut et l’élévation du beam. XPlane lui ne supporte pas les parties articulées, donc il faudra fournir soit une position pour la partie articulée ou bien l’offset par rapport à la position de l’entité à laquelle elle est attachée. Mak Stealth lui différencie les parties articulées et les parties attachées. Les parties attachée semblent être des entités, mais les parties articulées semblent devoir être définies dans le fichier modèle utilisé (à vérifier). 36 CR 2007 - 298 8. Autres 8.1 XPlane 8.50 Cette nouvelle version de XPlane, en bêta 7 au moment d’écrire ce document, permet de faire feu (missile, mitraillette) sur d’autres avions dans le jeu. Cette option est accessible via un bouton pour faire feu, donc cela est difficilement implantable dans l’interface Diva vu que normalement nous devons mettre à jour nous-mêmes les positions des missiles et mitraillette (parties articulées). De plus, ces parties articulées sont définies dans le fichier modèle de XPlane. Une autre option intéressante dans cette version est la possibilité de faire des équipes. Quatre équipes peuvent coexister. Finalement, ces options ne peuvent être utilisées, car le plugin API n’a pas encore de fonctions exploitant ces caractéristiques. Il faudra attendre la prochaine version du plugin API. 8.2 Aerosim La librairie Aerosim contient des blocs Simulink pour contrôler un avion dans Microsoft Flight Simulator et Flight Gear. Le développeur semble avoir arrêté le support de cette librairie. De plus, ces blocs sont fonctionnels seulement avec Flight Simulator 2000/2002 et Flight Gear 0.9.8. Comme les projets Visual C++ 6.0 sont disponibles avec l’installation d’Aerosim, certaines personnes ont pu modifier le DLL utilisé par les s-function et ainsi rendre compatible ces blocs avec FS2004. D’après un forum, seulement une modification d’un type utilisé (passer de int a DWORD) permettrait d’utiliser FS2004 (voir la section Références pour des liens utiles). Notez que ces blocs utilisent l’interface FSUIPC et WideFS et qu’il faut acheter une licence pour les utiliser avec FS2004. Pour des versions précédentes de Flight Simulator, il est possible de se procurer des versions gratuites (voir la section Références). 8.3 Bug Simplay Lors de tests effectués sur des modèles Simulink, un bug dans l’outil Simplay est ressorti. Lors de la destruction d’une entité durant une simulation en temps réel, la gestion de la caméra devient complètement déréglée et il n’est plus possible de visionner correctement la simulation. Soulignons que ce phénomène se répète lors de la création d’entité durant le déroulement d’une simulation. CR 2007 - 298 37 8.4 Interface Diva de Viewpoint Le projet Visual C++ impliquant l’interfaçage avec Diva est disponible dans les dossiers de DSTO. Donc, si certaines améliorations doivent être apportées, il est possible de les effectuer. 8.5 Interface Diva du protocole DIS Une interface Diva a déjà été conçue pour permettre l’utilisation du protocole DIS (probablement une vieille version). Un essai rapide a échoué à cause de l’erreur suivante : « $DIVAPath\bin\DIVAagsDIS.dll - DLL Symbol Error. ». Donc, si elle pouvait fonctionner, nous aurions une interface qui pourrait être utilisée avec tous les outils compatibles DIS. Notez qu’il serait possible que DSTO possède une version plus récente et fonctionnelle. 38 CR 2007 - 298 9. Caractéristiques des outils de visualisation 9.1 Caractéristiques vérifiées Tableau 5 - Certaines caractéristiques vérifiées d'outils de visualisation Caractéristique Intégration Viewer3D Blocs simulink Fichier de simulation Modèle 3D Map 2D Map 3D Afficher la position 1 HLA Créer un Vidéo Graphique oui oui Moyen oui oui et non non Beau DIVA oui TR oui fichier et 2TR Lire sauvegarder oui Coût 0$ RDDC 0$ U.S Naval 0$ DSTO SIMPLAY non oui oui oui non non SIMDIS non oui non oui oui non VIEWPOINT oui oui oui oui? non non oui fichier oui oui oui Très beau X-PLANE oui oui? oui oui non Plugin oui fichier et 2TR Plugin non oui Très beau 80-100$ MS FLIGHT SIMULATOR oui mais 1 avion seulement ? ? ? ? Plugin non non non ? Très beau 80-100$ MAK STEALTH oui ($) oui ? oui oui oui à tester oui-non oui et non non Très beau 4000$ 1 2 2 HLA = High level Architecture, TR = Temps réel, ? = pas vérifié Le Tableau 5 présente des caractéristiques que nous avons vérifiées. Blocs Simulink désigne le choix d’utiliser une librairie Simulink pour permettre un certain contrôle de l’outil à partir de Matlab. L’intégration de modèles 3D, map 2D et 3D réfère à la possibilité d’ajouter de nouveaux modèles graphiques et des terrains possédant des bâtiments et des données d’élévations, venant d’Internet ou d’autres formats de fichier. Notez que cette caractéristique n’est souvent pas une option de l’outil et qu’il faut souvent faire des manipulations pour la conversion de données. La caractéristique d’afficher la position permet à l’utilisateur de connaître l’emplacement de l’entité soit par latitude, longitude et élévation ou par X, Y, Z, psi, phi, thêta. HLA pour High Level Architecture est un protocole de communication pour des simulations distribuées comme DIS. Diva réfère à la compatibilité avec l’interface Diva. Les actions liées aux fichiers, lecture et sauvegarde, désignent la possibilité de lire un fichier contenant des données de simulation et aussi de les sauvegarder dans un fichier soit après une simulation en temps réel ou le chargement d’un fichier. Créer une vidéo est une option de l’outil pour enregistrer la simulation dans un format vidéo. Donc, en lisant le tableau, nous remarquons la compatibilité des différentes caractéristiques avec les outils mentionnés à gauche, mais quelques explications peuvent être utiles. Simplay permet seulement, à partir de l’interface Diva, d’une simulation en temps réel. Les graphiques sont les moins beaux de tous les outils vu qu’il est axé pour permettre l’affichage d’une simulation sur des ordinateurs possédant des ressources matérielles limitées. De plus, cet outil a été développé au centre de recherche RDDC ValCartier ce qui permet de modifier le code source facilement et un coût d’achat nul. Pour Simdis, l’intégration des modèles 3D peut se faire via le format de fichier du programme Designer's Workbench (.dwb) qui coûte relativement cher. Un autre outil semble CR 2007 - 298 39 être en mesure d’exporter les modèles en .dwb, il s’appelle Geo de la compagnie Carbon Graphic. D’autres outils sont mentionnés dans les références. Pour les maps 3D, un outil fourni avec Simdis, Terrain Creator, permet d’ajouter de nouveaux terrains à partir de données provenant de site Internet (voir la section Références). Aussi, sur le site d’U.S Naval, beaucoup de modèles et maps sont déjà prêts à l’utilisation. Simdis permet de sauvegarder des simulations à partir de fichiers précédemment chargés, mais pas à partir d’une simulation en temps réel, car il ne garde qu’un historique d’environ dix secondes (d’après la documentation, nous pouvons enlever cette restriction, mais après un test cela ne fonctionnait pas). Pour y parvenir, il faut utiliser en parallèle l’outil ASILogger. Finalement, Simdis a été donné à RDDC Valcartier par l’U.S Naval. Le Tableau 6 montre les formats de fichier que Viewpoint peut lire. Une petite manipulation mentionnée dans l’aide de l’outil doit être faite pour créer un fichier modèleindex avant d’utiliser le modèle 3D. Un fichier index doit aussi être créé pour l’utilisation des maps 2D. Les formats de fichier compatible pour les maps 2D (texture) sont : SGI, RGBA, BMP ou TGA. Pour les maps 3D (voir la section Références 12.4), le programme Huge Terrain Creator permet la création, mais peut-être pas la conversion, de terrains dans le format ChunkedLOD utilisé par Viewpoint. Aussi, une librairie nommée Chunked LOD Terrain Renderer permet la conversion du format de fichier .bt à .chu (format de ChunkedLOD). Un plugin, osgChunkLod, a été développé pour le logiciel OpenSceneGraph, mais nous ne l’avons pas testé. De plus, il faut encore créer un fichier index. Finalement, cet outil permet seulement une simulation par fichier avec Diva et il a été donné à RDDC Valcartier par DSTO. Tableau 6 - Format de modèle de fichier compatible avec Viewpoint Format de fichier Extension du fichier Microsoft Flight Simulator 98 (2000, and 2002 not yet supported) .MDL 3DStudio .3DS 3DSMAX ASCII EXPORT Version 2.00 .ASE Multigen OpenFlight .FLT Open Inventor .IV VRML Version 1.0 .WRL AutoCAD .DXF DirectX .X Wavefront .OBJ Geomview .OFF PLIB's native ascii format .SSG AC3D Editor format .AC Pour l’intégration de modèles 3D dans XPlane, il faut être compatible avec le format de fichier .acf. Un outil de XPlane, Plane-Maker permet de créer de nouveaux modèles d’avions mais pas de convertir des fichiers dans le format .acf. Si les fichiers OBJ sont utilisés (voir la section 6.2.3), des outils permettent la conversion dans ce format de plusieurs autres formats de fichiers 3D. Pour la conversion en acf, il semble difficile de trouver des outils, mais AirPlanePDQ peut lire et écrire des fichiers dans ce format. Pour les maps 3D, il faut utiliser des outils créant des « scenery ». Des plugins et script (voir la section Références 12.3) permettent d’utiliser AC3D et Blender pour convertir et créer des « scenery ». 40 CR 2007 - 298 L’interface Diva et la sauvegarde des données d’une simulation sont compatibles via le plugin que nous avons créé (voir section 3.5). Aussi, via un autre plugin, XPlane est compatible HLA Microsoft Flight Simulator n’a pas été très évalué. Il est compatible avec HLA via un plugin et les blocs Simulink d’Aerosim permettent le contrôle d’un avion seulement. Pour ce qui est de Mak Stealth, il existe des blocs pour l’utiliser via Simulink, mais ils viennent séparément. Cet outil a été conçu pour être compatible avec HLA. L’intégration de modèles peut se faire grâce aux logiciels Nugraf et Biturn qui peuvent convertir beaucoup de formats de fichier en format MultiGen-Paradigm OpenFlight (FLT) utilisé par l’outil. Par la suite, il faut utiliser l’outil ModelMapper de Mak Stealth. Pour les maps 3D, Mak est compatible avec la liste du Tableau 7. L’interface Diva est codée, mais pas testée. Les options de fichier peuvent être réalisé via un programme, Data logger, qui doit être acheté séparément de Mak Stealth. Donc, nous ne pouvons pas lire et écrire des fichiers justes avec l’outil. Finalement, c’est un bon outil de visualisation, mais dispendieux. Tableau 7 - Format de fichier de map 3D compatible avec Mak Stealth OpenFlight (Windows only) Blueberry 3D (.rdb and .bdb) (You must have a Blueberry 3D license, which MÄK does not provide.) The UTM projection and the Lambert Conical Conformal projection in CTDB C4B and C7B databases MÄK terrain format (GDB) Digital terrain elevation data (DTED). 9.2 Gestion de la caméra Tableau 8 - Gestion de la caméra d'outils de visualisation Caractéristique Possibilité d'automatiser le changement des vues Capable de fixer sur un groupe Plusieurs fenêtres Plusieurs vues prédéfinies Créer de nouvelles vues Sauvegarder les vues SIMPLAY Facile non non 3 non non non SIMDIS Moyen Moyen difficile Moyen difficile (plugin) non oui 3 oui oui oui (script) non oui 2 oui oui à venir non non 3 oui non non oui non 12 oui oui oui (script) Viewer3D Facilité d'utilisation VIEWPOINT X-PLANE MAK STEALTH Facile moyen Le Tableau 8 énumére différentes caractéristiques recherchées dans les outils de visualisation. Notez qu’avec XPlane il faut utiliser le plugin DynamicCamera pour gérer la caméra sur plus qu’une entité (voir Figure 18). D’après ce tableau, Mak Stealth est le seul qui gère la caméra pour un groupe d’entités et il possède le plus de vues prédéfinies. Simdis et Viewpoint peuvent afficher plusieurs entités dans des fenêtres différentes (voir Figure 16 et Figure 17). Nous voyons aussi les outils qui peuvent laisser l’utilisateur créer et sauvegarder de nouvelles vues de la caméra. Finalement, 3 outils peuvent automatiser l’utilisation de la CR 2007 - 298 41 caméra. Pour Viewpoint, cette option n’est pas encore implantée, mais elle semble être la plus facile à utiliser. Pour Mak Stealth et Simdis, de la programmation est nécessaire ce qui n’est pas très rapide et pratique. Fenêtres Figure 16 - Outil de visualisation: Viewpoint Fenêtres (viewport) Figure 17 - Outil de visualisation: Simdis 42 CR 2007 - 298 Panneau du plugin XCamera pour la gestion de la camera Options du plugin Diva Panneau du plugin Diva pour la gestion de la simulation Figure 18 - Outil de visualisation: XPlane Liste prédéfinie des vues Figure 19 - Outil de visualisation: SimPlay CR 2007 - 298 43 Position de l’entité Logiciel Data Logger Figure 20 - Outil de visualisation: Mak Stealth 9.3 Autres caractéristiques Simdis permet le déroulement d’une simulation sous l’eau. La simulation sous l’eau et sur terre peut être vue en même temps avec du graphique représentant l’eau. Il possède aussi un outil pour calculer la distance entre deux entités. Un autre outil pour tracer des graphiques (voir Figure 21) et encode plusieurs autres (ASI Editor, ModelViewer , Imagery and Terrain Tool, Terrain Creator). Tous ces outils rendent l’utilisation du logiciel un peu complexe, mais certains permettent l’analyse de données de la simulation. XPlane n’est pas conçu pour la simulation, mais il possède un pluing API qui nous permet de modifier le comportement du logiciel à notre guise. Le plugin créé permet seulement un contrôle de base sur une simulation. Aussi, comme XPlane est un jeu, il est très lourd donc demande beaucoup de ressources. Finalement, il possède peu de modèles 3D (aucun missile et bateau). Mak Stealth comprend aussi un plugin API mais il est moins complet que celui de XPlane. Il permet la simulation HLA et DIS car il a été développé pour cela. Le support technique est très rapide. C’est un excellent logiciel, mais dispendieux. Simplay est très léger, il est peu demandant en ressources matérielles. Ce qui est pratique pour visionner une simulation sur un ordinateur peu puissant. Par contre, il ne possède pas beaucoup de fonctionnalités, mais comme il est développé au RDDC Valcartier nous pouvons implanter ce que nous voulons. 44 CR 2007 - 298 Viewpoint est très léger lui aussi, mais les graphiques sont nettement supérieurs à ceux de Simplay. Il possède une moins bonne gestion de la caméra que ce dernier, mais permet l’affichage de plusieurs fenêtres. Finalement, Viewpoint ne possède pas d’outils d’analyse comme Simdis. Figure 21 - Outil PlotXY de Simdis CR 2007 - 298 45 10. Conclusion Plusieurs outils de visualisation sont interfacés avec Diva pour permettre soit une simulation en temps réel, par fichier ou les deux. Simplay et Viewpoint avaient déjà été développés. Nous avons ajouté l’interfaçage de Simdis et XPlane. Seulement Mak Stealth reste à compléter et tester. De plus, grâce au plugin API, nous avons pu améliorer notre contrôle et les options possibles lors d’une simulation dans XPlane. Prochainement, Microsft Flight Simulator X et Flight Gear pourront probablement entrer dans la liste des interfaces Diva disponibles. Aussi, un survol des outils a permis d’évaluer leurs différentes caractéristiques et options. Finalement, une recherche d’outils de visualisation supplémentaires pourrait être effectuée. 46 CR 2007 - 298 11. Annexe 11.1 Bloc Ouput3D 11.1.1 Couches du bloc ouput3D Figure 22 - Bloc Output3D principal La Figure 22 illustre le bloc Output3D comme il se retrouve dans une librairie Simulink. Ce bloc possède un seul port d’entrée dans lequel passe toutes les données relatives aux entités durant la simulation. Figure 23 - Fenêtre du bloc Ouput3D (masque) affichant les options disponibles à l'utilisateur La fenêtre de la Figure 23 montre les options qu’un utilisateur peut modifier. Il peut choisir : d’activer le bloc, un outil de visualisation, les noms et modèles graphiques des entités du CR 2007 - 298 47 modèle Simulink. La Mars_Setup_String n’est pas utile à l’utilisateur. Il est à noter que d’autres options peuvent apparaître selon le choix de l’outil. Figure 24 - Couche interne du bloc Output3D La Figure 23 dévoile l’intérieur du bloc. La partie importante est le bloc le plus à droite qui est le bloc s-function implantant, en C++, les fonctions génériques de l’interface Diva. Le port d’entrée du haut permet de recevoir la position (X, Y, Z, psi, phi, thêta) des entités durant chaque intervalle de temps de la simulation. Celui du bas est un signal indiquant quelles entités sont actives. 48 CR 2007 - 298 Figure 25 - Fenêtre de la s-function du bloc Output3D La fenêtre de la Figure 25 montre le nom de la s-function pointant normalement sur un fichier contenant le code et les paramètres passés à cette s-function. Remarquez la variable Mars_Setup_String en paramètre, elle contient entre autres la target string qui elle contient les choix de l’utilisateur. 11.1.2 Code de la s-function de Diva Le Tableau 10 présente le code en C et/ou C++ de la s-function du bloc Output3D. Ce code a été développé par DSTO. Le Tableau 9 donne une brève description de certaines fonctions de la s-function. La Figure 26 montre le déroulement de base des fonctions. Finalement, la Figure 27 et la Figure 28 illustrent l’évolution complexe. Tableau 9 - Description de certaines fonctions de la s-function du bloc Output3D Fonctions mdlCheckParameters mdlStart mdlUpdate mdlTerminate CR 2007 - 298 Description Valide les données. Appelée n’importe quand lorsque les paramètres sont modifiés. Initialise la simulation lorsque l’utilisateur démarre la simulation. Reçois les données (positions) lors du déroulement de la simulation. Appelée à chaque intervalle de temps. Termine la simulation. Appelée lorsque la simulation est finie. 49 Figure 26 - Évolution de base des fonctions d'une s-function Tableau 10 - Code de la s-function du bloc Output3D 50 CR 2007 - 298 Figure 27 - Évolution complexe des fonctions d'une s-function (Partie 1) CR 2007 - 298 51 Figure 28 - Évolution complexe des fonctions d'une s-function (Partie 2) 52 CR 2007 - 298 11.1.3 Modification apportée Figure 29 - Fenêtre éditrice du masque du bloc Ouput3D montrant les modifications apportées La Figure 29 est la fenêtre pour modifier le masque (mask) (fenêtre où l’utilisateur fait ses choix) du bloc ouput3D. Cette fenêtre comporte toutes les modifications que nous avons apportées au masque. Le Tableau 11 énumère les paramètres ajoutés. De plus, le Tableau 12 montre le code ajouté dans la fenêtre du « dialog callback » pour tous les nouveaux paramètres et la variable viewerChoice (Choice of Viewer). Tableau 11 - Variables ajoutées au masque du bloc Output3D Descriptions vues par l’utilisateur (prompt) IP Adress Variables Target_String Real-Time Simulation RTS File Simulation (Only log if RTS is on) Log CR 2007 - 298 Descriptions détaillées Variable permettant de modifier l’adresse IP utilisée. Pour le moment elle n’est pas utilisée. Dans le cas de Simdis l’adresse pourrait servir à l’adresse du serveur. Dans Mak Stealth l’adresse de l’exercice. Permets de faire une simulation en temps réel. Pour Simdis ce choix effectue une simulation sur la même machine. Pour les autres cette option attend une connexion via un autre ordinateur Permets de faire une simulation dans un fichier et ensuite de partir l’outil et de la faire jouer. Si l’option de real-time est sélectionnée, l’outil ne sera pas parti à la fin, mais le fichier sera 53 Real-Time Simulation on Remote RTSRemote Activate SeekerCone SeekerCone Wich Entity need a SeekerCone? (Semicolon separated list of entity number, eg: 0;1;6 ) EntityIDSeekerCone généré. Permets de faire une simulation en temps réel. Utilisé seulement par Simdis. Cette option attend une connexion de l’outil via un autre ordinateur. Permets d’activer l’option pour afficher un seekerCone. Utilisé seulement par Simdis pour l’instant. Permet de choisir pour quelle entité nous voulons un seekerCone. Il faut une liste de chiffre séparé par des pointsvirgules. Les chiffres sont les numéros d’identification (ID) des entités. Ces ID peuvent être associés à l’ordre chronologique, commençant par 0, de la liste des noms ou shape. Tableau 12 - Code ajouté au dialog callback du masque du bloc Output3D Le code dans ce tableau permet d’appeler le script mstars_setup_string_scriptCustom.m pour qu’il modifie de façon dynamique le masque et aussi qu’il ajoute tous les choix de l’utilisateur à la variable Mars_Setup_String. La fonction get_param de Matlab permet de créer une variable dans le workspace dans le but de permettre au script d’accéder à la variable. Les ajouts sont la fonction set_param appellée deux fois pour modifier les paramètres du masque (mask parameters). Le premier appel détermine quels paramètres seront montrés dans le masque. Le second détermine quels paramètres seront accessibles pour modification par l’utilisateur. De plus, nous avons ajouté à la variable Mars_Setup_String, pour certains outils, la target string selon la notation « DivaTarg: ». Les choix de l’utilisateur sont ajoutés à la suite de cette notation et ils sont séparés par des « : ». La notation « DivaTarg: » est utilisée par la s-function pour trouver la target string et la passer à la fonction openViewer dans l’interface Diva. Consutez le fichier Script mstar_setup_string_scriptCustom.m modifié pour le bloc Ouput3D pour plus de détails. 11.1.3.1 Contraintes avec interface Diva Les ajouts effectués causent quelques inconvénients : les paramètres ajoutés au masque doivent toujours être dans un ordre prédéterminé; pour ajouter de nouveaux paramètres dans le masque, il faut modifier le script pour les afficher et aussi les ajouter à la variable Mars_Setup_String. De plus, ces contraintes sont étroitement liées à l’implantation C++ des interfaces Diva de chaque outil. Dans les interfaces Diva, l’analyse des paramètres se fait dans un ordre prédéterminé, l’ajout de nouveaux paramètres dans le masque demande l’ajout de code dans l’interface Diva. Donc, toutes ces contraintes pourraient être éliminées pour faciliter l’ajout de nouvelles fonctionnalités. 54 CR 2007 - 298 11.2 Debugger le plugin XPlane Pour débugger rapidement le plugin de XPlane quelques pratiques sont utiles. Premièrement dans Visual C++ ajouté comme débuggeur l’exécutable de XPlane et aussi comme DLL additionnel le fichier xpl situé dans le dossier Ressource\plugin du dossier d’installation de XPlane. Deuxièmement, utilisez le plugin Reload que vous pouvez trouver sur le site du Plugin API. Ce plugin permet de copier le nouveau fichier xpl compilé dans le dossier plugin de XPlane sans devoir redémarré XPlane. N’oubliez pas qu’à chaque compilation du plugin vous devez recopier le nouveau fichier xpl dans le dossier de XPlane. Créez un fichier .bat comprenant la commande copy pour copier rapidement le fichier xpl à l’endroit approprié. CR 2007 - 298 55 12. Références 12.1 DIVA Documentation « DISTRIBUTED VISUALISATION API » inclus avec l’installation. 12.2 Simdis Site Web (plugin API, maps et modèles 3D supplémentaire, etc) : https://simdis.nrl.navy.mil/ 12.2.1 Outils pour les modèles 3D et map 3D Geo (convertir modèle 3D en dwb) : http://www.carbongraphics.com/index.html Autres outils de conversion de modèle graphique: http://geolab.larc.nasa.gov/Alchemize/ http://www.math.iastate.edu/burkardt/g_src/ivread/ivread.html http://www.math.iastate.edu/burkardt/g_src/ivcon/ivcon.html http://www.okino.com/conv/conv.htm http://www.righthemisphere.com/products/dexp/ http://www.micromouse.ca/ http://www.povray.org/resources/links/3D_Programs/Conversion_Utilities/ Autres outils de création et édition de modèle 3D: http://www.carbongraphics.com/ http://www.multigen.com/ http://www.discreet.com/products/3dsmax/ http://www.caligari.com/ http://www.wings3d.com Données (geo-referenced Raster Data) pour maps 3D (à utiliser avec l’outil Terrain Creator) : Landsat imagery : http://glcf.umiacs.umd.edu/data/landsat CADRG files : http://geoengine.nima.mil/geospatial/SW_TOOLS/NIMAMUSE/webinter/rast_roam.html NED files : http://seamless.usgs.gov 12.3 XPlane Site Web : http://www.x-plane.com/ HLA: http://www.memention.com/hlaxp/ Autres (forum) : http://www.x-plane.org/ Dynamic Camera (plugin) : http://www.xpgoodwayteam.org/site_xpdynamiccamera/ Izicam (plugin) : http://www.izimif.com/iziplugs/x-plane/izicam.html Autres plugins : http://www.xpluginsdk.org/ 12.3.1 Plugin API Site Web : http://www.xsquawkbox.net/xpsdk/phpwiki/index.php 56 CR 2007 - 298 Liste des Dataref : http://www.xsquawkbox.net/xpsdk/docs/DataRefs.html 12.3.2 Outils pour les modèles 3D et map 3D Outils (entre autre convertir des modèles en OBJ et plugin AC3D) : http://scenery.x-plane.com/tools.php Autres outils: http://marginal.org.uk/x-planescenery/tools.html Scenery & Cockpit import/export scripts for Blender: http://forums.x-plane.org/index.php?autocom=dlmanager&do=viewfile&fid=4800 12.4 Viewpoint 12.4.1 Outils pour les modèles 3D et map 3D (ChunkedLOD) Home page: http://tulrich.com/geekstuff/chunklod.html LandView Terrain Viewer : http://web-services.gov/lvterrain/ Chunked LOD Terrain Renderer (librairie permettant la conversion de .bt en .chu): http://nebuladevice.cubik.org/documentation/nebula2/group__NCTerrain2.shtml Huge Terrain creator :http://www.garagegames.com/mg/snapshot/view.php?qid=1046 OpenScenGraph (OSG) : http://www.openscenegraph.org/ OSG ChunkedLOD plugin : http://www.vlad1.com/~vladimir/projects/osg/ Information supplémentaire : http://www.vterrain.org/LOD/Implementations/index.html AirPlanePDQ (lit et écrit des fichiers acf): http://www.davincitechnologies.com/AirplanePDQ.htm 12.5 Mak Stealth Site Web : http://www.mak.com 12.5.1 Outils pour les modèles 3D et map 3D NuGraf (Advanced 3D Rendering, Model Viewing & Data Translation Software for Microsoft Windows) : http://www.okino.com/nrs/nrs.htm http://www.idealogue.com.au/okinprod/filefmts.htm Biturn (converter of 3D files and Bitmaps) : http://mirex.mypage.sk/index.php?selected=0 12.6 RTSP Télécharger : http://www.ledin.com/downloads.htm Explication : http://www.ddj.com/184404611 Livre : “Simulation Enginerring” de Jim Ledin. CR 2007 - 298 57 12.7 Microsoft Flight Simulator HLA : http://www.permian.com.au/products/flight%5Fsim/ HLA : http://www.calisto.se/projects.htm Active Camera (plugin) : http://www.anticyclone.be/ 12.7.1 Multiplayer API Télécharger : http://www.fileshack.com/file.x/4225/Flight+Simulator+2004+SDKs Problème (forum) : http://forums.surclaro.com/ftopic1235.html&highlight Autres API pour FS2004 : http://www.microsoft.com/games/flightsimulator/fs2004_downloads_sdk.asp 12.8 FSUIPC & WideFS Site Web : http://www.schiratti.com/dowson.html Forum : http://forums.simflight.com/viewforum.php?f=54 Pour acheter : http://secure.simmarket.com/product_info.php?products_id=538 http://secure.simmarket.com/product_info.php?products_id=539 12.9 FSVPI Site Web: http://fsvpi.com 12.10 Aerosim Site Web: http://www.u-dynamics.com/aerosim/ Modification à apporter pour la compatibilité avec FS2004 (forum): http://forums.simflight.com/viewtopic.php?p=233471&sid=2e8743da6d12b64846d7aedc408e4468 58 CR 2007 - 298 Liste symboles/abrév./acronymes/sigles 2D 2 dimensions 3D 3 dimensions API Application Programming Interface DC Data Client DIS Distributed Interactive Simulation DLL Dynamic-link library DND Ministère de la Défense Nationale DSTO Defence Science and Technology Organisation of Australia FS2004 Flight Simulator 2004 FSUIPC Flight Simulator Universal Inter-Process Communication FSVPI Flight Simulator Virtual Pilot Interface HLA High Level Architecture ID Identification Number M&S Modélisation et simulation NRL Naval Research Laboratory RTSP Real-time Simulation Protocol SDK Software Development Kit STL Standard Template Library TCP Transmission Control Protocol UDP User Datagram Protocol CR 2007 - 298 59 Liste de distribution À l’interne Bibliothèque des documents (3 copies) Eric Dumais (Autorité scientifique, 1 copie) À l’externe Directeur - Gestion du savoir et de l'information (Recherche et développement) (1 CD avec version PDF) SANS CLASSIFICATION COTE DE SÉCURITÉ DE LA FORMULE (plus haut niveau du titre, du résumé ou des mots-clefs) FICHE DE CONTRÔLE DU DOCUMENT 2. COTE DE SÉCURITÉ 1. PROVENANCE (le nom et l’adresse) (y compris les notices d’avertissement, s’il y a lieu) R & D pour la Défense Canada – Valcartier 2459 boul. Pie-XI Nord Québec (Québec) G3J 1X5 CANADA 3. TITRE (Indiquer la cote de sécurité au moyen de l’abréviation (S, C, R ou U) mise entre parenthèses, immédiatement après le titre.) Interfaçage et évaluation d’outils de visualisations 3D (U) 4. AUTEURS (Nom de famille, prénom et initiales. Indiquer les grades militaires, ex.: Bleau, Maj. Louis E.) David Prevost 5. DATE DE PUBLICATION DU DOCUMENT (mois et année) Août 2006 6a. NOMBRE DE PAGES 6b. NOMBRE DE REFERENCES 67 10 7. DESCRIPTION DU DOCUMENT (La catégorie du document, par exemple rapport, note technique ou mémorandum. Indiquer les dates lorsque le rapport couvre une période définie.) Rapport de contrat 8. PARRAIN (le nom et l’adresse) NUMERICA TECHNOLOGIES INC. 3420 rue Lacoste Québec, QC G2E 4P8 Canada 9a. NUMÉRO DU PROJET OU DE LA SUBVENTION 9b. NUMÉRO DE CONTRAT (Spécifier si c’est un projet ou une subvention) W7701-053273/001/QCL 13ew02 10a. NUMÉRO DU DOCUMENT DE L’ORGANISME EXPÉDITEUR 10b. AUTRES NUMÉROS DU DOCUMENT RDDC Valcartier CR 2007 - 298 N/A 11. ACCÈS AU DOCUMENT (Toutes les restrictions concernant une diffusion plus ample du document, autres que celles inhérentes à la cote de sécurité.) Diffusion illimitée Diffusion limitée aux entrepreneurs des pays suivants (spécifier) Diffusion limitée aux entrepreneurs canadiens (avec une justification) Diffusion limitée aux organismes gouvernementaux (avec une justification) Diffusion limitée aux ministères de la Défense Autres 12. ANNONCE DU DOCUMENT (Toutes les restrictions à l’annonce bibliographique de ce document. Cela correspond, en principe, aux données d’accès au document (11). Lorsqu’une diffusion supplémentaire (à d’autres organismes que ceux précisés à la case 11) est possible, on pourra élargir le cercle de diffusion de l’annonce.) SANS CLASSIFICATION COTE DE LA SÉCURITÉ DE LA FORMULE (plus haut niveau du titre, du résumé ou des mots-clefs) dcd03f ver.(06-1999) SANS CLASSIFICATION COTE DE LA SÉCURITÉ DE LA FORMULE (plus haut niveau du titre, du résumé ou des mots-clefs) 13. SOMMAIRE (Un résumé clair et concis du document. Les renseignements peuvent aussi figurer ailleurs dans le document. Il est souhaitable que le sommaire des documents classifiés soit non classifié. Il faut inscrire au commencement de chaque paragraphe du sommaire la cote de sécurité applicable aux renseignements qui s’y trouvent, à moins que le document lui-même soit non classifié. Se servir des lettres suivantes: (S), (C), (R) ou (U). Il n’est pas nécessaire de fournir ici des sommaires dans les deux langues officielles à moins que le document soit bilingue.) Des interfaces ont été conçues entre Matlab/Simulink et des outils de visualisation 3D pour effectuer l’illustration en 3 dimensions d’une simulation de trajectoires d’objets calculée par un modèle Simulink. Deux outils, Simdis et XPlane, sont en mesure de montrer graphiquement une simulation selon deux modes soit en temps réel, pendant que Simulink calcule les données, ou en temps différé, après le calcul de toutes les données. La méthode choisie, le réseau local, pour transmettre les données en mode temps réel demande l’utilisation de deux ordinateurs soit un pour calculer la simulation et l’autre pour l’illustrer. Pour le mode temps différé, un fichier est créé comprenant les données calculées par Simulink. Par la suite, l’outil est démarré et lit ce fichier pour y effectuer la simulation graphiquement. Des améliorations à ces interfaces sont mentionnées. Aussi, une évaluation rapide de différents outils a été complétée ressortant des caractéristiques intéressantes. (U) 14. MOTS-CLÉS, DESCRIPTEURS OU RENSEIGNEMENTS SPÉCIAUX (Expressions ou mots significatifs du point de vue technique, qui caractérisent un document et peuvent aider à le cataloguer. Il faut choisir des termes qui n’exigent pas de cote de sécurité. Des renseignements tels que le modèle de l’équipement, la marque de fabrique, le nom de code du projet militaire, la situation géographique, peuvent servir de mots-clés. Si possible, on doit choisir des mots-clés d’un thésaurus, par exemple le “Thesaurus of Engineering and Scientific Terms (TESTS)”. Nommer ce thésaurus. Si l’on ne peut pas trouver de termes non classifiés, il faut indiquer la classification de chaque terme comme on le fait avec le titre.) Modélisation Simulation MATLAB Simulink SIMDIS X-Plane DIVA Real-time Simulation Protocol (RTSP) Mak Stealth Microsoft flight simulator 2004 Aerosim SANS CLASSIFICATION COTE DE SÉCURITÉ DE LA FORMULE (plus haut niveau du titre, du résumé ou des mots-clefs) dcd03f ver.(06-1999)