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)