projects
Geo Acq
Application Go/Wails pour acquérir, visualiser et sauvegarder des trames NMEA issues d'instruments embarqués.
Statut: Prototype en développement
Dépôt: GitHub
Présentation
Geo Acq est une application d’acquisition développée en Go pour décoder des trames NMEA provenant d’instruments embarqués, les afficher pendant l’acquisition et les sauvegarder localement.
Le projet cible des cas d’usage très concrets de terrain: suivre des données de navigation (GPS) ou de mesure, par exemple un sondeur, pendant une opération, vérifier rapidement qu’un flux série RS-232 ou UDP arrive correctement, conserver les trames brutes et préparer une extraction exploitable après la session.
Il existe actuellement une version CLI et une version graphique réalisée avec Wails. Cette interface donne une façade desktop moderne au moteur d’acquisition Go, tout en gardant une base technique simple: configuration TOML, acquisition série ou réseau, stockage SQLite et outils en ligne de commande pour les traitements complémentaires. L’application permet également de simuler certains équipements, à des fins de test ou lorsqu’ils ne sont pas disponibles.
Dans les années 90, nous avions déjà développé un logiciel d’acquisition pour un thermosalinographe (TSG + GPS), écrit en C puis en C++, destiné à être embarqué sur des navires marchands afin de réaliser des mesures de température et de salinité de surface en continu sur des lignes commerciales. Plusieurs variantes avaient aussi été réalisées, par exemple pour des mesures de CO2 dissous dans le cadre du projet ECOA.
Ce programme TSG a ensuite été repris en LabVIEW par un collègue de Nouméa, sous le nom SODA, et cette application est toujours utilisée sur les navires marchands du réseau de l’IRD.
Avec Geo Acq, l’idée est de reprendre ces techniques d’acquisition éprouvées dans un environnement moderne: un langage compilé plus sûr, une interface graphique plus simple à distribuer, une configuration lisible et un stockage local directement exploitable. D’autres approches pourraient produire un résultat voisin, par exemple Python avec PySide6, Go avec Fyne, Rust avec Tauri, ou encore une chaîne plus orientée supervision avec Node-RED et une base de données locale. Le choix Go + Wails garde ici un bon compromis entre exécutable autonome, accès bas niveau aux ports série et interface desktop légère.
Interface graphique Wails
La version GUI est un prototype desktop construit avec Wails, qui associe un backend Go et un frontend web léger. Elle sert d’interface pour charger une configuration, démarrer une session et suivre les instruments sans travailler uniquement dans un terminal.
L’interface actuelle propose:
- une barre de contrôle avec sélection du fichier de configuration, chargement, édition, rafraîchissement des ports, démarrage et arrêt de session
- un onglet
Configurationavec les métadonnées de mission et l’état général de la configuration - un onglet
Device panels, affiché par défaut, avec une carte par instrument configuré - un onglet
Terminal raw framespour diagnostiquer les trames reçues en direct - un onglet
Available inputspour vérifier les ports série détectés

Geo-acq: vue de l’acquisition des données, GPS et Echo sondeur en simulation.
Chaque panneau instrument affiche le nom logique de l’équipement, son transport, son port, son statut, le nombre de trames reçues, les phrases NMEA attendues et les valeurs décodées disponibles. Les latitudes et longitudes sont notamment restituées sous une forme lisible par l’opérateur.
Flux d’acquisition
Une session peut mélanger des équipements réels et des simulateurs. Chaque instrument est configuré avec un mode:
ready: ouverture du transport réel configuré, en série ou en UDPsimulate: génération de trames par le simulateur intégré pour cet instrumentdisabled: instrument ignoré au démarrage de la session
Au démarrage, l’application charge la configuration, ouvre les transports actifs, lit les trames complètes, horodate chaque phrase à la réception, tente le décodage NMEA, met à jour les panneaux de l’interface et écrit les données dans les bases locales si la sauvegarde est activée.

Geo-acq: vue du choix du fichier de configuration.
Ce fonctionnement permet de tester une configuration avant campagne de mesure, de travailler avec un GPS réel et un sondeur simulé, ou de rejouer une chaîne de démonstration sans disposer de tout le matériel.

Geo-acq: vue du mode edition du fichier .toml de configuration.
Instruments et trames
Le projet est orienté vers les instruments produisant des phrases NMEA, en particulier:
- GPS
- sondeur
- radar ou autres sources compatibles NMEA
Le décodage prend déjà en charge plusieurs phrases courantes, notamment les données de position, vitesse, route, satellites et profondeur. Les trames non décodées restent visibles dans le terminal brut et peuvent être conservées dans la base de données.

Geo-acq: vue du mode terminal avec visualisation des trames NMEA GPS et Echo sondeur.
Cette séparation est importante: même quand le décodage applicatif évolue, les observations brutes restent disponibles pour vérification, reprise ou traitement ultérieur.
Sauvegarde et export
La persistance repose sur SQLite, avec deux niveaux possibles:
- une base brute
<mission>-raw.sqlite, centrée sur les trames NMEA reçues - une base décodée
<mission>-data.sqlite, organisée par types de phrases prises en charge
La base brute conserve la mission, la session d’acquisition, l’horodatage UTC de réception, le nom de l’instrument, le transport utilisé, le type de phrase et la charge utile NMEA. La base décodée stocke les champs utiles dans des colonnes typées pour faciliter l’exploitation ultérieure.

Vue de la table raw-frame

Vue de la table RMC
Un outil geo-export complète l’application principale. Il permet d’exporter une base brute ou décodée en TSV ou CSV, avec sélection éventuelle d’une mission ou d’une session précise.
$ bin/geo-export.exe -h
Export geo-acq SQLite data to TSV or CSV.
Usage: geo-export [-cCfhprT] [-m name] [-o file] [-s id] <input.sqlite>
-c, --compact write compact processed output
-C, --csv write CSV output
-f, --full write full output
-h, --help display help
-m, --mission=name
optional mission filter
-o, --output=file output file
-p, --processed export processed SQLite input
-r, --raw export raw SQLite input
-s, --session-id=id
optional session id
-T, --tsv write TSV output
Exemple d’extraction de données
$ bin/geo-export.exe -c examples/dev-data.sqlite
wrote 12 rows to examples/dev-data.tsv
$ cat examples/dev-data.tsv
# datetime_utc latitude longitude speed_knots depth_meters
2026-05-04T01:55:40Z 48.1173000 11.5166667 0.000 15.6
2026-05-04T01:55:40Z 48.1173000 11.5166667 0.000 15.6
2026-05-04T01:55:40Z 48.1173000 11.5166667 0.000 15.5
2026-05-04T01:55:40Z 48.1173000 11.5166667 0.000 15.5
2026-05-04T01:55:40Z 48.1173000 11.5166667 0.000 15.4
2026-05-04T01:55:40Z 48.1173000 11.5166667 0.000 15.8
2026-05-04T01:55:40Z 48.1173000 11.5166667 0.000 15.8
2026-05-04T01:55:40Z 48.1173000 11.5166667 0.000 15.7
2026-05-04T01:55:40Z 48.1173000 11.5166667 0.000 15.5
2026-05-04T01:55:40Z 48.1173000 11.5166667 0.000 15.5
2026-05-04T01:55:40Z 48.1173000 11.5166667 0.000 15.9
Points techniques importants
Le projet repose sur l’architecture suivante:
- backend principal en
Go - interface desktop avec
Wails - frontend
Viteen JavaScript - configuration par fichiers
TOML - transports série
RS-232etUDP - simulateurs intégrés pour le GPS et le sondeur
- stockage local
SQLitebrut et décodé - export séparé pour produire des fichiers tabulaires
- tâches de build avec
TaskfileetMakefile
La version Wails utilise les événements runtime pour propager l’état de l’acquisition et les nouvelles trames vers l’interface utilisateur. Les panneaux instruments et le terminal sont donc mis à jour en direct pendant la session.
État actuel
Geo Acq est une ébauche de projet, mais il dispose déjà d’une base fonctionnelle pour expérimenter une chaîne d’acquisition robuste et fonctionnelle, pouvant être embarquée sur une plateforme légère de type Raspberry PI5 avec écran tactile intégré et une alimentation sur batterie .
Les limites actuelles sont assumées:
- l’édition de configuration se fait encore dans un éditeur
TOMLbrut - les panneaux n’exposent pas encore de formulaires structurés par instrument
- les valeurs décodées restent génériques, sans widgets métier propres à chaque capteur
- il n’existe pas encore de navigateur d’historique de sessions dans l’interface
- une fenêtre de navigation en temps réel reste à impémenter
- adapter une gestion de tampons circulaires sur la restitution des données réduites (suppression de points aberrants)
Public visé
J’imagine surtout Geo Acq comme un outil de terrain: le genre d’application que l’on lance pour vérifier qu’un GPS, un sondeur ou une liaison série parle correctement, garder une trace propre des trames reçues et repartir avec des données exploitables après l’essai ou la campagne.
- techniciens d’acquisition
- développeurs d’outils embarqués ou de bancs de test
- équipes qui veulent vérifier rapidement un flux série ou UDP
- utilisateurs ayant besoin de conserver les trames brutes avant traitement scientifique
Liens
- Dépôt source: GitHub
- Binaires: Github releases