#1 [↑][↓] 11-04-2012 13:58:29

GauWin
Membre
Inscription : 11-04-2012
RenommĂ©e :   

[FSX] Mise en place d'un simulateur de vol

Bonjour,

Dans le cadre de mon stage de seconde année de DUT informatique j’ai pour objectif de remplacer l’ancien support graphique d’un simulateur de vol, géré avant avec FlightGear par FlightSimulator pour des raisons de qualité graphique.

Mon problème est le suivant (en sachant que le langage de programmation utilisé est le C++) :

Les données anciennement récupérées par le simulateur étaient envoyés par un socket vers l’ordinateur qui faisait tourner FlightGear et celui-ci affichait grâce à deux rétroprojecteurs le monde extérieur du cockpit.
Le socket permettait de transmettre une Classe « FGNetFDM », celle-ci comprenait tous les paramètres de l’avion (longitude,lagitude,altitude,inclinaisons …). Cependant cette Classe était propre à FlightGear. De plus celui-ci possédait un système de réseau qui facilitait la transmission d'informations.

Comment pourrais-je faire pour mettre en place FSX ? J'ai cru comprendre que FSUIPC était indispensable mais pourquoi exactement ? Enfin est-il utile d'avoir WideFS pour transmettre les informations d'un ordinateur a un autre, ne peut-on pas avoir un autre système (mais surtout gratuit) ?

Si vous avez la moindre idée ou information pouvant m'aider je suis preneur, car je commence un peu à m'embrouiller dans cet immense monde qu'est l’aéronautique wacko



Merci beaucoup de votre aide,
RĂ©mi

Hors ligne

#2 [↑][↓] 11-04-2012 17:24:25

kbumbaz
Membre
Lieu : FR - LFMN
Inscription : 19-02-2010
RenommĂ©e :   

Re : [FSX] Mise en place d'un simulateur de vol

Salut,

Tu t'embarques dans un truc sympas !

Alors,

* FSUIPC & co:
FSUIPC est gratuit pour des fonctions light, pour etre utilisé en réseau il faut la licence FSUIPC & WideFS (36€ HT).

Tu as une autre solution qui est SimConnect, extraite du SDK de FSX. Ce n'est pas impossible à utiliser, mais sache que les 3/4 de la communauté de développeurs autour de FS utilisent FSUIPC,
=> DONC tu trouveras beaucoup plus de doc et d'aide pour FSUIPC et quand mĂŞme moins pour SimConnect.

Un autre point à prendre en compte, à mon avis, si tu est en DUT, je pense que tu n'as pas 10 ans pour faire cette interface mais quelques mois tout au plus, en ce sens, je te conseille FSUIPC car tu vas très vite pouvoir arriver à pondre du code fonctionnel, alors qu'avec SimConnect, ca risque de prendre plus de temps (mais ce n'est pas impossible, je le répete).

Doc FSUIPC : http://www.schiratti.com/files/dowson/FSUIPC_SDK.zip?timestamp=010309
Doc SimConnect : http://msdn.microsoft.com/en-us/library/cc526983.aspx

* Architecture software :
Pour bosser avec FSX, donc FSUIPC ou SimConnect, au lieu d'écrire dans ta socket vers FlightGear, il te suffira de faire appel aux API de l'interface choisie. C'est vraiment très facile.

Perso, je ne connais pas SimConnect, mais je connais très bien FSUIPC. Coté language C# et un peu de C++ (mais c'est vieux).

Voila pour débuter, si tu as d'autre questions n'hésites pas.


./LĂ©opold >>

5tro7dz * 4bn86d

Hors ligne

#3 [↑][↓] 12-04-2012 07:43:26

GauWin
Membre
Inscription : 11-04-2012
RenommĂ©e :   

Re : [FSX] Mise en place d'un simulateur de vol

Cette réponse illumine ma matinée, elle confirme bien ce que je pensais laugh
Merci beaucoup pour ces informations ! En effet j'ai cru comprend que FSUIPC & WideFS étaient la méthode la plus courante, mais surtout la plus simple.
Il ne me reste plus qu'a en parler a mes maitres de stage.

J'aurai sans doute encore quelques questions d'ici peu de temps alors désolé si j'essaie d'abuser de ta bonne foie e_Clown

Et merci encore ! wink

Hors ligne

#4 [↑][↓] 12-04-2012 08:13:51

kbumbaz
Membre
Lieu : FR - LFMN
Inscription : 19-02-2010
RenommĂ©e :   

Re : [FSX] Mise en place d'un simulateur de vol

Avec plaisir !

le DUT mes plus belles années d'étudiant (ca fais 10ans), Dieu que j'aimerai y retourner !

N'hésite pas a utiliser la fonction mail du forum.

bye bye

Dernière modification par kbumbaz (12-04-2012 08:22:57)


./LĂ©opold >>

5tro7dz * 4bn86d

Hors ligne

#5 [↑][↓] 12-04-2012 09:05:48

GauWin
Membre
Inscription : 11-04-2012
RenommĂ©e :   

Re : [FSX] Mise en place d'un simulateur de vol

Par contre connaitrais-tu des tutoriels sur WideFS.
Le seul vraiment complet que j'ai trouvé est : http://gerard.bernard.pagesperso-orange.fr/sbwidefsnoiretblanc.htm
Cependant il ne l'utilise pas pour envoyer les données vers FSX, mais pour utiliser un programme de vol (SquawkBox) sur un écran distinct.

De plus j'ai cru comprendre que certains problèmes de compatibilités existaient entre FSX et WideFS. Existent-ils toujours même avec les nouvelles versions de WideFS et FSUIPC ?

Hors ligne

#6 [↑][↓] 12-04-2012 09:13:41

kbumbaz
Membre
Lieu : FR - LFMN
Inscription : 19-02-2010
RenommĂ©e :   

Re : [FSX] Mise en place d'un simulateur de vol

Pour WideFS tu as le userguide dans le zip d'install.

"certains problèmes" J'ai jamais eu de soucis quand à placer mes applis sur le PC de FS (donc direct FSUIPC) ou sur un PC en réseau (donc FSUIPC via WideFS) non vraiment pas de soucis. Tu n'as meme pas a toucher ton code.

Par contre si ton réseau est à la rue, Là c'est un soucis !

Dernière modification par kbumbaz (12-04-2012 09:14:28)


./LĂ©opold >>

5tro7dz * 4bn86d

Hors ligne

#7 [↑][↓] 12-04-2012 09:51:40

GauWin
Membre
Inscription : 11-04-2012
RenommĂ©e :   

Re : [FSX] Mise en place d'un simulateur de vol

Je pense que le réseau tient le coup, mais bon je croiserai les doigts !

J'ai fais un premier bout de code même si rien n'est installé laugh
Je commence par un simple test ou je ne modifie que la latitude, longitude, altitude, roll, pitch et yaw.
Mais bon je me perd un peu dans la doc, en particulier pour les Offset mad2_gif

Hors ligne

#8 [↑][↓] 12-04-2012 12:06:15

GauWin
Membre
Inscription : 11-04-2012
RenommĂ©e :   

Re : [FSX] Mise en place d'un simulateur de vol

Petite information, peux-tu me dire si je me trompe:

                                     (Offset/Size)    Type
                //Longitude     (0568 / 8)        Double
                //Latitude        (0560 / 8)        Double
                //Altitude         (0570 / 8)        Int

                //Roll             (05E4 / 2)        Double
                //Yaw             (05E6 / 2)        Double
                //Pitch             (0578 / 4)        Double

Est-ce correct si je veux les modifier avec un "FSUIPC_Write()" ?

Je fais un test sur la mĂŞme machine ou se trouve FSX pour voir comment celui-ci se comporte.

Dernière modification par GauWin (12-04-2012 12:14:05)

Hors ligne

#9 [↑][↓] 12-04-2012 12:32:22

kbumbaz
Membre
Lieu : FR - LFMN
Inscription : 19-02-2010
RenommĂ©e :   

Re : [FSX] Mise en place d'un simulateur de vol

Salut,

> Pense bien à écrire 0x1234 (le 0x défini l'hexa), sinon tu vas écrire au mauvais endroit !

//Longitude     (0x0568 / 8)
//Latitude        (0x0560 / 8)
//Altitude         (0x0570 / 8)


Fais bien attention à la doc des Offsets de FSUIPC : la donnée brute est à factoriser souvent.
Par ex l'altitude c'est chaidé : tu as la valeur en mètres (pas en ft !) sur un long je crois (64bits) et si tu lis bien, tu as la partie entière dans les 32 1er bits et la partie décimale dans les 32 derniers bits. Du coup il faut faire un masque pour avoir les 2 valeurs séparées et bosser avec !

Pour le Pitch c'est bon !

Pour le roll et le yaw, tu les attaques en slew mode, regarde bien que c'est ce que tu veux !!!
C'est un mode un peu spécial pour te déplacer sur la scène ! >> Donc va voir au Bank en 0x057C

Info Bonux: Méfi toi de FSX qui est gourmand coté graphisme ! Je sais pas si vous avez des bêtes de courses dans votre bahu... mais FS9 fonctionne très bien, j'avais commencé mon simu sous FSX, je me tate à descendre sous FS9 !

Coté code ca donne en pseudo algo:

OBLIGATOIRE:
FSUIPC_Initialization()
FSUIPC_Open()

ENSUITE:
- pour lire :
     FSUIPC_Read()
     FSUIPC_Process()

- pour Ă©crire :
     FSUIPC_Write()
     FSUIPC_Process()

ENFIN
FSUIPC_Close()

Les données ne sont lues ou écrite qu'au moment du process! pas avant !

bye

Dernière modification par kbumbaz (12-04-2012 12:35:07)


./LĂ©opold >>

5tro7dz * 4bn86d

Hors ligne

#10 [↑][↓] 12-04-2012 12:52:15

GauWin
Membre
Inscription : 11-04-2012
RenommĂ©e :   

Re : [FSX] Mise en place d'un simulateur de vol

Merci pour ton aide, j'ai pas mal de question alors sad

Je n'ai jamais vu quelqu'un utiliser "FSUIPC_Initialization()" Ă  quoi sert il ?
Quel est le principe du slew mode ? Tu utiliserai quelle autre méthode ? Sachant que je peux envoyer mes variables en degré ou en radian.
Enfin comment fais tu pour gérer la partie entière et la partie décimale d'un type ?

Encore désolé d'abuser de toi et ta bonne foie et mille merci déjà pour ces précieuses aides que tu m'apportes laugh

Hors ligne

#11 [↑][↓] 12-04-2012 13:25:38

kbumbaz
Membre
Lieu : FR - LFMN
Inscription : 19-02-2010
RenommĂ©e :   

Re : [FSX] Mise en place d'un simulateur de vol

Salut,

Je n'ai jamais vu quelqu'un utiliser "FSUIPC_Initialization()" Ă  quoi sert il ?
Je ne sais pas, mais la doc en parle donc une init ne fais jamais de mal Ă  personne.

Quel est le principe du slew mode ?
https://www.google.com/search?sourceid=chrome&ie=UTF-8&q=slew+mode+fsx >> 1ere réponse !

Tu utiliserai quelle autre méthode ?
Pour faire quoi ? je ne comprend pas.

Sachant que je peux envoyer mes variables en degré ou en radian.
FSUIPC bosse uniquement en degres pour tout ce qui est cap (de memoire), mais rappel de toujours regarder la définition de ton offset ex:

- 0x0580 4 Heading, *360/(65536*65536) for degrees TRUE
tu dois donc jouer avec un long (4) et la valeur que tu vas lire est factorisée par *360/(65536*65536) (fonction si tu veux lire ou écrire)

- 0x0C50 2 NAV1 radial ( *360/65536 for degrees). NAV1 radial ( *360/65536 for degrees). Note that this is in degrees Magnetic for a VOR, but TRUE for an ILS LOC.
Variable est en read only (logique :) ), ta valeur arrive ( *360/65536 ) donc a toi de la recalculer selon cete formule : radiale_en_degres = (valeur_lue_dans_fs * 360 / 65536) un peu de maths donc :)

Enfin comment fais tu pour gérer la partie entière et la partie décimale d'un type ?

tu lis tes 32 1er bits et tu les stock dans un conteneur décimal,
tu lis tes 32 derniers bits et tu les stock dans un conteneur décimal puis:
- tu divises par 10 si c'est une valeur >=10
- tu divises par 100 si c'est une valeur >=100
- tu divises par 1000 si c'est une valeur >=1000
- tu divises par 10000 si c'est une valeur >=10000
...

puis tu ajoutes les deux. et voila

Conseil: Commence par lire des valeurs simple l'Ă©tat de l'inter de la batterie ou des volets !!!

Apres tu t'attaques a plus dur.

bye


./LĂ©opold >>

5tro7dz * 4bn86d

Hors ligne

#12 [↑][↓] 12-04-2012 14:08:24

GauWin
Membre
Inscription : 11-04-2012
RenommĂ©e :   

Re : [FSX] Mise en place d'un simulateur de vol

Ok merci pour toutes ces informations laugh
Je vais commencer petit ouai et je progresserai peu Ă  peu.
Par contre ou se trouve "FSUIPC_User.h" pour faire l'include ? Je ne le trouve nulle part ...

Et je n'ai pas pris la version payante, je dois faire sans apparemment ...

Dernière modification par GauWin (12-04-2012 14:15:23)

Hors ligne

#13 [↑][↓] 12-04-2012 14:22:53

kbumbaz
Membre
Lieu : FR - LFMN
Inscription : 19-02-2010
RenommĂ©e :   

Re : [FSX] Mise en place d'un simulateur de vol

Par contre ou se trouve "FSUIPC_User.h" pour faire l'include ? Je ne le trouve nulle part ...
> http://www.schiratti.com/dowson.html tu télécharge le SDK et dans l'exemple en C tu trouves tout.

Et je n'ai pas pris la version payante, je dois faire sans apparemment ...
> OK, sache que ton software DEVRA IMPÉRATIVEMENT ETRE sur la machine de FS
(sauf si tu fais toi un client server tcp/ip, le server tcp/ip sur le PC FS communiquera directement avec FSUIPC et le client sur l'autre PC en réseau dialoguera avec ton server)

et sinon ton projet c'est quoi ? le but etc ...

bye

Dernière modification par kbumbaz (12-04-2012 14:23:14)


./LĂ©opold >>

5tro7dz * 4bn86d

Hors ligne

#14 [↑][↓] 12-04-2012 14:46:14

GauWin
Membre
Inscription : 11-04-2012
RenommĂ©e :   

Re : [FSX] Mise en place d'un simulateur de vol

Je suis en stage chez l'ISAE et je dois remplacer FlightGear de leur simulateur de vol par FSX.
Pour pallier au problèmes de la version payante, je vais devoir envoyer grâce a un socket les données du simulateur de vol au poste qui fera tourner FSX et sur celui-ci j'utiliserai FSUIPC pour faire se déplacer l'avion et renvoyer les images grâce à deux rétroprojecteurs.

Je globalement résumé la wacko , sachant que j'ai 2mois pour finir.

Hors ligne

#15 [↑][↓] 13-04-2012 08:00:01

GauWin
Membre
Inscription : 11-04-2012
RenommĂ©e :   

Re : [FSX] Mise en place d'un simulateur de vol

Excuse moi mais j'ai un petit problème de Undefined reference to FSUIPC_Open  / Read / Write / Process ...
Pourtant j'ai bien le .h et les paramètres me semblent correct sad


CODE :

DWORD dwResult;

FSUIPC_Open(SIM_ANY, &dwResult);
FSUIPC_Read(0x2F20,4,&test,&dwResult); //Test nez avion
FSUIPC_Process(&dwResult);
FSUIPC_Close();

ça doit être une erreur stupide mais je trouve pas ...

Hors ligne

#16 [↑][↓] 13-04-2012 08:02:31

kbumbaz
Membre
Lieu : FR - LFMN
Inscription : 19-02-2010
RenommĂ©e :   

Re : [FSX] Mise en place d'un simulateur de vol

Salut,

Tu devs avec visual studio ? as tu rajouté la DLL de FSUIPC a ton projet ?

Regarde l'exemple dans le SDK ! et regarde si ca marche a ce niveau deja !

bye


./LĂ©opold >>

5tro7dz * 4bn86d

Hors ligne

#17 [↑][↓] 13-04-2012 12:54:36

GauWin
Membre
Inscription : 11-04-2012
RenommĂ©e :   

Re : [FSX] Mise en place d'un simulateur de vol

J'ai des gros problème pour intégrer la librairie depuis ce matin ...
Je suis passé de Code Blocks à Visual C++ mais ça merde toujours autant ...

Actuellement j'ai : fatal error LNK1104: impossible d'ouvrir le fichier 'libc.lib'

Hors ligne

#18 [↑][↓] 13-04-2012 13:11:30

kbumbaz
Membre
Lieu : FR - LFMN
Inscription : 19-02-2010
RenommĂ©e :   

Re : [FSX] Mise en place d'un simulateur de vol

Bon,

Autant a haut niveau je peux te donner un coup de main, autant pour des détails comme ca, je ne peux pas t'aider (je suis admin réseau pas développeur C ). Bon courage en tout cas !

Désolé

Dernière modification par kbumbaz (13-04-2012 13:11:48)


./LĂ©opold >>

5tro7dz * 4bn86d

Hors ligne

#19 [↑][↓] 13-04-2012 13:28:25

GauWin
Membre
Inscription : 11-04-2012
RenommĂ©e :   

Re : [FSX] Mise en place d'un simulateur de vol

Tu m'as déjà bien aidé laugh
Merci encore à toi, je vais tenter de régler ces problèmes pour pouvoir enfin m'attaquer a FSUIPC !

Hors ligne

#20 [↑][↓] 16-04-2012 09:27:16

GauWin
Membre
Inscription : 11-04-2012
RenommĂ©e :   

Re : [FSX] Mise en place d'un simulateur de vol

Excuse moi mais tu as bien utilisĂ© Visual C++  pour ton projet ? Pourrais-tu me donner tes configurations (Multithread MT/  MD) ?
J'ai pas mal de problèmes à cause des librairie etc ...
En particulier a cause de libcmt.lib et lic.lib qui entre en conflit.
As-tu eu les mêmes problèmes ?

Merci d'avance

Dernière modification par GauWin (16-04-2012 09:28:25)

Hors ligne

#21 [↑][↓] 16-04-2012 09:36:44

kbumbaz
Membre
Lieu : FR - LFMN
Inscription : 19-02-2010
RenommĂ©e :   

Re : [FSX] Mise en place d'un simulateur de vol

Salut,

Comme je te l'ai dit, je ne fais pas de C/C++, mais que du .NET

bye


./LĂ©opold >>

5tro7dz * 4bn86d

Hors ligne

#22 [↑][↓] 16-04-2012 10:37:51

GauWin
Membre
Inscription : 11-04-2012
RenommĂ©e :   

Re : [FSX] Mise en place d'un simulateur de vol

Ok c'est bon avec l'aide de mes maitres de stage j'ai réussis à tout débugger ! laugh

Hors ligne

#23 [↑][↓] 16-04-2012 10:39:55

kbumbaz
Membre
Lieu : FR - LFMN
Inscription : 19-02-2010
RenommĂ©e :   

Re : [FSX] Mise en place d'un simulateur de vol

ok > allé ! code maintenant ! ^^


./LĂ©opold >>

5tro7dz * 4bn86d

Hors ligne

#24 [↑][↓] 17-04-2012 10:02:43

GauWin
Membre
Inscription : 11-04-2012
RenommĂ©e :   

Re : [FSX] Mise en place d'un simulateur de vol

Salut,

j'ai bien avancé grâce a ton aide mais la je rebloque un peu à cause des Offsets ...
Je n'arrive pas Ă  trouver comment les lire les roll, yaw et pitch sad
Pourrais tu me donner les Offsets liés à ceux-ci mais également les calculs pour les convertir en degré si tu les connais ?

Merci encore,
RĂ©mi

Hors ligne

#25 [↑][↓] 17-04-2012 10:30:19

kbumbaz
Membre
Lieu : FR - LFMN
Inscription : 19-02-2010
RenommĂ©e :   

Re : [FSX] Mise en place d'un simulateur de vol

Salut,

pseudo code:

Pitch 0x0578 int (4octets)

Quand tu veux le connaitre la valeur :
valeur_en_degres = Math.Round((double)valeur_lue_dans_fsuipc * 360 / (65536.0 * 65536.0), 0)

Quand tu veux Ă©crire la valeur :
valeur_a_ecrire_dans_fsuipc =536870912 * valeur_en_degres / 45);



Bank 0x057C int (4octets)

Quand tu veux le connaitre la valeur :
valeur_en_degres = Math.Round((double)valeur_lue_dans_fsuipc * 360 / (65536.0 * 65536.0), 0)

Quand tu veux Ă©crire la valeur :
valeur_a_ecrire_dans_fsuipc = 536870912 * valeur_en_degres / 45;


...

Dernière modification par kbumbaz (17-04-2012 10:31:43)


./LĂ©opold >>

5tro7dz * 4bn86d

Hors ligne

Pied de page des forums