Décoder une trame NMEA
Un récepteur GPS a calculé sa position. Il doit maintenant la transmettre à l'appareil qui l'utilise (ton téléphone, un GPS de voiture, un bateau). Sous quelle forme ?
Pas sous forme de jolie carte : sous forme de texte brut, dans un format vieux de quarante ans, que tous les récepteurs du monde parlent. Ce format s'appelle NMEA 0183, et une de ses lignes s'appelle une trame.
Cette séance se fait sans machine. Tu vas décoder une vraie trame, au crayon.
Une trame, ça ressemble à ça
Illisible ? Pas tant que ça. Regarde : c'est du texte, découpé en champs séparés par des virgules. Tu connais déjà cette idée, c'est exactement le principe du CSV du chapitre sur les données.
Il suffit de savoir ce que chaque position signifie. Voici la clé :
| Champ | Valeur | Signification |
|---|---|---|
| 1 | $GPGGA |
type de trame (GGA = position et altitude) |
| 2 | 101530 |
heure UTC : 10 h 15 min 30 s |
| 3 | 4806.678 |
latitude |
| 4 | N |
Nord (ou S pour Sud) |
| 5 | 00140.800 |
longitude |
| 6 | W |
Ouest (ou E pour Est) |
| 7 | 1 |
qualité du signal (0 = pas de position, 1 = position valide) |
| 8 | 09 |
nombre de satellites utilisés |
| 9 | 0.8 |
précision (plus c'est petit, mieux c'est) |
| 10 | 45.2 |
altitude en mètres |
| … | (autres champs techniques) | |
| dernier | *66 |
somme de contrôle |
Le $ marque le début de la trame, le * sa fin.
Le piège : ce ne sont pas des degrés
Voici l'erreur que tout le monde commet la première fois.
La latitude vaut 4806.678. On serait tenté de lire « 4806,678 degrés ». C'est absurde : une latitude ne dépasse jamais 90 degrés.
En réalité, le format est degrés puis minutes, collés l'un à l'autre :
- Les deux premiers chiffres sont les degrés :
48. - Tout le reste correspond aux minutes :
06.678.
Et une minute d'angle vaut un soixantième de degré. Pour obtenir une valeur utilisable sur une carte, il faut donc convertir :
Pour la longitude, ce sont TROIS chiffres
La longitude s'écrit 00140.800. Cette fois, ce sont les trois premiers chiffres qui donnent les degrés : 001, et le reste les minutes : 40.800.
Pourquoi trois ? Parce que la longitude peut aller jusqu'à 180 degrés, alors que la latitude ne dépasse pas 90. Il faut donc une position de plus pour l'écrire.
Et comme le champ suivant indique W (Ouest), cette longitude est négative : -1,68°.
Nord/Sud, Est/Ouest : le signe
Sur une carte numérique, on n'écrit pas « N » ou « W », on utilise un signe :
- Latitude : Nord positif, Sud négatif.
- Longitude : Est positif, Ouest négatif.
Où est-on ?
Rassemblons : latitude 48,1113, longitude -1,68.
Ces deux nombres, dans cet ordre, sont ce que tu peux coller dans n'importe quel site de cartographie.
Exercice - Trouver le lieu
Colle 48.1113, -1.68 dans un site de cartographie. Dans quelle ville se trouve ce récepteur GPS ?
Correction
À Rennes.
Remarque au passage l'ordre : on écrit toujours la latitude d'abord, la longitude ensuite. L'inverser t'enverrait en Somalie.
Exercice - Décoder une trame complet
Voici une autre trame. Décode-la entièrement.
- À quelle heure cette position a-t-elle été relevée ?
- Combien de satellites étaient utilisés ?
- Quelle est la latitude, en degrés décimaux ?
- Quelle est la longitude, en degrés décimaux (attention au signe) ?
- Quelle est l'altitude ?
- De quelle ville s'agit-il ?
Correction
- 17 h 45 min 12 s (heure UTC ; en France en hiver, il est une heure de plus).
- 7 satellites.
- Latitude :
4852.350donne 48 degrés et 52,350 minutes, soit \(48 + \frac{52{,}35}{60} = 48 + 0{,}8725 = \mathbf{48{,}8725}\). Le champ vautN, donc positif. - Longitude :
00220.180donne 2 degrés (trois premiers chiffres :002) et 20,180 minutes, soit \(2 + \frac{20{,}18}{60} = 2 + 0{,}3363 = \mathbf{2{,}3363}\). Le champ vautE, donc positif. - 35 mètres.
48.8725, 2.3363: Paris.
Exercice - Une trame qui ne dit rien
Un récepteur, allumé dans un sous-sol, produit cette trame :
Que s'est-il passé ? Quels champs le prouvent ?
Correction
Le récepteur n'a pas de position. Deux champs le disent :
- le champ de qualité vaut 0 (« position non valide ») ;
- le nombre de satellites vaut 00 : il n'en capte aucun.
Et logiquement, les champs de latitude et de longitude sont vides (on voit les virgules se suivre : ,,,,,). Il connaît juste l'heure de son horloge interne.
C'est cohérent avec la séance précédente : le signal GPS ne passe pas les murs. Dans un sous-sol, le récepteur n'entend plus personne.
À quoi sert la somme de contrôle ?
Le *66 de la fin est une somme de contrôle (checksum). C'est un nombre calculé à partir de tous les caractères de la trame.
Le récepteur le calcule avant d'envoyer, et l'appareil qui reçoit le recalcule de son côté. Si les deux ne correspondent pas, c'est que la trame a été abîmée pendant le transport (un caractère perdu, un parasite électrique) : elle est alors jetée.
C'est un principe très général en informatique : on ne se contente pas d'envoyer des données, on envoie de quoi vérifier qu'elles sont arrivées intactes. Tu le retrouveras dans le thème sur Internet.
Le lien avec les photos
Souviens-toi du thème sur la photographie : une photo prise avec un téléphone contient des métadonnées EXIF, et parmi elles, souvent, une position GPS.
C'est très exactement le résultat de ce que tu viens de décoder. Le récepteur GPS du téléphone produit une position, et l'appareil photo l'écrit dans le fichier, à côté des pixels.
Une photo publiée sans précaution dit donc où elle a été prise. Tu sais maintenant d'où sort ce chiffre, et comment le lire.
Ce qu'on retient
- Une trame NMEA est du texte découpé en champs séparés par des virgules (comme un CSV). Chaque position a une signification connue.
- La trame GGA donne : l'heure UTC, la latitude, la longitude, la qualité, le nombre de satellites, l'altitude.
- Le piège : la latitude
4806.678se lit 48 degrés et 06,678 minutes, pas 4806 degrés. On convertit avec \(\text{degrés} + \frac{\text{minutes}}{60}\). - Latitude : 2 chiffres de degrés (max 90). Longitude : 3 chiffres (max 180).
SetWdonnent des valeurs négatives. On écrit toujours latitude, puis longitude.- Une trame vide avec une qualité à
0et00satellite signifie que le récepteur ne capte rien (sous-sol, tunnel). - La somme de contrôle permet de détecter une trame abîmée en chemin.
Et ensuite
Tu sais produire des coordonnées. Reste à les poser sur une carte, et à comprendre comment ces cartes sont fabriquées.