Bonjour, je suis toujours sur mon projet de tondeuse automatique, je vais bientot recevoir mon gps rtk avec precision centrimetrique, dans la realité environs 3/4centimetres car je suis a 15 km d'une base.
Je me pose la question de l'utilisation de la librairie tinygpsplus, est t'elle capable de gerer les trames gps avec une precision centimetrique?
J'ai parcouru le site consacré mais je n'ai rien trouvé a ce sujet:
(La communication entre la station de base et le récepteur mobile dans un système GPS RTK se fait généralement par radio ou par réseau cellulaire ce n'est donc pas la bibliothèque tinyGPS qui doit gérer cela - certains montages ont une entrée pour les données RTK qui sont traitées par le GPS et donc la sortie sera la sortie corrigée vue par tinyGPS)
J'ai commandé celui-ci avec une grosse antenne, sa viens d'espagne:
J'ai prevu de recevoir les données rtk en me connectant au reseau gratuit centipede, j'utilise une esp8266 (wemosd1) qui se connecte a internet en wifi et recupere la trame de correction gps, ensuite j'ai prevu de l'envoyer simplement sur le port uart de ma carte ardusimple, sur l'entrée prevu pour.
J'ai eu l'infos sur comment faire sur le canal telegram du reseau centipede.
Ensuite j'ai prevu de recuperer les coordonées gps , sur une carte arduino mega et je souhaite trouver le moyen de calculer le cap en fonction de la position de la tondeuse et le point gps a atteindre. Et donc pour cela , (parser les trames gps) je souhaite utiliser TinyGPSplus.
OK donc la sortie des trames du GPS seront automatiquement corrigée du moment que vous envoyez une trame RTK correcte ➜ la doc dit
When operating in RTK mode, RTCM version 3 messages are required and the module supports DGNSS according to RTCM 10403.3
c'est donc ce qu'il faudra envoyer ➜ vous pouvez vérifier dans la carte du réseau centipede que le format est bien RTCM3 pour la base pas loin de chez vous.
Lorsque j'aurais reçu ma carte je testerais si tout marche.
Et j'en reviens a la librairie tinygpsplus qui pourrais me servir pour parser les trames nmea.
J'ai lus sur un forum qu'il fallait 8 chiffres apres la virgule pour obtenir des coordonées avec precision centrimetrique.
Je me pose aussi la question de savoir si l'ont peut utiliser les trames gps pour trouver le bon cap? J'ai vu que la librairie peut utiliser la postion courante et le point gps a ralier . La librairie peut donner le bon cap. Je n'est pas encore testé la librairie mais je ne sais pas si sa va marcher ou s'il vaut mieux passer par un module boussole.
La trame GPS est en ASCII, la bibliothèque interprète ces valeurs sous format double.
Sur un petit Arduino 8 bits, double c'est comme float - de la simple précision sur 32 bits et vous avez au maximum en tout 7 digit significatifs. ce ne sera pas suffisant donc. Sur une carte 32 bits un double est sur 64 bits et donc vous aurez au moins 8 décimales après la virgule pour la latitude et longitude.
Le cap peut être calculé en regardant une suite de relevés; De nombreux GPS le fournissent dans une trame NMEA (par exemple $GPRMC vous donne la "route sur le fond" en dégrés)
Ça s’appelle course sur le fond car c’est à l’origine faut pour les bateaux. Le fond de l’océan est un point fixe alors que en surface le bateau peut subir des courants qui se composent avec la course et sens de déplacement du bateau.
le double sera effectivement en 32 bits. Il faudra voir la tête des trames NMEA de votre GPS pour comprendre ce qui est donné à la bibliothèque. Je n'ai pas ce module.
Parler du centimètre revient à parler d'un angle de :
A = 360° *1 centimètre / 40000 km --> 0.00000009 ° (9^-8)
Un flottant en 32 bits possède 23 bits de mantisse + le signe. Cela correspond à une partie fractionnaire de ±180° / 2^23 = ±0.00000214°, soit à un distance de :
Si on dit que la Terre est un globe et sa circonférence à l'équateur est d'environ 40 075 kilomètres pour avoir une position au cm près il faut que la latitude et longitude soient suffisamment précises pour représenter 1 / 4007500000 soit 0,000000000249532 et donc il faut 11 chiffres après la virgules
donc si on est sur une plateforme 32 bits, le double est sur 64 bits et donc on a largement la précision nécessaire (11 bits pour l'exposant et 52 bits pour la mantisse et donc environ 15 à 16 chiffres décimaux significatifs)
c'est bon ➜ il faut une plateforme 32 bits et il faut que le GPS bien sûr exprime la latitude et longitude avec au moins 11 ou 12 chiffres après la virgule.
N'existe-t-il pas de bibliothèques permettant de faire des calculs sur 64 bits alors que le processeur ne dispose que d'opérateurs câblés sur 32 bits (ça prend plus de temps). Il me semble en avoir entendu parler, mais je n'arrive pas à retrouver de liens à ce sujet.
oui, il yen a... mais tinygpsplus utilise le type double pour extraire et représenter la latitude et longitude - donc sur un MEGA ce sera 4 octets et c'est trop tard, vous aurez perdu de la précision même si la trame NMEA du GPS contenait plus d'informations.
Bon, on n'est peut-être plus dans le propos. Pour autant, une phrase NMEA, telle qu'elle est transmise par un GPS, ce n'est pas des doubles (32 ou 64 bits), mais c'est simplement du texte envoyé sur une ligne série. On n'est pas obligé d'utiliser "tinygpsplus" pour extraire ces données.
Cela veut quand même dire qu'il faut transformer ce texte en variable 64 bits compréhensible par la bibliothèque "fp64lib". Ce qui, à mon sens doit être possible, sinon, je ne vois pas comment utiliser cette bibliothèque.