Parmi mes petites machines qui tournent en continu à la maison, il y en a une qui regarde le ciel plutôt que le réseau : un décodeur ADS-B, construit autour d’une clé RTL-SDR — et, plutôt que le traditionnel Raspberry Pi, portée sur une carte qui n’était clairement pas prévue pour ça au départ : une NVIDIA Jetson Nano.
ADS-B : écouter les avions se présenter eux-mêmes
L’ADS-B (Automatic Dependent Surveillance-Broadcast) est le système que la plupart des avions modernes utilisent pour diffuser en permanence, sans qu’on leur demande rien, leur position, leur altitude, leur vitesse et leur identité — en clair, sur la fréquence 1090 MHz, à la portée de n’importe qui équipé d’une antenne et d’un récepteur radio bon marché. C’est exactement ce que fait une clé RTL-SDR : un dongle USB initialement conçu pour la télévision numérique terrestre (le chipset Realtek RTL2838, toujours vendu comme adaptateur DVB-T), mais dont la polyvalence en a fait l’outil fétiche de toute une communauté de passionnés de radio logicielle — ADS-B compris.
Le choix du Jetson Nano : du matériel pas vraiment prévu pour ça
Les projets ADS-B grand public tournent presque tous sur Raspberry Pi, avec des distributions clé en main. Ici, le décodage tourne sur une NVIDIA Jetson Nano, une carte pensée avant tout pour l’inférence IA embarquée (vision par ordinateur, robotique), avec un Ubuntu 20.04 LTS « à la sauce NVIDIA » — le système L4T (Linux for Tegra) de NVIDIA, en version R32.6.1, qui ressemble à un Ubuntu standard en surface mais embarque le noyau et les pilotes spécifiques au GPU Tegra de la carte.
Le souci, c’est que les paquets officiels FlightAware (dump1090-fa, piaware) et Flightradar24 (fr24feed) ne sont tout simplement pas prévus pour cette combinaison : ce sont des paquets ARM64 construits comme backports Debian 10 (buster), en ciblant le Raspberry Pi OS classique, pas un Ubuntu Focal maison-NVIDIA. Les faire tourner là a demandé son lot d’essais-erreurs — mises à jour de distribution, dépendances GPS manquantes, services qui refusaient de démarrer, redémarrages répétés pour vérifier qu’une connexion vers les serveurs FlightAware ou Flightradar24 passait bien.
Trois logiciels, une seule clé SDR
Au final, la clé RTL-SDR est exploitée une seule fois, par dump1090-fa (le décodeur ADS-B maison de FlightAware), qui redistribue ensuite le flux décodé en local sur le port 30005. Piaware et fr24feed viennent chacun piocher dans ce même flux déjà décodé plutôt que de rouvrir la clé SDR chacun de leur côté — l’architecture classique quand on veut alimenter plusieurs réseaux de tracking en même temps sans conflit d’accès au matériel. Les trois services tournent aujourd’hui en continu, le feeder PiAware connecté à FlightAware, et la station Flightradar24 identifiée sous l’indicatif T-LFRS55.
Pas besoin de GPS pour la position — juste pour l’heure
Petite précision qui a son importance : la multilatération (MLAT) — la technique qui permet de localiser un avion même quand il ne diffuse pas sa position GPS, en comparant les minuscules décalages de réception du même signal par plusieurs stations au sol — n’a pas besoin d’un GPS embarqué sur la machine pour connaître sa propre position. La position exacte de l’antenne (latitude, longitude, altitude) est tout simplement enregistrée une fois, à la main, dans la configuration de piaware et fr24feed — un point fixe qui ne change jamais, pas la peine d’un capteur GPS pour ça.
Ce qui compte vraiment pour le MLAT, en revanche, c’est la précision de l’heure : chaque station doit dater ses réceptions avec suffisamment d’exactitude pour que le calcul de triangulation ait un sens. Pas de GPS non plus sur cette machine pour ça — elle va simplement chercher l’heure sur le serveur NTP maison (évoqué dans un autre article de ce blog), qui se trouve juste à côté sur le réseau local, et qui lui est synchronisé sur GPS.
Le résultat : une petite boîte qui tourne sans surveillance, qui regarde passer les avions au-dessus de la maison, et qui alimente deux réseaux de tracking mondiaux en parallèle — sans capteur GPS à elle, juste une position connue une fois pour toutes et une heure fiable récupérée sur le réseau local.