{"id":1468,"date":"2026-10-28T13:36:39","date_gmt":"2026-10-28T13:36:39","guid":{"rendered":"https:\/\/javierladino.com\/es\/?post_type=rara-portfolio&#038;p=1468"},"modified":"2026-10-28T13:36:39","modified_gmt":"2026-10-28T13:36:39","slug":"percy-pilotar-el-perseverance-en-marte-con-datos-reales-de-la-nasa","status":"publish","type":"rara-portfolio","link":"https:\/\/javierladino.com\/es\/portfolio\/percy-pilotar-el-perseverance-en-marte-con-datos-reales-de-la-nasa\/","title":{"rendered":"Percy: pilotar el Perseverance en Marte con datos reales de la NASA"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" 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\">Pilotar Percy<\/a> \u00b7 \ud83d\udcca <a href=\"https:\/\/javiladino.github.io\/perseverance\/dashboard\/\" target=\"_blank\" rel=\"noopener\">Panel de control<\/a> \u00b7 \ud83d\udcda <a href=\"https:\/\/javiladino.github.io\/perseverance\/dbt\/#!\/overview\" target=\"_blank\" rel=\"noopener\">Documentaci\u00f3n 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\">El origen del proyecto<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Hace unos a\u00f1os visit\u00e9 la Cit\u00e9 de l&#8217;espace en Toulouse. All\u00ed descubr\u00ed que SuperCam, uno de los instrumentos principales del rover Perseverance, fue desarrollado gracias a una colaboraci\u00f3n franco-estadounidense: el CNES y el IRAP en Toulouse, junto con el Los Alamos National Laboratory, para la NASA.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Al ver la r\u00e9plica del rover en movimiento, imagin\u00e9 una instalaci\u00f3n interactiva donde el p\u00fablico pudiera pilotar a Perseverance, seguir su telemetr\u00eda y explorar las im\u00e1genes reales que captura en Marte.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-2\">El desaf\u00edo<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Quer\u00eda construir dos cosas:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Una experiencia para todo p\u00fablico, f\u00e1cil de entender en pocos segundos, en franc\u00e9s, y dise\u00f1ada para un museo o planetario.<\/li>\n\n\n\n<li>Una verdadera plataforma de datos por detr\u00e1s, automatizada, probada y reproducible. Ah\u00ed es donde entra en juego mi reconversi\u00f3n hacia el <em>data engineering<\/em>.<\/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\">La experiencia: pilotar a Percy<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/javierladino.com\/fr\/wp-content\/uploads\/2026\/10\/mission-control.png\" alt=\"\" class=\"wp-image-1198\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><br>\ud83c\udfae <a href=\"https:\/\/javiladino.github.io\/perseverance\/\">Pilotar Percy<\/a><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Un rover 3D con f\u00edsica marciana:<\/strong> Gravitaci\u00f3n de 3,71 m\/s\u00b2, suspensi\u00f3n <em>rocker-bogie<\/em>, seis ruedas que giran y se orientan. Se pilota con el teclado (QWERTY y AZERTY).<\/li>\n\n\n\n<li><strong>Un control de misi\u00f3n con datos reales:<\/strong> La distancia recorrida, la altitud del terreno y la inclinaci\u00f3n provienen de los trayectos publicados por la NASA. El tiempo de demora de la luz entre la Tierra y Marte se calcula en vivo a partir de los elementos orbitales del JPL.<\/li>\n\n\n\n<li><strong>Las c\u00e1maras del rover:<\/strong> Mastcam-Z, Navcam, Hazcam y WATSON: un clic activa el obturador y un flash, revelando una foto real a color tomada en Marte, con el sol y el n\u00famero de d\u00edas transcurridos.<\/li>\n\n\n\n<li><strong>Biling\u00fce:<\/strong> La interfaz est\u00e1 en franc\u00e9s por defecto, con opci\u00f3n a espa\u00f1ol.<\/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 decoding=\"async\" src=\"https:\/\/javierladino.com\/fr\/wp-content\/uploads\/2026\/10\/camera-photo-1024x579.png\" alt=\"\" class=\"wp-image-1199\"\/><\/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 plataforma de datos<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/javierladino.com\/fr\/wp-content\/uploads\/2026\/10\/infra-1024x941.png\" alt=\"\" class=\"wp-image-1200\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">El juego es solo el \u00faltimo eslab\u00f3n de una peque\u00f1a <em>Modern Data Stack<\/em>, completamente gratuita:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><td><strong>Capa<\/strong><\/td><td><strong>Herramienta<\/strong><\/td><td><strong>Rol<\/strong><\/td><\/tr><\/thead><tbody><tr><td>Ingesta<\/td><td>dlt<\/td><td>Carga los trayectos y las im\u00e1genes brutas de la NASA de forma incremental (cursor en la fecha de recepci\u00f3n, fusi\u00f3n por identificador).<\/td><\/tr><tr><td>Almac\u00e9n (<em>Data Warehouse<\/em>)<\/td><td>DuckDB<\/td><td>Un solo archivo, organizado en capas <em>raw<\/em>, <em>staging<\/em>, <em>intermediate<\/em> y <em>marts<\/em>.<\/td><\/tr><tr><td>Transformaci\u00f3n<\/td><td>dbt<\/td><td>Modela los datos y aplica 32 pruebas de calidad, adem\u00e1s de un control de frescura de las fuentes.<\/td><\/tr><tr><td>Orquestaci\u00f3n<\/td><td>Dagster<\/td><td>Un gr\u00e1fico de <em>assets<\/em> \u00fanico, desde la NASA hasta los archivos del juego, con validaciones bloqueantes y ejecuci\u00f3n diaria.<\/td><\/tr><tr><td>Visualizaci\u00f3n<\/td><td>Observable Framework<\/td><td>Un panel de control est\u00e1tico con los datos de la misi\u00f3n.<\/td><\/tr><tr><td>CI\/CD<\/td><td>GitHub Actions + Pages<\/td><td>Pruebas en cada <em>pull request<\/em>. Todos los d\u00edas se actualizan los datos y luego se publican el juego, el panel de control y la documentaci\u00f3n.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Un humano en el flujo:<\/strong> Las reglas de dbt preseleccionan las fotos (color, resoluci\u00f3n, sin filtros de calibraci\u00f3n). La selecci\u00f3n final sigue siendo humana, registrada en un archivo CSV versionado.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/javierladino.com\/fr\/wp-content\/uploads\/2026\/10\/dashboard-1024x645.png\" alt=\"\" class=\"wp-image-1201\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udcca <a href=\"https:\/\/javiladino.github.io\/perseverance\/dashboard\/\" target=\"_blank\" rel=\"noopener\">Panel de control<\/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>Lo que revelaron las pruebas<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Las pruebas detectaron problemas reales que eran invisibles a simple vista:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>El od\u00f3metro se reiniciaba a cero:<\/strong> Las paradas intermedias de la NASA no incluyen valor de od\u00f3metro, lo que hac\u00eda caer la gr\u00e1fica de distancia. Ahora las <em>marts<\/em> solo conservan las paradas confirmadas.<\/li>\n\n\n\n<li><strong>Desfase en las marcas de tiempo:<\/strong> La hora de las fotos depend\u00eda de la zona horaria de la m\u00e1quina. Ahora se convierte expl\u00edcitamente a UTC.<\/li>\n\n\n\n<li><strong>El orden no era determinista:<\/strong> Dos fotos tomadas en el mismo segundo cambiaban de posici\u00f3n entre ejecuciones, generando <em>commits<\/em> innecesarios del bot. Se a\u00f1adi\u00f3 un criterio de desempate (<code>image_id<\/code>) para corregir el problema.<\/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\">Competencias aplicadas<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ingenier\u00eda de datos:<\/strong> Ingesta incremental, modelado en capas, pruebas de calidad, orquestaci\u00f3n por <em>assets<\/em>, contratos de datos, CI\/CD y salidas deterministas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Desarrollo:<\/strong> Python, SQL, JavaScript, Three.js, Vite, pruebas de extremo a extremo (<em>E2E<\/em>) en un navegador <em>headless<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Metodolog\u00eda:<\/strong> Prototipado r\u00e1pido con Claude Code y posterior industrializaci\u00f3n en iteraciones cortas, cada una validada mediante pruebas.<\/p>\n\n\n\n<h4 class=\"wp-block-heading has-vivid-purple-color has-text-color has-link-color wp-elements-7\">\u00bfY ahora qu\u00e9?<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Pr\u00f3ximo paso:<\/strong> Transformar este prototipo en una instalaci\u00f3n real para un museo o planetario e integrar las im\u00e1genes de SuperCam, el instrumento que dio origen a esta historia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfTrabajas en la Cit\u00e9 de l&#8217;espace, en un planetario o en divulgaci\u00f3n cient\u00edfica? \u00bfO est\u00e1s buscando un perfil en <em>data engineering<\/em>? <a href=\"https:\/\/www.linkedin.com\/in\/jladino\/\">Escr\u00edbeme<\/a>, me encantar\u00e1 conversar al respecto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u258e \ud83c\udfae Pilotar Percy \u00b7 \ud83d\udcca Panel de control \u00b7 \ud83d\udcda Documentaci\u00f3n dbt \u00b7 \ud83d\udcbb Code source El origen del proyecto Hace unos a\u00f1os visit\u00e9 la Cit\u00e9 de l&#8217;espace en Toulouse. All\u00ed descubr\u00ed que SuperCam, uno de los instrumentos principales del rover Perseverance, fue desarrollado gracias a una colaboraci\u00f3n franco-estadounidense: el CNES y el IRAP &hellip; <\/p>\n","protected":false},"author":1,"featured_media":1469,"comment_status":"open","ping_status":"closed","template":"","meta":{"ngg_post_thumbnail":0},"rara_portfolio_categories":[35],"class_list":["post-1468","rara-portfolio","type-rara-portfolio","status-publish","has-post-thumbnail","hentry","rara_portfolio_categories-data-engineer"],"_links":{"self":[{"href":"https:\/\/javierladino.com\/es\/wp-json\/wp\/v2\/rara-portfolio\/1468","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/javierladino.com\/es\/wp-json\/wp\/v2\/rara-portfolio"}],"about":[{"href":"https:\/\/javierladino.com\/es\/wp-json\/wp\/v2\/types\/rara-portfolio"}],"author":[{"embeddable":true,"href":"https:\/\/javierladino.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/javierladino.com\/es\/wp-json\/wp\/v2\/comments?post=1468"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/javierladino.com\/es\/wp-json\/wp\/v2\/media\/1469"}],"wp:attachment":[{"href":"https:\/\/javierladino.com\/es\/wp-json\/wp\/v2\/media?parent=1468"}],"wp:term":[{"taxonomy":"rara_portfolio_categories","embeddable":true,"href":"https:\/\/javierladino.com\/es\/wp-json\/wp\/v2\/rara_portfolio_categories?post=1468"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}