{"id":1196,"date":"2026-10-28T13:23:58","date_gmt":"2026-10-28T13:23:58","guid":{"rendered":"https:\/\/javierladino.com\/fr\/?post_type=rara-portfolio&#038;p=1196"},"modified":"2026-10-28T13:27:07","modified_gmt":"2026-10-28T13:27:07","slug":"percy-piloter-perseverance-sur-mars-avec-de-vraies-donnees-de-la-nasa","status":"publish","type":"rara-portfolio","link":"https:\/\/javierladino.com\/fr\/portfolio\/percy-piloter-perseverance-sur-mars-avec-de-vraies-donnees-de-la-nasa\/","title":{"rendered":"Percy : piloter Perseverance sur Mars avec de vraies donn\u00e9es de la NASA"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"692\" height=\"388\" src=\"https:\/\/javierladino.com\/fr\/wp-content\/uploads\/2026\/10\/demo_percy.gif\" alt=\"\" class=\"wp-image-1197\" style=\"width:840px;height:auto\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><br>\u258e \ud83c\udfae <a href=\"https:\/\/javiladino.github.io\/perseverance\/\" target=\"_blank\" rel=\"noopener\">Piloter Percy<\/a> \u00b7 \ud83d\udcca <a href=\"https:\/\/javiladino.github.io\/perseverance\/dashboard\/\" target=\"_blank\" rel=\"noopener\">Tableau de bord<\/a> \u00b7 \ud83d\udcda <a href=\"https:\/\/javiladino.github.io\/perseverance\/dbt\/#!\/overview\" target=\"_blank\" rel=\"noopener\">Documentation dbt<\/a> \u00b7 \ud83d\udcbb <a href=\"https:\/\/github.com\/javiladino\/perseverance\" target=\"_blank\" rel=\"noopener\">Code source<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-1\">L&rsquo;origine du projet<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Il y a quelques ann\u00e9es, j&rsquo;ai visit\u00e9 la <strong>Cit\u00e9 de l&rsquo;espace <\/strong>\u00e0 Toulouse. J&rsquo;y ai appris que <strong>SuperCam<\/strong>, l&rsquo;un des instruments principaux du rover Perseverance, a \u00e9t\u00e9 d\u00e9velopp\u00e9 gr\u00e2ce \u00e0 une collaboration franco-am\u00e9ricaine : le <strong>CNES<\/strong> et <strong>l&rsquo;IRAP<\/strong> \u00e0 Toulouse, avec le Los Alamos National Laboratory, pour la <strong>NASA<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En voyant la r\u00e9plique du rover en mouvement, j&rsquo;ai imagin\u00e9 une <strong>installation interactive <\/strong>o\u00f9 le public pourrait piloter Perseverance, suivre sa t\u00e9l\u00e9m\u00e9trie et d\u00e9couvrir les images qu&rsquo;il prend r\u00e9ellement sur Mars.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-2\">Le d\u00e9fi<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Je voulais construire deux choses :<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Une exp\u00e9rience grand public,<\/strong> simple \u00e0 comprendre en quelques secondes, en fran\u00e7ais, et pens\u00e9e pour un mus\u00e9e ou un plan\u00e9tarium.<\/li>\n\n\n\n<li><strong>Une vraie plateforme de donn\u00e9es derri\u00e8re<\/strong>, automatis\u00e9e, test\u00e9e et reproductible. C&rsquo;est l\u00e0 que se joue ma reconversion vers le data engineering.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-3\">L&rsquo;exp\u00e9rience : piloter Percy<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"900\" height=\"646\" src=\"https:\/\/javierladino.com\/fr\/wp-content\/uploads\/2026\/10\/mission-control.png\" alt=\"\" class=\"wp-image-1198\" srcset=\"https:\/\/javierladino.com\/fr\/wp-content\/uploads\/2026\/10\/mission-control.png 900w, https:\/\/javierladino.com\/fr\/wp-content\/uploads\/2026\/10\/mission-control-300x215.png 300w, https:\/\/javierladino.com\/fr\/wp-content\/uploads\/2026\/10\/mission-control-84x60.png 84w, https:\/\/javierladino.com\/fr\/wp-content\/uploads\/2026\/10\/mission-control-768x551.png 768w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><br>\ud83c\udfae <a href=\"https:\/\/javiladino.github.io\/perseverance\/\">Piloter Percy<\/a> <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Un rover 3D avec une physique martienne<\/strong>. Gravit\u00e9 de 3,71 m\/s\u00b2, suspension rocker-bogie, six roues qui tournent et s&rsquo;orientent. Il se pilote au clavier (QWERTY et AZERTY).<\/li>\n\n\n\n<li><strong>Un contr\u00f4le de mission avec de vraies donn\u00e9es<\/strong>. Distance parcourue, altitude du terrain et inclinaison viennent des trajets publi\u00e9s par la NASA. Le temps-lumi\u00e8re Terre\u2013Mars est calcul\u00e9 en direct \u00e0 partir des \u00e9l\u00e9ments orbitaux du JPL.<\/li>\n\n\n\n<li><strong>Les cam\u00e9ras du rover.<\/strong> Mastcam-Z, Navcam, Hazcam et WATSON : un clic d\u00e9clenche l&rsquo;obturateur et un flash, puis r\u00e9v\u00e8le une vraie photo couleur prise sur Mars, avec le sol et le nombre de jours \u00e9coul\u00e9s.<\/li>\n\n\n\n<li><strong>Bilingue<\/strong>. L&rsquo;interface est en fran\u00e7ais par d\u00e9faut, avec l&rsquo;espagnol au choix.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"579\" src=\"https:\/\/javierladino.com\/fr\/wp-content\/uploads\/2026\/10\/camera-photo-1024x579.png\" alt=\"\" class=\"wp-image-1199\" srcset=\"https:\/\/javierladino.com\/fr\/wp-content\/uploads\/2026\/10\/camera-photo-1024x579.png 1024w, https:\/\/javierladino.com\/fr\/wp-content\/uploads\/2026\/10\/camera-photo-300x170.png 300w, https:\/\/javierladino.com\/fr\/wp-content\/uploads\/2026\/10\/camera-photo-767x434.png 767w, https:\/\/javierladino.com\/fr\/wp-content\/uploads\/2026\/10\/camera-photo-106x60.png 106w, https:\/\/javierladino.com\/fr\/wp-content\/uploads\/2026\/10\/camera-photo.png 1400w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-4\">La plateforme de donn\u00e9es<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"941\" src=\"https:\/\/javierladino.com\/fr\/wp-content\/uploads\/2026\/10\/infra-1024x941.png\" alt=\"\" class=\"wp-image-1200\" srcset=\"https:\/\/javierladino.com\/fr\/wp-content\/uploads\/2026\/10\/infra-1024x941.png 1024w, https:\/\/javierladino.com\/fr\/wp-content\/uploads\/2026\/10\/infra-300x276.png 300w, https:\/\/javierladino.com\/fr\/wp-content\/uploads\/2026\/10\/infra-768x706.png 768w, https:\/\/javierladino.com\/fr\/wp-content\/uploads\/2026\/10\/infra-1536x1412.png 1536w, https:\/\/javierladino.com\/fr\/wp-content\/uploads\/2026\/10\/infra-65x60.png 65w, https:\/\/javierladino.com\/fr\/wp-content\/uploads\/2026\/10\/infra.png 1958w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Le jeu n&rsquo;est que le dernier maillon d&rsquo;une petite <strong>Modern Data Stack<\/strong>, enti\u00e8rement gratuite :<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><td><strong>Couche<\/strong><\/td><td><strong>Outil<\/strong><\/td><td><strong>R\u00f4le<\/strong><\/td><\/tr><\/thead><tbody><tr><td>Ingestion<\/td><td>dlt<\/td><td>Charge les trajets et les images brutes de la NASA, de fa\u00e7on incr\u00e9mentale (curseur sur la date de r\u00e9ception, fusion sur l&rsquo;identifiant).<\/td><\/tr><tr><td>Entrep\u00f4t<\/td><td>DuckDB<\/td><td>Un seul fichier, organis\u00e9 en couches raw, staging, intermediate et marts.<\/td><\/tr><tr><td>Transformation<\/td><td>dbt<\/td><td>Mod\u00e9lise les donn\u00e9es et applique 32 tests de qualit\u00e9, plus un contr\u00f4le de fra\u00eecheur des sources.<\/td><\/tr><tr><td>Orchestration<\/td><td>Dagster<\/td><td>Un graphe d&rsquo;assets unique, de la NASA aux fichiers du jeu, avec des checks bloquants et une ex\u00e9cution quotidienne.<\/td><\/tr><tr><td>Visualisation<\/td><td>Observable Framework<\/td><td>Un tableau de bord statique sur les donn\u00e9es de la mission.<\/td><\/tr><tr><td>CI\/CD<\/td><td>GitHub Actions + Pages<\/td><td>Tests \u00e0 chaque pull request. Chaque jour, les donn\u00e9es sont rafra\u00eechies, puis le jeu, le tableau de bord et la documentation sont publi\u00e9s.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Un humain dans la boucle<\/strong>. Les r\u00e8gles dbt pr\u00e9s\u00e9lectionnent les photos (couleur, r\u00e9solution, sans filtres de calibration). Le choix final reste humain, dans un fichier CSV versionn\u00e9.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"645\" src=\"https:\/\/javierladino.com\/fr\/wp-content\/uploads\/2026\/10\/dashboard-1024x645.png\" alt=\"\" class=\"wp-image-1201\" srcset=\"https:\/\/javierladino.com\/fr\/wp-content\/uploads\/2026\/10\/dashboard-1024x645.png 1024w, https:\/\/javierladino.com\/fr\/wp-content\/uploads\/2026\/10\/dashboard-300x189.png 300w, https:\/\/javierladino.com\/fr\/wp-content\/uploads\/2026\/10\/dashboard-768x484.png 768w, https:\/\/javierladino.com\/fr\/wp-content\/uploads\/2026\/10\/dashboard-95x60.png 95w, https:\/\/javierladino.com\/fr\/wp-content\/uploads\/2026\/10\/dashboard.png 1474w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udcca <a href=\"https:\/\/javiladino.github.io\/perseverance\/dashboard\/\" target=\"_blank\" rel=\"noopener\">Tableau de bord<\/a> <\/p>\n\n\n\n<h4 class=\"wp-block-heading has-vivid-purple-color has-text-color has-link-color wp-elements-5\"><br><strong>Ce que les tests ont r\u00e9v\u00e9l\u00e9<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Les tests ont d\u00e9tect\u00e9 des probl\u00e8mes r\u00e9els, invisibles \u00e0 l&rsquo;\u0153il nu :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>L&rsquo;odom\u00e8tre retombait \u00e0 z\u00e9ro.<\/strong> Les arr\u00eats interm\u00e9diaires de la NASA n&rsquo;ont pas de valeur d&rsquo;odom\u00e8tre, ce qui faisait plonger le graphique de distance. Les marts ne gardent d\u00e9sormais que les arr\u00eats confirm\u00e9s.<\/li>\n\n\n\n<li><strong>Les horodatages \u00e9taient d\u00e9cal\u00e9s<\/strong>. L&rsquo;heure des photos d\u00e9pendait du fuseau horaire de la machine. Elle est maintenant convertie explicitement en UTC.<\/li>\n\n\n\n<li><strong>L&rsquo;ordre n&rsquo;\u00e9tait pas d\u00e9terministe<\/strong>. Deux photos prises \u00e0 la m\u00eame seconde changeaient de place d&rsquo;une ex\u00e9cution \u00e0 l&rsquo;autre et d\u00e9clenchaient des commits inutiles du bot. Un crit\u00e8re de d\u00e9partage (image_id) a corrig\u00e9 le probl\u00e8me.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-6\">Comp\u00e9tences mobilis\u00e9es<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Data engineering <\/strong>: ingestion incr\u00e9mentale, mod\u00e9lisation en couches, tests de qualit\u00e9, orchestration par assets, contrats de donn\u00e9es, CI\/CD, sorties d\u00e9terministes.<br><strong>D\u00e9veloppement<\/strong> : Python, SQL, JavaScript, Three.js, Vite, tests de bout en bout dans un navigateur headless.<br><strong>M\u00e9thode<\/strong> : prototype rapide avec Claude Code, puis industrialisation par it\u00e9rations courtes, chacune valid\u00e9e par des tests.<\/p>\n\n\n\n<h4 class=\"wp-block-heading has-vivid-purple-color has-text-color has-link-color wp-elements-7\">Et maintenant ?<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Prochaine \u00e9tape :<\/strong> transformer ce prototype en installation r\u00e9elle pour un mus\u00e9e ou un plan\u00e9tarium, et y int\u00e9grer les images de SuperCam, l&rsquo;instrument \u00e0 l&rsquo;origine de cette histoire.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vous travaillez \u00e0 la Cit\u00e9 de l&rsquo;espace, dans un plan\u00e9tarium ou dans la m\u00e9diation scientifique ? Ou vous recrutez un profil en data engineering ? <a href=\"https:\/\/www.linkedin.com\/in\/jladino\/\">Contactez-moi<\/a>, j&rsquo;en discuterais avec plaisir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u258e \ud83c\udfae Piloter Percy \u00b7 \ud83d\udcca Tableau de bord \u00b7 \ud83d\udcda Documentation dbt \u00b7 \ud83d\udcbb Code source L&rsquo;origine du projet Il y a quelques ann\u00e9es, j&rsquo;ai visit\u00e9 la Cit\u00e9 de l&rsquo;espace \u00e0 Toulouse. J&rsquo;y ai appris que SuperCam, l&rsquo;un des instruments principaux du rover Perseverance, a \u00e9t\u00e9 d\u00e9velopp\u00e9 gr\u00e2ce \u00e0 une collaboration franco-am\u00e9ricaine : le &hellip; <\/p>\n","protected":false},"author":1,"featured_media":1202,"comment_status":"open","ping_status":"closed","template":"","meta":{"ngg_post_thumbnail":0},"rara_portfolio_categories":[35],"class_list":["post-1196","rara-portfolio","type-rara-portfolio","status-publish","has-post-thumbnail","hentry","rara_portfolio_categories-data-engineer"],"_links":{"self":[{"href":"https:\/\/javierladino.com\/fr\/wp-json\/wp\/v2\/rara-portfolio\/1196","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/javierladino.com\/fr\/wp-json\/wp\/v2\/rara-portfolio"}],"about":[{"href":"https:\/\/javierladino.com\/fr\/wp-json\/wp\/v2\/types\/rara-portfolio"}],"author":[{"embeddable":true,"href":"https:\/\/javierladino.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/javierladino.com\/fr\/wp-json\/wp\/v2\/comments?post=1196"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/javierladino.com\/fr\/wp-json\/wp\/v2\/media\/1202"}],"wp:attachment":[{"href":"https:\/\/javierladino.com\/fr\/wp-json\/wp\/v2\/media?parent=1196"}],"wp:term":[{"taxonomy":"rara_portfolio_categories","embeddable":true,"href":"https:\/\/javierladino.com\/fr\/wp-json\/wp\/v2\/rara_portfolio_categories?post=1196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}