Calcul du point GPS a partir de l'acquisition en temps réel des trames d'un rece

Résolu
berenger_R Messages postés 21 Date d'inscription vendredi 17 février 2006 Statut Membre Dernière intervention 3 avril 2006 - 23 févr. 2006 à 09:39
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 - 24 févr. 2006 à 14:22
Bonjour,

Je doit réaliser un programme orientée objet en C++
sous linux qui réalise le calcul du point GPS à partir de l'acquisition
en temps réel des trames d'un recepteur.

Plus précisément, il me faut récupérer en temps réel
les differentes trames GPS qui proviennent d'un recepteur pour les
traiter et ranger toutes les données utiles (contenu dans ces trames)
dans une structure. Ceci me permetra ensuite de faire des calculs avec
ces données.

De plus si quelqu'un sait aussi comment passer des
trames récupérées de type ASCII à un type struct bien ordonné.

Donc si quelqu'un à des infos ou des classes déja
faites et réutilisables pour mon programme je lui serais reconnaissant
de bien vouloir m'aider.

Je vous remercie par avance

15 réponses

DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
23 févr. 2006 à 12:54
Tu parcours ta trame et tu comptes 20 virgules. A partir de la 20ieme, tus commences a lire les valeurs souhaitées.
Exemple :

int cpt;
char *pszTrame = new char[1024];
char *pszBuff = new char[1024];

strcpy(pszTrame, "$GPRMC,000405.984,V,0000.0000,N,00000.0000,E,,,101102,.....");

cpt = 0;
pszBuff = pszTrame;

while(*pszBuff && cpt < 20)
{
if(*pszBuff == ',') cpt++;
pszBuff++;
}

// Ici tu fais ton traitement a partir de *pszBuff pour stocker les valeurs dans ta structure

A toi d'adapter en conséquence, mais ca devrait ressembler a un truc du genre.
Par contre pour ce qui est de ta structure, je te conseil de la sauvegardée dans un fichier en binaire, a moins que tu ne fasses pas d'archivage.
A ce moment la, utilises alors un tableau de structures.

Shell
3
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
23 févr. 2006 à 09:55
Cherche déjà le format NMEA 0183 sur le net.

ensuite c'est du parsing. j'ai un bout de code quelque part. Je met la main dessus et je te tiens au courant.
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
23 févr. 2006 à 09:59
Les GPS éméttent sur le port série.
Dans leur trame, tu y retrouves pas mal d'informations telles que la position actuelle géoréférencée, l'altitude, le nombre de sattelite capté, la puissance du signal, l'heure UTC, ....
Pour ce qui est des coordonnées, tu devras peut etre les convertir sur la base souhaités (Lambert II, NTF, ....)

Pour la programmation a toi d'aviser en conséquence. Essaye deja de faire le tri sur la trame recue, et crées toi ensuite un structure qui corresponde au mieux a tes besoins.
Les données GPS sont de mémoire séparées par des points virgules ce qui devrait te simplifier la tache.

Je te conseil ainsi de commencer par prendre un stylo et une feuille et de noter tous les champs qui te seront utiles dans la trame.
Ensuite crées la structure qui va bien.

Après pour ce qui est du traitement du devrais t'en sortir sans trop de mal a l'aide du forum si nécéssaire.

Shell
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
23 févr. 2006 à 10:28
Voici une trame émise par mon GPS. Dans cette trame, le GPS n'as aucun FIX.
Si tu as besoin d'une trame en mode de fonctionnement avec FIX je peux essayer de trouver un endroit ou mon GPS puisse capter.
Voici la trame :

$GPRMC,000405.984,V,0000.0000,N,00000.0000,E,,,101102,,*13
$GPGGA,000406.984,0000.0000,N,00000.0000,E,0,00,50.0,0.0,M,0.0,M,0.0,0000*71$GPGGA,000650.974,0000.0000,N,00000.0000,E,0,00,50.0,0.0,M,0.0,M,0.0,0000*7F
$GPGSA,A,1,,,,,,,,,,,,,50.0,50.0,50.0*05

Shell
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
berenger_R Messages postés 21 Date d'inscription vendredi 17 février 2006 Statut Membre Dernière intervention 3 avril 2006
23 févr. 2006 à 11:08
Merci pour ces infos



Je connais le format de mes trames. Ce que je n'arrive pas a faire,
c'est récupérer la 20ène de valeur utile (ephéméride, psr, les
differents temps) dans une structure afin de faire mes calculs.

J'ai toujours fais des programme ou je demandé a l'utilisateur de
rentrer des valeurs ou de faire un truc. Là je doit comuniquer avec
l'exterieur et ensuite gérer un fichier ASCII. Est ce qu'un fichier
ASCII ce déclare comme un char[] ?

Pour ce qui est des calculs qui suivent ca devrait aller.

Encore merci a vous pour la rapidité de vos réponse.
0
berenger_R Messages postés 21 Date d'inscription vendredi 17 février 2006 Statut Membre Dernière intervention 3 avril 2006
23 févr. 2006 à 13:45
Je te remerci pour la methode, ca me semble trés bien.

Je vais tenter comme ca quand j'aurrais réussie à récupérer en temps réel toutes les trames du recepteur.



Juste un truc sur cette ligne :

while(*pszBuff && cpt < 20)

Je comprend pas pk tu utilises *pszBuff ? j'aurrais juste mis : while(cpt < 20)



Sinon, tu fais quoi dans la vie pour etre aussi doué en programation ?
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
23 févr. 2006 à 14:11
J'utilise *pszBuff pour etre sur que je ne suis pas arrivée en fin de trame et que je peux donc encore lire les charactères suivants.
Ca évite les plantages dus au dépassement de buffer (bufferoverflow).

Sinon je suis programmeur analyste et étudiant à mi-temps.

Shell
0
berenger_R Messages postés 21 Date d'inscription vendredi 17 février 2006 Statut Membre Dernière intervention 3 avril 2006
23 févr. 2006 à 15:31
Moi je suis un vieux stagiaire de 30 ans qui a repris ces étude à 27
ans. Et là je doit valider mon école par ce stage. Mais comme je ne
suis un expère en programation ca va etre dure.

Et vraiment merci de prendre de ton temps pour m'aider.
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
23 févr. 2006 à 16:39
Shell
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
23 févr. 2006 à 16:41
Mieux vaut aider un vieux stagiaire qu'un ptit pisseur.
Tu fais quoi comme école exactement ? Et tu faisais quoi avant de reprendre les cours?

Shell
0
berenger_R Messages postés 21 Date d'inscription vendredi 17 février 2006 Statut Membre Dernière intervention 3 avril 2006
23 févr. 2006 à 16:49
Je fais l'ENSEEIHT à toulouse en automatique et informatique industriel.

Et avant je travailler sur les plateformes pétrolière en tant que technicien pour faire du positionnement GPS.

Voila, et toi tu es d'ou et tu traivails et étudie sur quoi ?
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
24 févr. 2006 à 09:25
Bon j'ai retouvé un code de parsing nmea avec extracttion de tous les champs des trames.
Si tu me donnes une @ e-mail (par MP c'est plus sur), je te filerais le code en question.
0
berenger_R Messages postés 21 Date d'inscription vendredi 17 février 2006 Statut Membre Dernière intervention 3 avril 2006
24 févr. 2006 à 09:52
Ok, je t'ai envoyé mon adresse mail.
Et encore merci
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
24 févr. 2006 à 10:00
Je suis de Lyon, je bosse dans un boite de programmation et je poursui mes études en parrallèle.
Je ne bosse pas a temps plein.

ymca2003> T'as bossé sur quel type de GPS ?

Shell
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
24 févr. 2006 à 14:22
Embarqué pour du suivi de flotte à distance.
0
Rejoignez-nous