Mise en œuvre d’un serveur NTRIP pour la mesure de position centimétrique : qu’est-ce que l’altitude ?

Magazine
Marque
Hackable
Numéro
60
Mois de parution
mai 2025
Spécialité(s)


Résumé

Nous déployons notre propre serveur NTRIP fournissant les informations de référence pour le positionnement centimétrique par trilatération de signaux de navigation par satellite, avant de nous interroger sur la définition de l’altitude et en particulier de « au-dessus du niveau moyen de la mer ».


Body

Nous avions présenté [1] comment utiliser les services de Centipède ou d’IGN pour compenser les retards de propagation des ondes électromagnétiques utilisées pour le positionnement par trilatération de signaux de navigation par satellite, et en particulier en utilisant la bibliothèque RTKLib et le récepteur u-blox ZED-F9P comme source de données.

Ces solutions étaient sympathiques tant que nous nous limitions au territoire français, mais que faire en zone qui n’est pas couverte par Centipède/IGN au cours d’une campagne temporaire de mesure ? En effet, une station de référence provisoire n’est pas admise (à juste titre) par Centipède qui exige que les stations de référence soient fonctionnelles 365 jours/an. Ainsi, notre objectif ici est de :

  • fournir un service de correction de signaux GNSS (Global Navigation Satellite Systems) autonome ;
  • permettre une mesure centimétrique sur ordinateur, mais aussi sur téléphone mobile récent sous Android, et en particulier en exploitant la capacité du ZED-F9P à produire le signal corrigé et pas uniquement les signaux bruts d’observation en vue d’alimenter RTKLib.

image-20250417152858-1

Figure 1 : Monument en l’honneur de Jean-Henri Lambert (1728-1777), mathématicien et géographe, sur la place qui porte son nom à Mulhouse où il naquit. Il est à l’origine de plusieurs modes de projection de coordonnées sphériques vers planes localement, mais sa projection conique n’aborde pas le problème de l’altitude que nous allons rencontrer ici. Géoportail de l’IGN indique une altitude de 239 m pour la place Lambert à Mulhouse, donc au moins la stèle et le site web sont cohérents.

Ces expériences amèneront une nouvelle surprise, à savoir définir ce qu’est le concept d’altitude, et notamment par rapport à quelle référence. En effet, alors que les systèmes de gestion d’informations spatialisées tels que QGIS savent très bien gérer les transformations de coordonnées entre projections sphériques et planes, la troisième dimension n’est qu’un attribut arbitraire qui n’est pas manipulé par ces transformations. L’altitude n’est pas un problème qui semble beaucoup intéresser les géographes puisqu’il n’en est jamais fait mention dans [2] (Fig. 1). Le problème est significatif du point de vue de l’ingénierie cependant, tel que le rappelle [3], p.169, en mentionnant « On se souvient que Picard, chargé de l’alimentation en eau du château de Versailles, avait choisi comme origine le rez-de-chaussée du château. Cassini avait adopté le niveau de la mer dans la région de Perpignan. Le choix de la Méditerranée où les marées sont très faibles est assez logique. Cela n’empêchera pas l’ingénieur Collin de proposer le point situé à 100 mètres en dessous de la cour de l’Observatoire de Paris. [...] Il faut attendre une décision ministérielle de 1860 fixant l’origine des altitudes au niveau moyen de la Méditerranée à Marseille, défini par le trait 0,40 mètre de l’échelle de marée de Fort Saint-Jean, pour qu’enfin le réseau français de nivellement soit rattaché à une origine unique. »

Le problème sera d’autant plus ardu que nous prétendrons mesurer une altitude avec une précision et une exactitude centimétrique...

1. Casters NTRIP

Le principe de la mesure différentielle, et en particulier RTK (Real Time Kinematic), est de supposer qu’une station de référence est placée à une position connue. Si l’information brute venant des satellites est acquise – les pseudoranges comme temps de vol des ondes électromagnétiques des satellites au récepteur – et que les positions des satellites et du récepteur sont connues, alors il est possible d’en déduire les retards de propagation introduits par l’ionosphère et la troposphère [4]. Sous réserve que le récepteur mobile, dont la solution doit être corrigée, soit « proche » de la station de référence, alors ces mêmes corrections sont valables et peuvent être compensées lors de la recherche de la solution de sa position.

Les transparents de [5] montrent bien comment d’une part la qualité de la correction se dégrade avec une longueur de plus en plus importante entre la station de référence et la station de mesure, pour devenir inopérante au-delà de quelques dizaines de kilomètres [5], page 26, aussi mentionné [4], page 12. Par ailleurs, alors que l’utilisation de la corrélation sur le code du signal de navigation permet une précision métrique grâce au bénéfice du rapport signal à bruit de la compression d’impulsion qui ramène les 300 mètres de résolution du code qui défile chaque microseconde, il faut absolument exploiter la phase de la porteuse pour prétendre atteindre le centimètre. En effet, la longueur d’onde d’un signal de navigation est de l’ordre de 300/1575,42=19 cm et cette mesure permet de prétendre, après correction des retards corrélés entre référence et mesure, d’atteindre une position avec une résolution centimétrique.

Un protocole réduisant la taille des messages pour informer un récepteur GNSS des corrections se nomme RTCM pour Radio Technical Commission for Maritime services (puisque comme pour les trames NMEA, acronyme de National Marine Electronics Association, ce sont avant tout les marins qui étaient intéressés de se positionner), et la diffusion de ces trames sur réseau informatique suit la norme NTRIP pour Networked Transport of RTCM via Internet Protocol. Dans une architecture NTRIP, qui n’est pas sans rappeler MQTT, un serveur centralise les informations des stations de base qui fournissent les corrections, et accepte les connexions des récepteurs mobiles (rovers) qui ont besoin de ces corrections. Cette architecture en étoile centralisée sur un nœud vulnérable qui concentre les échanges semble antagoniste aux principes de distribution qui régissent Internet, mais c’est ainsi ! Si nous voulons connecter une station de base de position connue qui distribue les corrections aux pseudoranges observés vers des récepteurs mobiles qui veulent se positionner au centimètre près, il faut un serveur NTRIP, ou dans le jargon un NTRIP caster.

Le serveur http://caster.centipede.fr fournit un tel service, mais uniquement si la station est pérenne et validée par ses administrateurs. En l’absence de garantie de ce service, ou parce que notre station de référence se trouve derrière un firewall qui bloque le port 2101 utilisé par défaut, il nous faut fournir notre propre service. Sans réfléchir, une solution gratuite mais propriétaire se trouve dans yccaster de https://yccaster.com/. C’est la solution que nous avons adoptée dans l’urgence en allant expérimenter au Spitzberg pour positionner des balises sur un glacier dont nous voulons cartographier le champ de déplacement. Ce n’est pas malin, car pour autant que nous le sachions, nous avons peut-être participé à un botnet en installant un serveur dont nous n’avons pas consulté les sources, mais la précipitation est toujours source d’imprudence. La solution libre sera décrite plus bas.

Le programme yccaster, fourni comme une grosse archive, s’exécute sans surprise sur un système Debian/GNU Linux stable, se place dans /var/caster et se configure par un fichier YAML dans /var/caster/caster.yml auquel la seule modification que nous apportons est :

caster:
  ...
  address: 0.0.0.0:443
  ...

pour lancer le service sur le port 443 à l’écoute de toute requête entrante, le port 2101 étant bloqué du côté de la station de base par les administrateurs de l’Alfred Wegner Institute (AWI) allemand qui gère le réseau informatique de la station Rabot à Ny-Ålesund.

image-20250417152954-2

Figure 2 : Interface de configuration de la station de base Centipède qui permet de non seulement émettre les messages vers leur serveur, mais aussi vers tout autre serveur acceptant les connexions, dont la solution proposée ici (bas).

La station de base est formée d’un récepteur u-blox ZED-F9P connecté à une Raspberry Pi (3) exécutant l’image fournie par Centipède (https://docs.centipede.fr/docs/base/Installation.html) puisque ce projet autorise à configurer sa station de base pour émettre des trames de correction RTCM vers tout serveur NTRIP et pas uniquement caster.centipede.fr (Fig. 2), voire de dupliquer les échanges en proposant deux configurations de casters NTRIP. Côté serveur, l’exploitation du port 443 interdit bien entendu qu’un serveur web (Apache) s’exécute en même temps. Le mot de passe n’est pas pris en compte et n’importe quelle chaîne de caractères (non vide) conviendra.

Cette solution est fonctionnelle, mais ne respecte pas le précepte de n’utiliser que des logiciels libres dont nous pouvons consulter les sources pour en valider la sécurité et en corriger les dysfonctionnements. Une alternative à yccaster est le vénérable https://github.com/goblimey/ntripcaster et en particulier https://github.com/goblimey/ntripcaster/tree/master/ntripcaster qui, bien qu’écrit en 2008, fournit un service similaire. Ce programme fournit les services de NTRIP1 (et non de NTRIP2 [6]), largement suffisants pour nos objectifs. Nous n’avons pas réellement cherché à comprendre comment fonctionne son système de configuration puisque l’entête des paramètres par défaut est limpide avec src/ntripcaster.h qui contient :

#define DEFAULT_PORT 8000
#define DEFAULT_ENCODER_PASSWORD "sesam01"

donc le port par défaut du serveur (tant pour les services de corrections que pour les récepteurs mobiles) et un mot de passe à fournir dans l’interface de la station de base Centipède pour que la connexion soit effective. Contrairement à yccaster, ce programme ntripcaster veut absolument que la station de référence s’authentifie avec DEFAULT_ENCODER_PASSWORD, tandis que le mot de passe sera omis pour les stations mobiles. Si nous conservons les paramètres par défaut, alors la station Centipède se configure avec :

Caster address: 65.21.30.42
Caster port: 8000
Caster password: sesam01
Mount name: JMF
Rtcm messages: 1004,1005(10),1006,1008(10),1012,1019,1020,1033(10),1042,1045,1046,1077,1087,1097,1107,1127,1230
Receiver options: -TADJ=1

dont les deux dernières lignes restent inchangées par rapport à leur valeur par défaut, et nous validons que la station de base communique ses corrections au serveur NTRIP qui les renvoie aux clients au moyen du programme fourni par RTKLib exécuté comme :

str2str -in ntrip://65.21.30.42:8000/JMF

que le lecteur pourra reproduire sur les services de Centipède avec :

str2str -in ntrip://caster.centipede.fr:2101/ENSMM -out file://240911_RTCM.bin

pour permettre un post-traitement en cas de perte de connexion internet sur le terrain.

Si tout se passe bien, cette commande affichera des séquences binaires que sont les messages de correction RTCM, qui sont utilisés pour corriger la position de l’antenne mobile (rover) recevant les signaux bruts (UBX -> RAWX) d’un ZED-F9P connecté par USB au PC qui exécute depuis RTKLib :

$ rtkrcv -s -o RTKlib_NTRIP.conf
rtkrcv> satellite
 
SAT C1    Az   El L1 L2 Fix1 Fix2    P1Res P2Res   L1Res   L2Res  Sl1 Sl2 Lock1 Lock2 Rj1 Rj2
G06  -  91.0  7.7  -  -    -    -    0.000  0.000  0.0000  0.0000   0   0     0     0   0   0
G10 OK 281.1 15.1 OK OK HOLD HOLD    0.213 -0.245  0.0053  0.0023   0   0   166   166   0   0
G12 OK 245.4 70.8 OK OK HOLD HOLD    0.349 -0.109  0.0020  0.0012   0   0   166   166   0   0
G15 OK 177.5 19.4 OK OK HOLD HOLD    0.133  0.009  0.0030  0.0066   0   0   166   166   0   0
G17 OK  41.6 19.7 OK OK HOLD HOLD    0.353 -0.096 -0.0008 -0.0087   0   0   166   166   0   0
G19 OK  63.2 38.7 OK  - HOLD    -    0.104  0.000  0.0009  0.0000   0   0   166     0   0   0
G22  -  59.0  7.3  -  -    -    -    0.000  0.000  0.0000  0.0000   0   0     0     0   0   0
G23  - 244.0  6.6  -  -    -    -    0.000  0.000  0.0000  0.0000   0   0     0     0   0   0
G24 OK 107.8 75.8 OK OK HOLD  HOLD   0.000  0.000  0.0000  0.0000   0   0   166   166   0   0
G25 OK 246.4 30.5 OK OK HOLD  HOLD  -0.102  0.083 -0.0035 -0.0131   0   0   166   166   0   0
G32 OK 314.6 23.9 OK OK HOLD  HOLD  -0.040  0.082  0.0019 -0.0034   0   0   166   166   0   0
R01 OK 313.7 36.0 OK OK HOLD  HOLD  -0.001 -0.023  0.0089  0.0044   0   0   166   166   0   0
R07 OK 189.8 11.1 OK OK FLOAT FLOAT -0.201  0.556  0.0117  0.0130   0   0     0     0   0   0
R08 OK 230.5 45.5 OK OK HOLD  HOLD   0.244  0.000  0.0053  0.0000   0   0   166   166   0   0
R09 OK  64.7 30.9 OK OK HOLD  HOLD  -0.346 -0.300  0.0049 -0.0017   0   0   166   166   0   0
R10 OK  13.6 66.3 OK  - HOLD     -   0.000  0.000  0.0000  0.0000   0   0   166     0   0   0
R11 OK 278.7 37.2 OK OK HOLD  HOLD  -0.071  0.076  0.0095  0.0034   0   0   166   166   0   0
R18  -  11.7  8.8  -  -    -     -   0.000  0.000  0.0000  0.0000   0   0     0     0   0   0
R19 OK  50.3 27.1 OK OK HOLD  HOLD   2.166 -0.165  0.0033 -0.0048   0   0   166   166   0   0
R20 OK 118.1 18.6 OK OK HOLD  HOLD   0.890  0.203 -0.0014 -0.0115   0   0   166   166   0   0
E04 OK 307.8 35.6 OK OK HOLD  HOLD  -0.055 -0.063  0.0009  0.0005   0   0   166   166   0   0
E06 OK 319.8 13.1 OK OK FLOAT FLOAT -0.098 -0.038  0.0023 -0.0007   0   0     0     0   0   0
...

Par ailleurs, nous pouvons nous convaincre que nous recevons des flux de données du port série /dev/ttyACM0 auquel est connecté le récepteur ZED-F9P ainsi que depuis le serveur NTRIP par connexion internet au moyen de la commande stream de rtkrcv :

Stream       Type     Fmt   S    In-byte  In-bps   Out-byte Out-bps Path                     Message
input rover  serial   ubx   C    1166608   35428          0       0 ttyACM0:115200:8:n:1:off /dev/ttyACM0
input base   ntrips   rtcm3 C     344610   17269          0       0 :@65.21.30.42:8000/JMF   65.21.30.42/JMF
input corr   -        rtcm2 -          0       0          0       0                          
output sol1  file     xyz   C          0       0      33374    1153 ./sortie.txt             
output sol2  -        nmea  -          0       0          0       0 /tmp/mafifo              
log rover    -        -     -          0       0          0       0                          
log base     -        -     -          0       0          0       0                          
log corr     -        -     -          0       0          0       0                          
monitor      -        llh   -          0       0          0       0                          

et finalement la solution fournie par RTKLib, de type FIX indiquant que la solution RTK a été obtenue avec une résolution centimétrique :

rtkrcv> solution
...
2024/10/02 18:14:54.0 (FIX   ) N:47 15 05.6550 E: 5 59 35.4796 H: 357.378 A: 2.0 R: 74.5 N:29
2024/10/02 18:14:55.0 (FIX   ) N:47 15 05.6550 E: 5 59 35.4796 H: 357.378 A: 2.0 R: 74.1 N:29
2024/10/02 18:14:56.0 (FIX   ) N:47 15 05.6550 E: 5 59 35.4796 H: 357.378 A: 2.0 R: 73.7 N:29
...
2024/10/02 18:19:11.0 (FIX   ) N:47 15 05.6551 E: 5 59 35.4796 H: 357.379 A: 1.0 R: 81.1 N:27
2024/10/02 18:19:12.0 (FIX   ) N:47 15 05.6551 E: 5 59 35.4797 H: 357.378 A: 2.0 R: 81.0 N:27
...

Pour atteindre ces résultats, nous avons exploité le fichier de configuration RTKlib_NTRIP.conf qui contient comme seules lignes importantes :

pos1-posmode       =kinematic
...
inpstr1-type       =serial     
inpstr2-type       =ntripcli   
inpstr1-path       =ttyACM0:115200:8:n:1:off
inpstr2-path       =:@65.21.30.42:8000/JMF
inpstr1-format     =ubx        
inpstr2-format     =rtcm3
outstr1-path       =./sortie.txt
outstr1-format     =xyz        # (0:llh,1:xyz,2:enu,3:nmea)

Le fichier sortie.txt qui contient la solution indique lui aussi, dans un format un peu différent de rtkrcv qui fournissait des latitudes/longitudes/altitude, une solution de la forme :

% (x/y/z-ecef=WGS84,Q=1:fix,2:float,3:sbas,4:dgps,5:single,6:ppp,ns=# of satellites)
% GPST                  x-ecef(m)    y-ecef(m)   z-ecef(m)   Q ns sdx(m) sdy(m) sdz(m)
 
2024/10/02 18:25:39.000 4313726.9632 452872.5077 4661056.3621 1 28 0.0046 0.0029 0.0055
2024/10/02 18:25:40.000 4313726.9638 452872.5072 4661056.3635 1 28 0.0046 0.0029 0.0055
...
2024/10/02 18:32:33.000 4313726.9623 452872.5043 4661056.3650 1 28 0.0045 0.0028 0.0054
2024/10/02 18:32:34.000 4313726.9636 452872.5049 4661056.3608 1 28 0.0047 0.0029 0.0056

donc une solution FIX (type 1 en 6e colonne) de résolution centimétrique (colonnes 8 à 10) pour une position par rapport au centre de la Terre de x=4313726.9632 m, y=452872.5077 m et z=4661056.3621 en exploitant la position de 28 satellites (champ ns) qui transmettent leur position au travers de codes pseudo-aléatoires orthogonaux. Nous reviendrons plus bas sur ce référentiel de coordonnées cartésien (x,y,z) nommé ECEF (section 3) qui a été choisi en fournissant le Fmt=xyz dans la configuration de RTKLib. Cette origine pour le calcul semble naturelle, puisque les satellites de navigation gravitent autour de la Terre, approximée comme une masse ponctuelle en son barycentre.

Lors de nos mesures sur le terrain, nous avons toujours pris soin de laisser tourner une instance de str2str -in ntrip://65.21.30.42:443/JMF -out file://sortie.bin pour conserver une trace des messages de correction et potentiellement les appliquer en post-traitement. En effet, alors que Ny-Ålesund vient d’installer récemment une station de base 4G [7] sub-GHz pour limiter les interférences avec les radiotélescopes permettant de communiquer de la donnée dans un rayon d’une dizaine de kilomètres, la couverture dans un cirque de glacier est incertaine, et sans signal de correction, point de mesure centimétrique. Cependant, une application telle que SW Maps sous Android (propriétaire mais gratuite) sauve un fichier contenant les données brutes venant d’un récepteur ZED-F9P en plus de se connecter au serveur NTRIP pour communiquer les informations de correction : en l’absence de connexion informatique, il sera toujours possible de post-traiter les deux jeux de données pour appliquer les corrections, avec le risque d’une solution qui ne converge pas si la qualité de l’enregistrement est insuffisante. C’est là le principal bénéfice de la solution RTK en temps réel : savoir si la solution centimétrique a été atteinte ou s’il faut attendre pour améliorer la convergence de la solution.

Configuration de SW Maps sous Android pour l’application de corrections RTK en temps réel

Nous avions auparavant [1] plébiscité la version de RTKLib pour Android comme solution pour recevoir deux flux de données – de correction par un serveur NTRIP et un récepteur u-blox ZED-F9P – afin d’appliquer les corrections et fournir la solution centimétrique. Force est de constater que RTKLib ne fonctionne plus sous Android 12, et qu’une alternative doit être trouvée pour poursuivre les mesures avec un téléphone mobile récent. Pour ce faire, nous tirons profit de la capacité d’un ZED-F9P d’exploiter un flux RTCM pour appliquer les corrections et fournir lui-même une solution centimétrique. Malgré la boîte noire que constitue la solution RTK du ZED-F9P, c’est une solution fonctionnelle largement adoptée. Pour ce faire, nous configurons le ZED-F9P pour recevoir les corrections RTCM sur port USB (figure ci-dessous) en vérifiant que cette fonctionnalité est activée au moyen du logiciel u-center, https://www.u-blox.com/en/product/u-center, qui fonctionne néanmoins sous Wine.

image-20250417153215-4

Configuration au moyen de u-center exécuté sous Wine des communications entrante et sortante par port USB du ZED-F9P, ici monté sur une carte « GNSS RTK Click » de Mikroe [8].

Par ailleurs, nous avons besoin d’un logiciel capable de recevoir les trames RTCM du serveur NTRIP, les communiquer au ZED-F9P, et recevoir la solution résultante. La seule solution gratuite, à défaut d’être libre, que nous ayons identifiée est SW Maps. Avec ce logiciel, connecter un ZED-F9P au port USB du téléphone portable se traduit par l’activation du menu USB Serial GNSS. Ayant sélectionné et activé la communication entre le ZED-F9P et le téléphone par interface USB, un nouveau menu s’active sous forme de NTRIP Settings. Nous y renseignons dans Address l’adresse IP de notre serveur NTRIP, sous Port le port (443) que nous avons choisi, sous Mount Point le nom de la station de référence renseignée dans l’interface Centipède, et si tout se passe bien avec une connexion fonctionnelle, nous sommes informés du transfert de données de quelques kilo-octets/seconde et des paramètres de la station de référence.

image-20250417153146-3

De gauche à droite : connexion du ZED-F9P par lien USB avec le téléphone mobile ; activation de la connexion NTRIP pour obtenir les signaux de correction depuis le serveur, et validation de la liaison (vert) avec en bas le flux de données (ici, 1331 octets/s). À droite, la solution RTK Fix d’incertitude centimétrique, et en vert l’enregistrement des données brutes pour post-traitement en cas d’absence de liaison informatique sur le terrain.

Lors de l’installation de la station de base, nous devons commencer par la position avec précision et exactitude. Pour ce faire, Centipède préconise d’enregistrer les données brutes (pseudoranges en code et en phase) observées par le récepteur de la station de base pendant 24 h, et calculer la solution précise PPP en exploitant les informations précises de position des satellites dans le ciel et de leur horloge, publiées par l’IGS, l’International GNSS Service dont les produits sont disponibles à https://cddis.nasa.gov/archive/gnss/products/ sous réserve de dévoiler son identité en fournissant une adresse e-mail. Alors que RTKLib sait effectuer ce calcul, une solution en ligne proposée par Centipède est d’utiliser le service de l’IGN qui ne fonctionne que sur le territoire français, et sinon le service canadien du NRCAN (Natural Resource of CANada) à https://webapp.csrs-scrs.nrcan-rncan.gc.ca/geod/tools-outils/ppp.php. Ici aussi, il faut dévoiler son e-mail pour accéder au service, qui demande un fichier RINEX d’observations toutes les 30 secondes : ce fichier est par exemple produit depuis le fichier UBX sauvé par un récepteur u-blox ZED-F9P par convbin -t 30 fichier.ubx pour produire le fichier d’observations .obs requis. Le traitement se fera en mode statique, la station de base n’étant pas mobile, et nous voyons apparaître le problème qui va se poser dans la suite quand nous devons remplir les champs concernant le référentiel avec soit NAD83, soit ITRF, et si le second choix est sélectionné alors « Vertical datum » impose CGVD2013. Afin d’exploiter convenablement les informations fournies par le récepteur mobile qui se référencera par rapport au récepteur fixe, nous devons comprendre le sens de ces acronymes. « ITRF » est International Terrestrial Reference system and Frame qui définit notamment la position de la Terre dans l’espace et sa forme, tandis que NAD83 est la même définition, mais pour l’Amérique du Nord. Comme nous travaillons en Europe, le choix d’ITRF semble naturel. Ensuite, CGVD2013 pour Canadian Geodetic Vertical Datum of 2013 propose la définition de l’altitude pour le Canada. Lorsque nous obtenons la solution du NRCAN sur la position de la station de référence, calculée une quinzaine de jours après la mesure pour exploiter les solutions les plus précises publiées par IGS, nous sommes informés de la solution en Fig. 3, entourée en rouge pour indiquer 52,165 m. Cela semble excessivement élevé, surtout que le site norvégien Toposvalbard à https://toposvalbard.npolar.no/ indique une élévation de 13 m. Quelle est la source de l’erreur ? Est-ce le fait d’utiliser un référentiel canadien en Europe ? Cela pose la question de la définition de l’altitude. Alors que nous avons l’habitude d’utiliser QGIS pour convertir d’un mode de projection horizontal vers un autre – par exemple de coordonnées sphériques vers un plan tangent local – ce logiciel ne nous sera pas d’une grande aide pour convertir des altitudes.

image-20250417153408-1

Figure 3 : Gauche, solution de position précise PPP obtenue sur le site du NRCAN auquel nous avons fourni une observation de 24 h de pseudoranges sous forme de fichier RINEX. L’altitude proposée est 52,165± 0,014 m. Droite, l’institut polaire norvégien indique sur le site Toposvalbard que notre station de référence devrait se situer autour de 13 m d’altitude. Qui a raison ?

Centipède annonce la publication le 26 février 2025 de son caster libre Millipede disponible à https://github.com/pbeyssac/millipede-caster/ et accessible à crtk.net:2101 pour diffuser des messages au format NTRIP v1 ou v2.

2. Exploitation des résultats : qu’est-ce que l’altitude ?

Lors des mesures sur le terrain de positions de cibles approximativement connues, mais affinées par cette solution centimétrique, l’emplacement dans le plan XY était excellent, mais une interrogation se posait sur l’altitude Z. En effet, Fig. 4 montre comment un récepteur placé sur une plage au niveau de la mer indique une altitude de 36,8 m. Une telle altitude dans un référentiel arbitraire n’aurait rien de choquant, mais il est certain qu’elle ne qualifie pas d’« au-dessus du niveau moyen de la mer » (above mean sea level). Quel est donc ce référentiel, et comment se relie-t-il au niveau de la mer ?

image-20250417153426-2

Figure 4 : Gauche, montage expérimental avec une antenne bifréquences Septentrio sur un mât de 79 cm de long supportant un récepteur u-blox ZED-F9P connecté au téléphone mobile exécutant SW Maps et recevant par liaison 4G les signaux de correction de la station de référence distante de 485 m ; et évolution de la hauteur de la mer au cours des marées telle que fournie par https://kartverket.no/en/at-sea/se-havniva/result?id=587933&location=Ny-%C3%85lesund. Droite, capture d’écran de SW Maps sur téléphone mobile Android, qui affiche une altitude de 36,8 m alors que les vagues sont visibles en arrière-plan du récepteur !

Les satellites, et en particulier ceux des constellations en orbite moyenne qui transmettent les signaux permettant le positionnement par trilatération, n’ont que faire de la position d’une masse d’eau, et les coordonnées qui sont solution de la mesure du temps de vol des ondes électromagnétiques issues de ces satellites sont fournies par rapport au centre de la Terre (ECEF pour systèmes de coordonnées Earth Centered, Earth Fixed). Ce système cartésien est centré sur le barycentre de la Terre et orienté par rapport aux astres célestes supposés suffisamment loin pour ne pas se déplacer significativement lorsqu’observés depuis la Terre, par des radiotélescopes par exemple.

Comme le positionnement par rapport au centre de la Terre n’est pas très pratique au quotidien, les coordonnées cartésiennes sont projetées sur un ellipsoïde qui tente de plaquer au plus près au patatoïde que forme la surface de la Terre, et en particulier son aplatissement aux pôles dû à la force centrifuge induite par la rotation. Ici encore, le niveau d’un liquide que sont les océans et les mers n’a aucune importance, l’ellipsoïde est uniquement défini arbitrairement pour ne pas trop diverger des masses continentales. Un exemple de tel ellipsoïde est WGS84 – World Geodetic System de 1984 – défini par un demi-grand axe de 6378,137 km, et un aplatissement de 1/298,257223563. L’intersection de la ligne allant du centre de la Terre avec cet ellipsoïde indique la latitude et la longitude, et la distance de la coordonnée cartésienne à la surface de l’ellipsoïde détermine l’altitude. On sent donc bien que la différence entre l’altitude du NRCAN – par rapport à un ellipsoïde – et Toposvalbard vient d’une référence différente d’altitude, ce dernier se référant au niveau de la mer puisqu’interroger sur l’altitude au bord de l’eau indique « 1 m ».

La définition de « niveau de la mer » fournie par [9] ainsi que [3], p.237, est intéressante : il s’agit d’une distribution d’eau selon une équipotentielle du champ de gravité terrestre « In the absence of dynamics or other external forcing, the surface of the ocean should lie on an equipotential of the Earth’s gravity field, called the geoid. » En effet, si le champ de gravité présentait un gradient, alors l’eau s’y écoulerait pour équilibrer le gradient. Nous voyons donc une définition de la surface de l’eau indépendante de considérations célestes nécessaires à définir l’ellipsoïde, mais qui dépend de la distribution de masses sur et dans la planète, sans relation évidente avec la topographie de surface. Ces surfaces diffèrent selon le point de référence choisi, et chaque continent ou zone de surface émergée pourra choisir son point de référence, tel que nous l’avons vu en introduction avec le choix d’un niveau de marégraphe à Marseille pour la France. La relation entre un ellipsoïde et le niveau de l’eau sur une zone géographique émergée n’a aucune raison d’être simple ou rationnelle et ne fait qu’épouser la forme de l’isopotentiel du champ de gravité : la relation entre les deux grandeurs est une carte en deux dimensions associant pour chaque latitude et longitude une différence d’altitude entre niveau de la mer et ellipsoïde.

Même si QGIS ne sait pas convertir des altitudes, il reste une source d’informations utiles. Si nous chargeons des positions référencées en coordonnées sphériques WGS84 (EPSG:4326), nous pouvons les convertir (bouton de droite de la souris sur la couche à convertir et Export -> Save Feature As... pour choisir le nouveau CRS) en ITRF2020 (EPSG:9989) comme l’indique le rapport de mesure de NRCAN (Fig. 3), et le résultat contient des coordonnées identiques dans les trois axes. Nous apprenons par ailleurs qu’il existe un « European Vertical Reference Frame 2000 » nommé EPSG:5129, mais QGIS ne le connaît pas. Par contre, QGIS connaît CGVD2013 (EPSG:6649) que nous avions rencontré auparavant sur le site du NRCAN et lorsque nous tentons de sauver une couche en CRS ITRF2020 vers CGVD2013, QGIS nous fournit l’information fort utile que « This grid is available for download from https://cdn.proj.org/ca_nrc_CGG2013n83.tif. » Ainsi, QGIS nous propose de télécharger ce fichier et le placer dans $HOME/.local/share/QGIS/QGIS3/profiles/default/proj afin de connaître la relation entre altitude de l’ellipsoïde et le géoïde. De façon générale, ces cartes sont disponibles au format GeoTIFF à https://cdn.proj.org/ pour indiquer la différence d’altitude entre ellipsoïde et les géoïdes choisis par les divers continents, et pas uniquement pour le Canada comme nous venons de le faire. Les mers et océans ne sont pas couverts, car que veut dire « au-dessus du niveau de la mer » au milieu du Pacifique quand le mouvement de la Lune et du Soleil font varier de plusieurs mètres chaque jour le niveau du liquide, et en l’absence d’un référentiel fixe qu’est une masse de terre émergée ? Pourtant, ces hauteurs sont bien mesurées par satellite en orbite basse, que ce soient les missions TOPEX/Poseidon de la NASA et du CNES d’altimétrie par RADAR, puis les Jason qui en sont à leur troisième itération, et maintenant Sentinel-6. Par ailleurs, les satellites GRACE observent les variations du champ de gravité en mesurant finement la distance qui les sépare l’un de l’autre alors qu’ils parcourent la même orbite polaire basse.

image-20250417153443-3

Figure 5 : Différence d’altitude entre l’ellipsoïde et le géoïde pour le monde, à gauche en 2D dans QGIS, à droite en 3D avec une figure produite sous GNU/Octave.

Maintenant que nous savons comment identifier l’écart entre l’ellipsoïde WGS84 dans lequel un récepteur de navigation par satellite fournit sa solution, et le niveau moyen de la mer, nous pouvons tracer ces cartes et observer leur évolution (Fig. 5). Cette distribution des altitudes est décrite par l’institut géographique norvégien [10] Kartverket en expliquant dans la section Vertical Datums de leur site fournissant le niveau des marées que « To determine heights and depths we need knowledge about the different vertical datums, and the relationship between them. The relationship between the different datums vary from place to place. These levels are important for different utilizations and it is therefore possible to hide or show some types of datums in the list below. » – le terme datum faisant référence au choix d’une origine.

Tracé d’un champ de potentiel sur une sphère, et l’avenir du géoïde

pkg load mapping
dr=640;                 % radius offset
N=10;                   % decimation
x=rasterread('us_nga_egm08_25.tif');
R=x.data(1:N:end,1:N:end);
n=size(R)(2);
m=size(R)(1);
theta=linspace(0, 2*pi, n);
phi=linspace(-pi/2, pi/2, m);
[theta, phi]=meshgrid(theta, phi);
x=(R+dr).*cos(phi).*cos(theta);
y=(R+dr).*cos(phi).*sin(theta);
z=(R+dr).*sin(phi);
C=sqrt(x.^2+y.^2+z.^2); % color encoding
surf (x, y, z,C);       % (instead of Z)
shading interp;colormap jet;
axis square;axis tight

Programme GNU/Octave pour produire la Fig. 5 (droite) : la lecture d’un fichier GeoTIFF contenant des valeurs représentées en nombres à virgule flottante nécessite d’utiliser la boîte à outils mapping et sa fonction rasterread(), puisque imread() de GNU/Octave interprète les valeurs des pixels comme des entiers codés sur 16 bits.

Nous avons tous vu ces superbes représentations de la distribution d’un champ sur le globe, que ce soit l’intensité du champ magnétique ou ici le champ de gravitation à la surface de la Terre [3], p. 240. Le résultat est surprenamment facile à atteindre en s’inspirant de sphere.m fourni par GNU/Octave dans /usr/share/octave/9.2.0/m/plot/draw/, en ajoutant le concept de rayon (puisque sphere trace une sphère de rayon constant) sous forme de la variable R ci-dessus, et en modifiant la couleur pour non plus dépendre de l’ordonnée (z), mais de la distance au centre de la sphère (variable C ci-dessus). Le programme ci-dessus atteint ce résultat pour la hauteur du niveau moyen de la mer sur le globe terrestre, en amplifiant d’un facteur 104 puisque le rayon moyen ajouté est de 640 m au lieu des 6400 km du rayon de la Terre.

Alors que nous assistions à la présentation de P. Tavella, responsable du temps et fréquence au Bureau International des Poids et Mesures (BIPM), dans laquelle cette illustration apparut, notre attention fut attirée sur le fait que les horloges deviennent si précises que la correction du décalage gravitationnel (gravitationnal redshift) décrit par la relativité générale devient nécessaire pour permettre leur comparaison. En effet, avec des horloges annoncées avec des stabilités relatives meilleures que 10−16, la variation du champ de gravité Δ U induit une variation de fréquence Δ U/c2 avec c la vitesse de la lumière. À la surface de la Terre, Δ U est déterminée par la constante (locale) de gravitation g=9,81 m.s−2 multipliée par la variation de hauteur, de telle sorte que Δ U/c2≃ 9/(3·108)2=10−16/m. Ainsi, déplacer une horloge verticalement de 1 m se traduit par une variation détectable de sa fréquence, induisant la proposition de non plus définir le géoïde sur des considérations astronomiques et géographiques, mais sur des considérations atomiques, tout comme la fréquence a perdu en 1967 sa relation à l’astronomie avec la définition sur une transition micro-onde de l’atome de césium. Nous avons profité de cette illustration des transparents de P. Tavella pour ajouter le profil des continents tel que le contenait sa présentation (voir ci-dessous). Les points représentant les limites des continents sont disponibles au format Shapefile à : https://www.naturalearthdata.com/downloads/10m-physical-vectors/ et en particulier : https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/physical/
ne_10m_land.zip. La boîte à outils mapping de GNU/Octave permet de lire ce format de fichiers.

pkg load mapping
x=shaperead('ne_10m_land.shp');
xx=x(:).X;
yy=x(:).Y;
hold on
R=max(max(R))+2;
for n=1:30:length(xx)
theta=xx(n)*pi/180;
phi=yy(n)*pi/180;
x=(dr+R).*cos(phi).*cos(theta);
y=(dr+R).*cos(phi).*sin(theta);
z=(dr+R).*sin(phi);
plot3(x,y,z,'k.');
end
view([80 30])

Complément au programme GNU/Octave pour lire le contenu d’un fichier au format Shapefile classiquement utilisé par les systèmes de gestion d’informations spatialisées (GIS), extraction des coordonnées, et tracé au-dessus de la surface du potentiel gravitationnel sous forme de points individuels.

image-20250417153811-4

Noter que la NSF américaine propose une jolie version analogique de ce globe à https://web.archive.org/web/20240621165530/https://www.nsf.gov/news/classroom/images/Gravity.pdf

Ainsi, en prenant la carte des différences de hauteurs entre ellipsoïde et géoïde pour la zone où la photographie de la Fig. 4 a été prise, no_kv_arcgp-2006-sk.tif (Fig. 6), et en interrogeant QGIS sur la valeur de la table attributaire dans la zone de prise de vue, nous constatons que l’écart est de 35 m, ramenant bien l’altitude fournie par le récepteur de navigation par satellite à un niveau proche de 0, l’incertitude résiduelle étant attribuée à la marée au moment de la prise de vue et aux 79 cm de mât qui supportent l’antenne de réception GNSS.

image-20250417153843-5

Figure 6 : Mesure de la différence d’altitude entre l’ellipsoïde et le géoïde pour le lieu décrit sur la Fig. 4, permettant de réconcilier mesure et observation.

Le même exercice pour Besançon indique que pour la France, l’écart entre l’ellipsoïde et le géoïde est de l’ordre de 50 m, ce que sait l’application GPSTest sous Android en indiquant Alt (par rapport à l’ellipsoïde WGS84) et Alt (MSL) (par rapport au géoïde Mean Sea Level) tel qu’affiché en Fig. 7.

image-20250417153859-6

Figure 7 : Différence d’altitude entre l’ellipsoïde et le géoïde pour Besançon telle qu’affichée dans QGIS qui a chargé la carte us_nga_egm08_25.tif pour le monde entier (gauche), et solution fournie par GPSTest sous Android (droite). La différence entre Alt et Alt (MSL) de 48 m est bien en accord avec l’information fournie par QGIS au mètre près... mais pas au centimètre ! Même si le récepteur du téléphone mobile n’a pas la prétention d’une exactitude submétrique, l’écart géoïde-ellipsoïde devrait être plus proche : la carte fr_ign_RAF20.tif de https://cdn.proj.org/ indique 48,572 m d’écart avec une grille beaucoup plus fine, c’est mieux.

Le système japonais MADOCA/CLAS

MADOCA [11], Multi-GNSS Advanced Demonstration tool for Orbit and Clock Analysis (https://ssl.tksc.jaxa.jp/madoca/public/public_index_en.html)/CLAS (Centimeter Level Augmentation Service) est un système développé au Japon pour propager des informations de correction des signaux de navigation par satellite pour atteindre la résolution centimétrique en observant sur un réseau dense de stations de référence l’impact de l’environnement dans lequel se propagent les ondes électromagnétiques. Ces informations sont relayées par les satellites géosynchrones QZSS (Michibiki image-20250417155900-1 [12]) conçus pour améliorer la performance du positionnement par les satellites en orbite moyenne. Tomoji Takasu, auteur de RTKLib et de la PocketSDR, a co-rédigé un ouvrage décrivant l’exploitation de la bibliothèque qu’il a développée sur ce sujet (droite). Son analyse s’appuie sur une plateforme d’acquisition et de traitement Mosaic-CLAS produite par Septentrio. L’identifiant des trames RTCM en fonction de la constellation considérée est mentionné succinctement en page 12 de cet ouvrage.

image-20250417154003-8

Conclusion

Installer une station de référence pour le positionnement centimétrique en analysant les perturbations induisant un retard dans la propagation des ondes électromagnétiques et en les corrigeant au niveau du récepteur mobile a été l’occasion de s’interroger sur la nature des solutions fournies et leur interprétation. L’accès à la mesure centimétrique pour un coût modique – la carte d’évaluation de Mikroe est disponible pour 220 euros, mais une antenne de bonne qualité coûte rapidement quelques milliers d’euros ! – va démocratiser l’accès à ces informations et ouvrir de nouvelles perspectives dont l’agriculture de précision est un des exemples qui motive Centipède. Alors qu’un agriculteur n’a probablement que peu d’intérêt pour l’information d’altitude tant que les roues de son tracteur touchent la surface du champ, nombre de sols se déplacent de plusieurs centimètres par an, que ce soit par la fonte des glaciers ou le pompage excessif des nappes phréatiques qui ne portent plus les sols, voir le rebond isostatique induit par le recul des glaces lors de la dernière ère glaciaire. Même en latitude/longitude, le positionnement centimétrique implique de nouvelles problématiques, avec par exemple le continent australien qui dérive de 7 cm/an vers le nord-est ! Au-delà de la position, l’obtention des informations brutes issues des signaux de navigation – les pseudoranges transmis par les serveurs NTRIP – permet de remonter à des mesures aussi fascinantes que le délai troposphérique incluant la quantité d’eau dans l’atmosphère [13].

image-20250417154036-9

Figure 8 : Haut gauche, la station de référence du réseau européen EUREF-IP (EUREF Permanent GNSS Network) située à Besançon. Haut droite, les stations de référence du réseau EUREF-IP situées à Ny-Ålesund au Spitzberg, d’après https://bkgmonitor.gnssonline.eu/cgi-bin/bkgmonitor.cgi?mod=Map&caster=euref-ip.net. Le nom de « Brandal » réfère à l’emplacement des deux nouveaux radiotélescopes installés sur ce site (bas) : la coupole de gauche abritera un LiDAR pour mesurer la distance aux satellites en orbite basse et moyenne, incluant les satellites de Galileo qui sont équipés de catadioptres. Ces radiotélescopes font partie du réseau mondial qui permet de positionner la Terre dans l’espace.

Alors que nous cherchions à identifier les spécifications de NTRIP et en particulier du serveur rédigé par l’institut géographique allemand BKR (Bundesamt für Kartographie und Geodäsie), nous avons découvert à https://igs.bkg.bund.de/ntrip un réseau de services incluant des stations de référence à Besançon et sur notre site d’études au Spitzberg ! (Fig. 8). Les casters NTRIP sont accessibles sur une adresse de la forme euref-ip.net:2101/MOUNT ou igs-ip.net:2101/MOUNT avec la source des signaux de référence MOUNT visible à http://igs-ip.net:2101/ par exemple, mais les requêtes à str2str -in ntrip://login:passwd@euref-ip.net:2101/NYA200NOR0 se soldent par :

2024/10/14 17:38:01 [WC---]          0 B       0 bps (0) connecting...
2024/10/14 17:38:06 [WC---]          0 B       0 bps (0) HTTP/1.1 401 Unauthorized
2024/10/14 17:38:11 [WC---]          0 B       0 bps (0) HTTP/1.1 401 Unauthorized

en l’absence d’authentification. Une fois autorisé par les administrateurs de https://register.rtcm-ntrip.org/cgi-bin/registration.cgi à utiliser le service [14] (la réponse vient d’un humain donc une adresse non professionnelle en .free.fr par exemple suffit, mais on évitera une adresse fournie par Guerilla Mail) et le flux redirigé (-out file://fichier.rtcm3) vers un fichier de sortie d’extension .rtcm3, nous constatons par convbin fichier.rtcm3 que seul le fichier RINEX d’observations .obs correspondant est produit, et aucun fichier de navigation qui permettrait de placer les satellites dans l’espace, connaissance nécessaire pour placer la station de référence au sol. En téléchargeant un fichier de navigation produit en temps réel sur https://cddis.nasa.gov/archive/gnss/data/daily/2024/289/24n/brdc2890.24n.gz pour l’instant de cette observation, nous pouvons calculer la position de la station de référence avec RTKLib par rnx2rtkp -p 0 fichier.obs brdc2890.24n et constater que la solution 78.93033°N, 11.85861°E et une altitude de 79 m correspond bien au site de Kartverket qui porte les antennes de réception de signaux satellitaires. Cependant, l’autorisation d’accès fut accompagnée de la recommandation « Note that data is made available primarily for demonstration and evaluation purposes. The BKG aims to provide an uninterrupted service. In spite of all efforts downtimes cannot be totally avoided. It is important to understand that streams may be interrupted or become unavailable at any time without prior notice. » donc la contribution à Centipède en installant une station de référence que nous maîtrisons ne semble pas totalement inutile. La solution pour euref-ip.net:2101/BSCN00FRA0 de 47.246888°N, 5.989391°E est clairement à l’observatoire de Besançon, comme la Fig. 8 ne le montre pas.

Remerciements

Les missions de terrain au Spitzberg ainsi que les antennes de réception des signaux de navigation par satellite ont été financées par l’Institut polaire Paul-Émile Victor (IPEV). La participation au séminaire à l’Observatoire Royal de la Marine espagnole à laquelle les transparents de P. Tavella furent présentés a été financée par EURAMET, le réseau européen des instituts de métrologie.

Références

[1] J.-M Friedt, « Exploitation des signaux de référence de navigation par satellite pour un positionnement centimétrique : RTKLib fait appel à Centipède et l’IGN pour afficher dans QGIS », Hackable 48 (mai/juin 2023) - https://connect.ed-diamond.com/hackable/hk-048/exploitation-des-signaux-de-reference-de-navigation-par-satellite-pour-un-positionnement-centimetrique-rtklib-fait-appel-a-centipede-et-l-ign-pour-afficher-dans-qgis

[2] J.-P. Snyder, Flattening the Earth: two thousand years of map projections, Univ. of Chicago Press (1997)

[3] J. Lefort, L’aventure cartographique Belin/Pour la Science (2004)

[4] C.C.J.M. Tiberius, Recursive data processing for kinematic GPS surveying, Netherlands Geodetic Commission (1998)

[5] N. Kubo, GNSS Precise Positioning and RTKLIB (2018) à https://www.unoosa.org/documents/pdf/icg/2018/ait-gnss/15a_PPP_RTKLIB.pdf

[6] Le site https://www.use-snip.com/kb/knowledge-base/ntrip-rev1-versus-rev2-formats/ détaille les différences entre NTRIP 1 et 2. On notera que SNIP est une alternative à yccaster et n’est pas plus libre : nous ne l’avons pas testé au cours de cette étude.

[7] T. Nilsen, World’s northernmost research settlement gets mobile phone service, The Barents Observer (27 nov. 2023) à https://www.thebarentsobserver.com/arctic/worlds-northernmost-research-settlement-gets-mobile-phone-service/118555

[8] Mikroe RTK Click à https://www.mikroe.com/gnss-rtk-click est disponible chez Mouser pour 220 euros.

[9] Mark E. Tamisiea & al., Sea level: measuring the bounding surfaces of the ocean, Phil. Trans. of the Royal Society A 372(2025) 20130336 (2014)

[10] Defining Sea Level and Understanding its Causes à https://kartverket.no/en/at-sea/se-havniva/sea-level/defining-sea-level-and-understanding-its-causes

[11] K. Kawate & al., MADOCA: Japanese precise orbit and clock determination tool for GNSS, Advances in Space Research 71(10) 3927–3950 (2023)

[12] Les hiraganas ne sont pas utiles, mais sont juste inclus pour démontrer la supériorité de LaTeX sur les éditeurs de texte WYSIWYG. Chaque caractère japonais est inclus par \newcommand\mi{\textup{\usefont{U}{min}{m}{n}\symbol{'177}}} pour le « mi » par exemple, avec \DeclareFontFamily{U}{min}{}\DeclareFontShape{U}{min}{m}{n}{<-> udmj30}{}.

[13] P. Bosser & al., Water vapour monitoring over France using the low-cost GNSS collaborative network Centipede, European Geoscience Union (2023)

[14] G. Weber & al., Networked Transport of RTCM via Internet Protocol (NTRIP), dans « A Window on the Future, Proceedings of the IAG General Assembly », Sapporo, Japan, 2003, Springer Verlag, Symposia Series, 128 60–64 (2005)



Article rédigé par

Par le(s) même(s) auteur(s)

Débugger un système embarqué, virtuel ou réel, au moyen de GDB et JTAG

Magazine
Marque
Hackable
Numéro
62
Mois de parution
septembre 2025
Spécialité(s)
Résumé

Nous explorons les divers outils permettant de sonder l’état de la mémoire de microcontrôleurs au cours de l’exécution d’un programme pour en identifier les dysfonctionnements ou suivre le statut des variables ou registres internes à l’unité arithmétique et logique. Ces explorations se feront soit sur matériel, soit dans le domaine virtuel des émulateurs, avec ou sans la supervision d’un système d’exploitation.

Sonder un signal différentiel avec un oscilloscope

Magazine
Marque
Hackable
Numéro
61
Mois de parution
juillet 2025
Spécialité(s)
Résumé

Un signal différentiel est caractérisé par la propagation sur deux fils supposés proches, pour subir les mêmes perturbations électromagnétiques, de potentiels opposés pour propager une information, et ces potentiels ne sont pas référencés à une masse, mais l’un par rapport à l’autre. Un oscilloscope ne peut observer qu’un potentiel référencé à sa masse (puisque les normes interdisent « normalement » de déconnecter la masse de la terre pour la rendre flottante), et même si la solution de soustraire la mesure de deux voies pour analyser le signal différentiel est désormais disponible sur oscilloscopes numériques, d’énormes oscillations du secteur à 50 Hz polluent la mesure différentielle. Nous proposons un circuit dédié, à faible coût et facile à assembler, pour convertir le signal différentiel en signal référencé.

Programmation USB sous GNU/Linux : application du FX2LP pour un récepteur de radio logicielle dédié aux signaux de navigation par satellite (2/2)

Magazine
Marque
Hackable
Numéro
59
Mois de parution
mars 2025
Spécialité(s)
Résumé

Depuis que Tomoji Takasu, auteur de RTKLib, a publié à https://github.com/tomojitakasu/PocketSDR son récepteur de radio logicielle dédié aux constellations de navigation par satellite, nous rêvions d’en obtenir une copie. Indisponible commercialement, nous avons donc décidé d’en produire une déclinaison nous-mêmes, en respectant les préceptes de n’utiliser que des outils libres. Nous profiterons de cette nouvelle plateforme de travail pour étudier quelques aspects d’exploitation des signaux de navigation par satellite, de la détection de leurrage à l’asservissement d’un oscillateur à quartz sur la référence de temps produite par les horloges atomiques à bord des satellites, et ce, en tirant parti des connaissances acquises sur la programmation des interfaces USB, et des communications entre logiciels de PocketSDR, GNU Radio et gnss-sdr.

Programmation USB sous GNU/Linux : application du FX2LP pour un récepteur de radio logicielle dédié aux signaux de navigation par satellite (1/2)

Magazine
Marque
Hackable
Numéro
57
Mois de parution
novembre 2024
Spécialité(s)
Résumé

Alors que l’USB est souvent abordé comme un bus émulant un port série, tirer pleinement profit de sa bande passante nécessite d’exploiter les interfaces disponibles les plus appropriées, en particulier Human Interface Device (HID) et transferts en volume (Bulk). Nous proposons d’appréhender le bus USB exposé par le noyau Linux en vue d’en tirer le maximum du débit disponible, et appliquer cette connaissance en réalisant un récepteur de radio logicielle dédié à la réception des signaux de navigation par satellite (GNSS) en bande L (1–2 GHz) grâce au MAX2771. Nous démontrons le bon fonctionnement du circuit avec l’acquisition et le traitement de signaux issus de diverses constellations, de GNSS en orbite intermédiaire MEO et Iridium en orbite basse LEO, observés avec une bande passante pouvant aller jusqu’à 44 MHz.

Les listes de lecture

Communications satellites

7 article(s) - ajoutée le 01/07/2020
La SDR permet désormais de toucher du doigt un domaine qui était jusqu'alors inaccessible : la réception et l'interprétation de signaux venus de l'espace. Découvrez ici différentes techniques utilisables, de la plus simple à la plus avancée...

Rétrocomputing : résurrection de matériel

8 article(s) - ajoutée le 01/07/2020
Au-delà de l'aspect nostalgique, le rétrocomputing est l'opportunité unique de renouer avec les concepts de base dans leur plus simple expression. Vous trouverez ici quelques-unes des technologies qui ont fait de l'informatique ce qu'elle est aujourd'hui.

Outils et matériel pour la SDR

9 article(s) - ajoutée le 01/07/2020
S'initier à la SDR est une activité financièrement très accessible, mais devant l'offre matérielle il est parfois difficile de faire ses premiers pas. Découvrez ici les options à votre disposition et les bases pour aborder cette thématique sereinement.
Plus de listes de lecture