TYCHO is a rover teleoperation simulator built on real NASA and USGS elevation data from the Moon and Mars. It models the real signal delay and a co-pilot with labeled uncertainty, and lets you drive it in a browser game. Here is exactly what's real and what isn't.
- Elevation is real
- Lunokhod: LROC NAC DTM NAC_DTM_LUNOKHOD2, 5 m/px native, NASA/GSFC/Arizona State University. Tycho: LROC NAC DTM NAC_DTM_TYCHOPK01, 2 m/px native, resampled to 2.34 m/px for this crop, NASA/GSFC/Arizona State University. Mars (Jezero): USGS CTX DEM M20_JezeroCrater_CTXDEM_20m, 20 m/px, NASA/JPL-Caltech/MSSS/USGS. Chang'e-4: LROC NAC DTM NAC_DTM_CHANGE4, 5 m/px native, NASA/GSFC/Arizona State University. Apollo 17: LROC NAC DTM NAC_DTM_APOLLO17, 5 m/px native, NASA/GSFC/Arizona State University. Apollo 15: LROC NAC DTM NAC_DTM_APOLLO15, 2 m/px native, used at full resolution, NASA/GSFC/Arizona State University. Chang'e 3: LROC NAC DTM NAC_DTM_CHANGE3, 5 m/px native, NASA/GSFC/Arizona State University. All public domain / CC0.
- Moon ground photos are real where shipped
- Where a Moon level ships
albedo-ortho.jpg, the ground brightness comes from the LROC NAC orthophoto made with that site's DTM (for example NAC_DTM_APOLLO17_MOSAIC_5M), NASA/GSFC/Arizona State University, public domain. Each photo's product URL and label bounds sit in its albedo-ortho.json; the photo shares its DTM's map grid, so it is placed by that grid. The photo has its own sun baked in, so it is blended under the game's lighting rather than replacing it. Tycho keeps the shaded rendering of its DEM: the photo's own shadow darkened the peak's shadowed face. Levels without a photo also use the shaded rendering.
- Lunokhod 2's parked position is real
- 25.830°N, 30.914°E, facing southeast with its lid still open, per LROC post 699 "Lunokhod 2 Revisited". The rover model shown there is an illustrative period-accurate silhouette, not a survey model.
- Chang'e-4's landing position is real
- 45.457°S, 177.589°E (±20 m), landed 3 January 2019. Position from LROC post 1087 (elevation -5927 m from Liu et al. 2019's LRO-frame solution), "Chang'e 4 Lander Coordinates" - the frame that matches the shipped DTM; Liu, B. et al. 2019, "Descent trajectory reconstruction and landing site positioning of Chang'E-4 on the lunar farside", Nature Communications 10:4229, report an LRO-frame value that agrees within ~20 m and is the source for the landing date. (Liu et al.'s other, more-often-quoted coordinate, 45.4446°S 177.5991°E, is in a different reference frame - CE2TMap2015 - not this DTM's; using it here would place the goal about 415 m from the real lander.)
- The Apollo 17 LRV's parked position is real
- 20.1896°N, 30.7769°E, elevation -2628 m (±3.2 m), per LROC's "Spacecraft Related Coordinates - 2016 Update". The astronauts drove it there themselves, with no delay at all; TYCHO drives to it remotely from Earth, 1.28 s behind.
- The Apollo 15 LRV and Chang'e 3 positions are real
- Apollo 15 LRV: 26.13174°N, 3.63803°E, elevation -1928 m (±0.5 m). Chang'e 3 lander: 44.1214°N, 340.4883°E, elevation -2630 m (±9.1 m); its Yutu rover: 44.1208°N, 340.4878°E (±12.9 m), shown as a plain marker, not a model. All from LROC's "Spacecraft Related Coordinates - 2016 Update" (lroc.im-ldi.com/images/938). The Chang'e 3 lander is drawn with the same illustrative lander model as Chang'e-4, labeled "model approximated" in game.
- Perseverance's real track is NASA's own data
- At the end of a Jezero run, the orange lines are NASA's rover-reported Perseverance drive segments (the Mars 2020 MMGIS traverse layer, mars.nasa.gov/mmgis-maps/M20/Layers/json/M20_traverse.json, snapshot fetched 2026-09-26 and thinned to one point per 5 m), limited to the part inside this map. "% of your route within 100 m" counts your route in 5 m steps. It is hidden while you drive.
- Other landmark models are illustrative
- Chang'e-4's lander (also used as an approximated stand-in for Chang'e 3), the Yutu marker, and the Apollo 17 and Apollo 15 LRVs are shown at each level's goal as illustrative silhouettes, not survey models. Their position and facing (when known) come from that level's own data files, not invented here; a level without a sourced facing shows its landmark facing south by default.
- Chang'e-4's relay delay is an approximate model
- Chang'e-4 sits on the lunar far side, with no direct line of sight to Earth, so its signal relays through China's Queqiao satellite at the Earth-Moon L2 point. The one-way delay shown (about 1.71 s) is a simplified collinear estimate (Earth-Moon distance plus Queqiao's distance beyond the Moon, from the NASA Moon Fact Sheet and The Planetary Society's reporting on Queqiao's orbit), not a precise ephemeris: Queqiao's real halo orbit varies roughly 47,000-79,000 km from the Moon (Space: Science & Technology, 2021), and the lander sits about 1,400 km from the sub-L2 point, which changes the delay by only about 2 ms - well inside the halo-orbit uncertainty. See
tools/sites/relay.py for the full model and sources.
- Surface detail is procedural
- Small craters, rocks, and regolith texture near the rover are generated decoration, not measured. Only the large-scale elevation shape comes from the real DEM.
- Earth's position is approximate
- Shown at its real apparent size and lit consistently with the sun, but its sky position and the geography visible on it are illustrative, not a precise ephemeris.
- Mars delay is compressed for play
- The real one-way light-time delay is 3 to 22 minutes depending on where Earth and Mars are in their orbits. This game compresses it 15x to 55x (labeled on screen each run) so a sol plan resolves in seconds, not real minutes.
- Rover speed is sped up too
- TYCHO drives up to 3 m/s so a level fits in minutes. For comparison, Perseverance's top speed is 0.152 km/h (about 0.042 m/s) and Lunokhod's was about 2 km/h.
- What you see is the past
- Every position, speed, and slope reading on the HUD is delayed telemetry: it already happened by the time it reaches you. The command you send now will not arrive at the rover for another full delay.
- Modeled drift is a game assumption, not a measured rover figure
- On Jezero, TYCHO's co-pilot steers by a believed position that drifts a little from its true one, currently modeled as about 1% of distance driven. This is the ONLY modeled uncertainty in the game (no invented hazards, no power/thermal/comms-window model), and its size is a game assumption picked for this build, not a sourced real-rover localization-error figure. It never corrupts the control the co-pilot sends, only its read of where it believes it is.
- The Dry run's N=100 was measured, not guessed
tools/measure_fixture_rate.mjs measured the shipped mixed-outcome Mars fixture's arrival rate over many seed blocks: N=20 block estimates ranged 30% to 65% against a true (N=400) rate near 49%, noisy enough to mislead a plan decision; N=100 block estimates stayed within about 40% to 56%. The dry run always uses N=100 for that reason.
- "Tipped" is not a reachable outcome on the shipped Jezero crop
- The nearest terrain cell at or above the rover's fixed 32° physical tip limit is over 8 km from spawn, and the mission's 75 s stall timeout caps how far any single off-course excursion can travel before the run is forced to stop. No guardrail or drift combination can reach a tip-grade slope within that limit without retuning the drift model (which Flight Rules will not do to make results look interesting) or changing the terrain/mission logic itself.
- Predicted-vs-actual and objectives are computed, not decorative
- The dry run's arrival-rate prediction and the end card's "this run: <outcome>" line come from the same seeded ensemble/physics code the real run uses. Each level's objectives (arrive; on the Moon, beat the delayed-telemetry bot's own measured par time and stay under a slope cap; on Mars, arrive with the co-pilot's reroute assist on) are evaluated from that run's real outcome, never asserted.