Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : Jérémy
récupération d'une Trames GPS
Essaie de faire correctement ta conversion DDMM.mmmm en DD.ddddd
C'est MM.mmmm /60 + DD
4851.5026 doit te donner 48.858376 avec une résolution de 11cm. Et inutile de s'exciter avec des résultats avec 32 chiffres significatifs qui ne correspondent à rien!
Il faut comprendre que dans les calculs, la résolution des données GPS est de 1/10000 de minute, soit 0.18m. cela n'a rien à voir avec la précision.
Si tu sors un résultat en DD.dddddd tu as beau avoir une flopée de décimales, la résolution sera toujours au mieux celle de la donnée de base.
Si tu ajoutes 12.3 m à 6.542 m ça ne donne pas 18.842 m mais 18.8 m
C'est MM.mmmm /60 + DD
4851.5026 doit te donner 48.858376 avec une résolution de 11cm. Et inutile de s'exciter avec des résultats avec 32 chiffres significatifs qui ne correspondent à rien!
Il faut comprendre que dans les calculs, la résolution des données GPS est de 1/10000 de minute, soit 0.18m. cela n'a rien à voir avec la précision.
Si tu sors un résultat en DD.dddddd tu as beau avoir une flopée de décimales, la résolution sera toujours au mieux celle de la donnée de base.
Si tu ajoutes 12.3 m à 6.542 m ça ne donne pas 18.842 m mais 18.8 m
récupération d'une Trames GPS
récupération d'une Trames GPS
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Je n'y arrive pas !!!
Je suis quelqu'un qui aime comprendre et la ca me dépasse.
J'effectue un calcul avec la calculatrice Windows :
4851,617 - 4851,500 = 0,117 / 60 = 0,00195 * 11131700 = 21706
J'essaye d'effectuer le même calcul avec mon PIC.
Premier probléme que je rencontre quand je lui rentre :
Lat1 = 4851.502 ;
Lat2 = 4851.619 ;
il m'affiche 4851.501 et 4851.618 à l’écran .
Pourquoi il arrondi à 0.001 en dessous ????? Je me dis que mikroC à du mal avec les flottant.
Ok pas grave.
je vais modifier mes valeurs pour obtenir le même calcul que la calculette .
Je vais mette 4851.501 pour qu'il m’affiche 4851.5 comme la calculette et 4851.618 pour qu'il m'affiche 4851.617
Je fais donc
21741.6 c'est pas sérieux il me le sort dou ce résultat !
Je suis quelqu'un qui aime comprendre et la ca me dépasse.
J'effectue un calcul avec la calculatrice Windows :
4851,617 - 4851,500 = 0,117 / 60 = 0,00195 * 11131700 = 21706
J'essaye d'effectuer le même calcul avec mon PIC.
Premier probléme que je rencontre quand je lui rentre :
Lat1 = 4851.502 ;
Lat2 = 4851.619 ;
il m'affiche 4851.501 et 4851.618 à l’écran .
Pourquoi il arrondi à 0.001 en dessous ????? Je me dis que mikroC à du mal avec les flottant.
Ok pas grave.
je vais modifier mes valeurs pour obtenir le même calcul que la calculette .
Je vais mette 4851.501 pour qu'il m’affiche 4851.5 comme la calculette et 4851.618 pour qu'il m'affiche 4851.617
Je fais donc
Code : Tout sélectionner
Lat1 = 4851.501 ;
Lat2 = 4851.618 ;
FloatToStr(Lat1, Texte);
Glcd_Write_Text_Adv(Texte,60,0);
FloatToStr(Lat2, Texte);
Glcd_Write_Text_Adv(Texte,0,0);
// Latitude
if (Lat2 >= Lat1) LatX = ((Lat2 - Lat1)/60)*11131700 ;
else LatX = ((Lat1 - Lat2)/60)*11131700 ;
Glcd_Write_Text_Adv("LatX=",0,16);
FloatToStr(LatX, Texte);
Glcd_Write_Text_Adv(Texte,25,16);
21741.6 c'est pas sérieux il me le sort dou ce résultat !
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
récupération d'une Trames GPS
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonsoir
tu arrives aux limites du quantum flottantt 32 bits
en multipliant Lat1 et LAt2 par 1000 pour avoir un delta plus consequent
resultat= 21706.80999
tu arrives aux limites du quantum flottantt 32 bits
en multipliant Lat1 et LAt2 par 1000 pour avoir un delta plus consequent
Code : Tout sélectionner
Lat1 = 4851500 ;
Lat2 = 4851617 ;
Float2Ascii(Lat1, TEXTE,5);
UART1_Write_Text(TEXTE);
CRLF1();
Float2Ascii(Lat2, TEXTE,5);
UART1_Write_Text(TEXTE);
CRLF1();
// Latitude
if (Lat2 >= Lat1)
LatX = (Lat2 - Lat1);
else
LatX = (Lat1 - Lat2) ;
UART1_Write_CText("DeltaX=");
Float2Ascii(LatX, TEXTE,5);
UART1_Write_Text(TEXTE);
CRLF1();
UART1_Write_CText("coeff=");
LatZ=11131700.0/60.0;
Float2Ascii(LatZ, TEXTE,5);
UART1_Write_Text(TEXTE);
CRLF1();
LatX=LatX*LatZ/1000.0 ;
UART1_Write_CText("LatX=");
Float2Ascii(LatX, TEXTE,5);
UART1_Write_Text(TEXTE);
CRLF1();
resultat= 21706.80999
récupération d'une Trames GPS
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonjour à tous ,
Bon allez , j'abdique !
J'obtiens entre 80 et 90 mètres de distance entre ma position ( donnée par le GPS) et un carrefour à coté de chez moi qui est donné à 114 mètres d’après Google MAPS !
20 mètres d’écart sur 100m ca me parait gros mais bon .
Bon allez , j'abdique !
J'obtiens entre 80 et 90 mètres de distance entre ma position ( donnée par le GPS) et un carrefour à coté de chez moi qui est donné à 114 mètres d’après Google MAPS !
20 mètres d’écart sur 100m ca me parait gros mais bon .
Code : Tout sélectionner
// Mon croisement ou point de référence
Lat1 = valeur de votre croisement en DDMM. mmmm
Lon1 = valeur de votre croisement en DDMM. mmmm
//################################################################################
//####################### BOUCLE PRINCIPALE ###############################
//################################################################################
while(1) {
Lat2 = atof(T_Lat) ; // Récupération des valeurs du GPS en DDMM.mmmm
Lon2 = atof(T_Lon) ; // Récupération des valeurs du GPS en DDMM.mmmm
// Latitude
if (Lat2 >= Lat1) LatX = ((Lat2 - Lat1)/60)*11131700;
else LatX = ((Lat1 - Lat2)/60)*11131700;
// Coefficient
Coef = cos(((Lat2 + Lat1)/200)*0.0174533); // en radian
// Longitude
if (Orientation_Lon == 'W') Lon1 = abs(Lon1);
if (Orientation_Lat == 'S') Lon2 = abs(Lon2);
if (Lon2 >= Lon1) LonX = (Lon2 - Lon1)*Coef*111317;
else LonX = (Lon1 - Lon2)*Coef*111317;
Distance = (sqrt( (LonX*LonX) + (LatX*LatX)))/100; // en mètre
récupération d'une Trames GPS
Bonjour,
Ce n'est pas mickroC qui est en cause, c'est le problème des calculs en nombres flottants non traités par une FPU comme c'est le cas sur un PC .
Et une calculatrice à 5€ sera aussi plus précise car pourvue d'un µP spécialisé.
On peut s'amuser à faire 10.0/5.0 et être parfois surpris du résultat !
Et même sur un PC certains résultats doivent être pris après réflexion!
si je fais sur la calculatrice Windows tan(91°) j'obtiens -57.29... si je fais atan(-57.29) j'obtiens -89° !
Je rappelle également que faire un calcul comme 4851,617 - 4851,500 = 0,117 / 60 = 0,00195 * 11131700 n'a aucun sens puisque 4851 est un mélange de degrés et minutes ... ça donne l'illusion de marcher car les valeurs de degrés sont identiques
si ton GPS te donne 4859.9999 et que tu te déplaces tu vas obtenir 4900. 00.... et non 4860...
Cette transformation en #31 est obligatoire quelle que soit la méthode de calcul, y compris la formule Haversine avec la trigo sphérique.
de même il est obligatoire de détecter le signe +/- de l'angle avant tout calcul .
Calculer la valeur absolue de la donnée issue du GPS n'a pas de sens car c'est par définition déjà une valeur absolue.
Jérémy a écrit :Source du message Pourquoi il arrondi à 0.001 en dessous ????? Je me dis que mikroC à du mal avec les flottant.
Ce n'est pas mickroC qui est en cause, c'est le problème des calculs en nombres flottants non traités par une FPU comme c'est le cas sur un PC .
Et une calculatrice à 5€ sera aussi plus précise car pourvue d'un µP spécialisé.
On peut s'amuser à faire 10.0/5.0 et être parfois surpris du résultat !
Et même sur un PC certains résultats doivent être pris après réflexion!
si je fais sur la calculatrice Windows tan(91°) j'obtiens -57.29... si je fais atan(-57.29) j'obtiens -89° !
Je rappelle également que faire un calcul comme 4851,617 - 4851,500 = 0,117 / 60 = 0,00195 * 11131700 n'a aucun sens puisque 4851 est un mélange de degrés et minutes ... ça donne l'illusion de marcher car les valeurs de degrés sont identiques
si ton GPS te donne 4859.9999 et que tu te déplaces tu vas obtenir 4900. 00.... et non 4860...
Cette transformation en #31 est obligatoire quelle que soit la méthode de calcul, y compris la formule Haversine avec la trigo sphérique.
de même il est obligatoire de détecter le signe +/- de l'angle avant tout calcul .
Calculer la valeur absolue de la donnée issue du GPS n'a pas de sens car c'est par définition déjà une valeur absolue.
récupération d'une Trames GPS
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Merci pour ces précisions !
Je pense que cette fois si c'est bon ! enfin ....
J'ai modifié la capture des données pour différencier les DD des MM.mmmm .
Ainsi je stockes la valeur des degrés reçus dans les variables Latx_DD . et le reste dans le Tableau MM.mmmm
Ensuite je convertis mes MM.mmmm en DD.dddd
Je pense que cette fois si c'est bon ! enfin ....
J'ai modifié la capture des données pour différencier les DD des MM.mmmm .
Ainsi je stockes la valeur des degrés reçus dans les variables Latx_DD . et le reste dans le Tableau MM.mmmm
Ensuite je convertis mes MM.mmmm en DD.dddd
Code : Tout sélectionner
Lat1_DD =sa referebce en DDD;
Lat1 = sa reference en MM.mmmm ;
Lat1 = (Lat1/60) + Lat1_DD ;
Lon1_DD = sa referebce en DDD;
Lon1 = sa reference en MM.mmmm ;
Lon1 = (Lon1/60) + Lon1_DD ;
Lat2 = atof(T_Lat) ; // Je récupere les MM.mmmm
Lat2 = (Lat2/60) + Lat2_DD ; // Je converti en DD.dddd
Lon2 = atof(T_Lon) ; // Je récupere les MM.mmmm
Lon2 = (Lon2/60) + Lon2_DD ; // Je converti en DD.dddd
// Latitude
if (Lat2 >= Lat1) LatX = (Lat2 - Lat1)* 111317 ;
else LatX = (Lat1 - Lat2)* 111317 ;
// Coefficient 1° = 0.0174533 rad
Coef = cos(((Lat2 + Lat1)/2)*0.0174533);
// Longitude
if (Orientation_Lon == 'W') Lon2 = abs(Lon2);
if (Lon2 >= Lon1) LonX = (Lon2 - Lon1)*Coef*111317;
else LonX = (Lon1 - Lon2)*Coef*111317;
Distance = (sqrt( (LonX*LonX) + (LatX*LatX)));
récupération d'une Trames GPS
C'est presque bon ...
Tes DD.dddd doivent être affectés du signe +/- en fonction de N/S E/W AVANT tout calcul
Tu comprends bien que la différence entre -4 et 2 est 6 et non 2.
Donc si une des valeurs est négative, la différence est la somme des valeurs absolues
si les deux sont négatives, c'est la différence valeurs absolues.
je répète: if (Orientation_Lon == 'W') Lon2 = abs(Lon2); n'a pas de sens !! Lon2 est une valeur absolue
Si Orientation_Lon1 == 'W', et Orientation_Lon2 == 'E' ou l'inverse , alors la différence est la somme de lon1 et de lon2.
Tes DD.dddd doivent être affectés du signe +/- en fonction de N/S E/W AVANT tout calcul
Tu comprends bien que la différence entre -4 et 2 est 6 et non 2.
Donc si une des valeurs est négative, la différence est la somme des valeurs absolues
si les deux sont négatives, c'est la différence valeurs absolues.
je répète: if (Orientation_Lon == 'W') Lon2 = abs(Lon2); n'a pas de sens !! Lon2 est une valeur absolue
Si Orientation_Lon1 == 'W', et Orientation_Lon2 == 'E' ou l'inverse , alors la différence est la somme de lon1 et de lon2.
récupération d'une Trames GPS
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonjour ,
Oui tu as raison j'ai posté bien trop vite .
Voici la modification que j'ai effectué .
PS : je ne prends en compte que la longitude car je ne pense pas passé sous l'équateur un jour, donc peu de chance de voir un signe ''South" en Latitude
Pour le moment dans la récupération de la trame Home il n'y a pas de différence. Cela ce fera quand le GPS sera monté sur le Robot .
Soit je ferais enregistré la première trame en tant que "Home", soit je l'enregistrerai sur l'appui d'un bouton par exemple genre " Enregistrer votre point Home" ;
J'ai essayé de faire au plus court . ces calculs sont effectués avant ceux sur les longitudes.
Oui tu as raison j'ai posté bien trop vite .
Voici la modification que j'ai effectué .
PS : je ne prends en compte que la longitude car je ne pense pas passé sous l'équateur un jour, donc peu de chance de voir un signe ''South" en Latitude
Pour le moment dans la récupération de la trame Home il n'y a pas de différence. Cela ce fera quand le GPS sera monté sur le Robot .
Soit je ferais enregistré la première trame en tant que "Home", soit je l'enregistrerai sur l'appui d'un bouton par exemple genre " Enregistrer votre point Home" ;
J'ai essayé de faire au plus court . ces calculs sont effectués avant ceux sur les longitudes.
Code : Tout sélectionner
// Longitude
if ( Orientation_Lon_Home == Orientation_Lon2 ){
if (Lon2 >= Lon_Home) LonX = (Lon2 - Lon_Home)*Coef*111317;
else LonX = (Lon_Home - Lon2)*Coef*111317;
}
else{
if (Lon2 >= Lon_Home) LonX = (Lon2 + Lon_Home)*Coef*111317;
}
récupération d'une Trames GPS
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Si c'est bon j'aurais quelques questions pour avancer un peu !
Concernant la trame GGA qui est un super indicateur ! En l'état des choses après avoir activé cette trame , je remarque qu'à la maison j'ai donc 6 satellites avec un HDOP de 1.31 ?
Comment interprétè ce 1.31 ? car si les valeurs vont de 1 à 100 , c'est vraiment très bien ( grosse précision) mais si les valeurs vont de 1 à 1.5 , c'est pas terrible ?
Et du coup l'information sur le nombre de satellites est obsolète ?
Sur la trame GPRMC j'ai une information "Data Valid" que je n'ai pas sur ma trame GGA. Dois je en déduire que les infos fournis par la trame GGA ne sont pas sûr ?
Dans la trame GPRMC , j'ai également une info COG et magnetic variation puis je en déduire un cap ?
Concernant la trame GGA qui est un super indicateur ! En l'état des choses après avoir activé cette trame , je remarque qu'à la maison j'ai donc 6 satellites avec un HDOP de 1.31 ?
Comment interprétè ce 1.31 ? car si les valeurs vont de 1 à 100 , c'est vraiment très bien ( grosse précision) mais si les valeurs vont de 1 à 1.5 , c'est pas terrible ?
Et du coup l'information sur le nombre de satellites est obsolète ?
Sur la trame GPRMC j'ai une information "Data Valid" que je n'ai pas sur ma trame GGA. Dois je en déduire que les infos fournis par la trame GGA ne sont pas sûr ?
Dans la trame GPRMC , j'ai également une info COG et magnetic variation puis je en déduire un cap ?
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 114 invités