projects

Geo Acq

Application Go/Wails pour acquérir, visualiser et sauvegarder des trames NMEA issues d'instruments embarqués.

Publié le 4 juin 2026

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 Configuration avec 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 frames pour diagnostiquer les trames reçues en direct
  • un onglet Available inputs pour vérifier les ports série détectés
Geo-acq, vue acquisition principale

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 UDP
  • simulate: génération de trames par le simulateur intégré pour cet instrument
  • disabled: 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, mode configuration

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, mode edition du fichier toml

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, mode terminal

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 table raw-frame

Vue de la table raw-frame

Vue table RMC data

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 Vite en JavaScript
  • configuration par fichiers TOML
  • transports série RS-232 et UDP
  • simulateurs intégrés pour le GPS et le sondeur
  • stockage local SQLite brut et décodé
  • export séparé pour produire des fichiers tabulaires
  • tâches de build avec Taskfile et Makefile

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 TOML brut
  • 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