Files
mars-rover/ROADMAP.md
Franck Garnier 8f49bb3e1e Initial commit: project plan and roadmap
Mars Rover VR Project — 5-phase plan from panorama stitching
to immersive VR on Meta Quest 3.

Phases:
1. Image Collection & Database (complete)
2. Panorama Stitching Pipeline (in progress)
3. Equirectangular/Spherical Output
4. 3D Assets (rover model + photogrammetry terrain)
5. VR Application (Meta Quest 3)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 22:03:11 -04:00

5.9 KiB

Mars Rover — Project Roadmap

Phase 1: Image Collection & Database (COMPLETE)

  • NASA API integration (v1 API for Curiosity, RSS API for Perseverance)
  • MySQL database with photos metadata (mast_az, mast_el, sol, camera, etc.)
  • Automated weekly collection (cron: Curiosity Fri 3AM, Perseverance Sat 6AM)
  • 818K+ Curiosity photos, 365K+ Perseverance photos indexed
  • Camera specifications reference document

Scripts: /mnt/astro/mars_rovers/scripts/ on homelab


Phase 2: Panorama Stitching Pipeline (IN PROGRESS)

Completed

  • Docker container with Hugin 2024 CLI + Python + OpenCV
  • CLAHE + vignette preprocessing for cpfind feature matching
  • NavCam tile combination (01+04 with 16px overlap blending)
  • Automatic panorama sequence detection (sequence_id + azimuth gap analysis)
  • Incremental assembly for large panoramas (80+ images)
  • Camera-adaptive blending (enblend for NavCam, verdandi for Mastcam-Z)
  • Geometry-only optimization (no photometric — prevents overexposure)
  • Deployed on homelab (Docker) and AstroLab mini PC (Docker Desktop)
  • Git repository: mars-panorama-pipeline

In Progress

  • Validate incremental assembly on multiple sols
  • Fix remaining horizon alignment artifacts
  • Optimize autooptimiser performance for 50K+ control points

To Do

  • Batch processing mode (multiple sols in one run)
  • Quality scoring (automated detection of bad panoramas)
  • Web gallery for browsing generated panoramas
  • Curiosity panorama support (no mast_az — needs different approach)

Repository: mars-panorama-pipeline


Phase 3: Equirectangular / Spherical Output

To Do

  • Validate equirectangular projection covers full 360° x 180°
  • Handle partial coverage (fill sky/ground with gradient or procedural texture)
  • HDR output for better VR rendering (exposure bracketing from multiple images)
  • Multiple resolution tiers (preview 2K, standard 4K, high 8K+)
  • Cubemap conversion option (for real-time VR rendering)
  • Metadata embedding (sol, location, date, rover position)

Research

  • Investigate nadir/zenith filling techniques for partial panoramas
  • Study how existing Mars VR apps handle incomplete coverage
  • Evaluate HDR merging from differently-exposed NavCam images

Phase 4: 3D Assets

Rover Model

  • Perseverance GLB model obtained (65 meshes, 48 materials, 24 textures, 11MB)
  • Inspect and optimize model for real-time VR (LOD, texture compression)
  • Obtain Curiosity 3D model
  • Correct rover scale and orientation
  • Add articulated parts (mast, arm, wheels) for pose matching

Terrain Photogrammetry

  • Select sols with dense multi-angle coverage for photogrammetry
  • Process with Meshroom (installed on AstroLab mini PC)
  • Generate terrain mesh for immediate surroundings (~10m radius)
  • Texture terrain mesh from rover images
  • Merge terrain mesh with spherical panorama background
  • Research: stereo NavCam pairs for depth estimation

Research

  • Evaluate NASA Terrain Relative Navigation (TRN) data for terrain meshes
  • Study existing Mars DTM (Digital Terrain Model) from HiRISE orbital data
  • Investigate using AI depth estimation (MiDaS, Depth Anything) on rover images

Phase 5: VR Application

Platform

  • Choose framework: Unity (C#) vs Unreal (C++) vs native Android (OpenXR/Kotlin)
  • Meta Quest 3 development setup (Meta Developer Hub, ADB)
  • Basic skybox rendering from equirectangular panorama
  • Place rover model at scene center

Features — MVP

  • Load panorama as environment sphere texture
  • Render rover GLB at correct position/orientation
  • Free look (head tracking)
  • Teleport movement around rover
  • Sol selector UI (browse available panoramas)

Features — Enhanced

  • Photogrammetric terrain for near-field realism
  • Transition between sols (fade/morph)
  • Information overlays (camera names, geological features)
  • Day/night lighting based on Mars local time
  • Ambient Mars audio (wind, rover sounds from Perseverance microphone)
  • Multi-user mode (explore together)

Features — Advanced

  • Animated rover (replay drive path between sols)
  • Integration with Mars weather data (MEDA sensor)
  • Orbital view (zoom out to HiRISE map, then zoom in to rover location)
  • Cross-platform (Quest 3 + PC VR + WebXR)

Technical Decisions Log

Date Decision Rationale
2026-04-09 Curiosity API: v1 (mars.nasa.gov) Old NASA API dead (404), RSS API Perseverance only
2026-04-10 CLAHE for cpfind, originals for render CLAHE enables feature matching but degrades visual quality
2026-04-11 No photometric optimization (no -m flag) autooptimiser -m causes severe overexposure
2026-04-11 NavCam tile overlap = 16px Empirically measured, confirmed by pixel diff analysis
2026-04-11 FOV: NavCam combined = 82.17°, MCZ wide = 25.6° Empirical (NavCam), spec sheet (MCZ)
2026-04-12 Docker for pipeline Reproducible, portable, eliminates Hugin version issues
2026-04-12 verdandi for MCZ, enblend for NavCam verdandi eliminates seam overexposure on MCZ
2026-04-12 Incremental assembly for large panoramas Parallel chunks caused orientation flip; incremental preserves coherence
2026-04-12 GLB format for rover model Universal standard, native in Unity/Unreal/Quest

Resources