
▎ 🎮 Piloter Percy · 📊 Tableau de bord · 📚 Documentation dbt · 💻 Code source
L’origine du projet
Il y a quelques années, j’ai visité la Cité de l’espace à Toulouse. J’y ai appris que SuperCam, l’un des instruments principaux du rover Perseverance, a été développé grâce à une collaboration franco-américaine : le CNES et l’IRAP à Toulouse, avec le Los Alamos National Laboratory, pour la NASA.
En voyant la réplique du rover en mouvement, j’ai imaginé une installation interactive où le public pourrait piloter Perseverance, suivre sa télémétrie et découvrir les images qu’il prend réellement sur Mars.
Le défi
Je voulais construire deux choses :
- Une expérience grand public, simple à comprendre en quelques secondes, en français, et pensée pour un musée ou un planétarium.
- Une vraie plateforme de données derrière, automatisée, testée et reproductible. C’est là que se joue ma reconversion vers le data engineering.
L’expérience : piloter Percy

- Un rover 3D avec une physique martienne. Gravité de 3,71 m/s², suspension rocker-bogie, six roues qui tournent et s’orientent. Il se pilote au clavier (QWERTY et AZERTY).
- Un contrôle de mission avec de vraies données. Distance parcourue, altitude du terrain et inclinaison viennent des trajets publiés par la NASA. Le temps-lumière Terre–Mars est calculé en direct à partir des éléments orbitaux du JPL.
- Les caméras du rover. Mastcam-Z, Navcam, Hazcam et WATSON : un clic déclenche l’obturateur et un flash, puis révèle une vraie photo couleur prise sur Mars, avec le sol et le nombre de jours écoulés.
- Bilingue. L’interface est en français par défaut, avec l’espagnol au choix.

La plateforme de données

Le jeu n’est que le dernier maillon d’une petite Modern Data Stack, entièrement gratuite :
| Couche | Outil | Rôle |
| Ingestion | dlt | Charge les trajets et les images brutes de la NASA, de façon incrémentale (curseur sur la date de réception, fusion sur l’identifiant). |
| Entrepôt | DuckDB | Un seul fichier, organisé en couches raw, staging, intermediate et marts. |
| Transformation | dbt | Modélise les données et applique 32 tests de qualité, plus un contrôle de fraîcheur des sources. |
| Orchestration | Dagster | Un graphe d’assets unique, de la NASA aux fichiers du jeu, avec des checks bloquants et une exécution quotidienne. |
| Visualisation | Observable Framework | Un tableau de bord statique sur les données de la mission. |
| CI/CD | GitHub Actions + Pages | Tests à chaque pull request. Chaque jour, les données sont rafraîchies, puis le jeu, le tableau de bord et la documentation sont publiés. |
Un humain dans la boucle. Les règles dbt présélectionnent les photos (couleur, résolution, sans filtres de calibration). Le choix final reste humain, dans un fichier CSV versionné.

Ce que les tests ont révélé
Les tests ont détecté des problèmes réels, invisibles à l’œil nu :
- L’odomètre retombait à zéro. Les arrêts intermédiaires de la NASA n’ont pas de valeur d’odomètre, ce qui faisait plonger le graphique de distance. Les marts ne gardent désormais que les arrêts confirmés.
- Les horodatages étaient décalés. L’heure des photos dépendait du fuseau horaire de la machine. Elle est maintenant convertie explicitement en UTC.
- L’ordre n’était pas déterministe. Deux photos prises à la même seconde changeaient de place d’une exécution à l’autre et déclenchaient des commits inutiles du bot. Un critère de départage (image_id) a corrigé le problème.
Compétences mobilisées
Data engineering : ingestion incrémentale, modélisation en couches, tests de qualité, orchestration par assets, contrats de données, CI/CD, sorties déterministes.
Développement : Python, SQL, JavaScript, Three.js, Vite, tests de bout en bout dans un navigateur headless.
Méthode : prototype rapide avec Claude Code, puis industrialisation par itérations courtes, chacune validée par des tests.
Et maintenant ?
Prochaine étape : transformer ce prototype en installation réelle pour un musée ou un planétarium, et y intégrer les images de SuperCam, l’instrument à l’origine de cette histoire.
Vous travaillez à la Cité de l’espace, dans un planétarium ou dans la médiation scientifique ? Ou vous recrutez un profil en data engineering ? Contactez-moi, j’en discuterais avec plaisir.

