Players run excavators on real NASA terrain of the Moon and Mars, in the browser. Every session is recorded as robot training data: what the machine observed, paired with exactly what the human did.

Robots learn manipulation from demonstrations, and there are almost no demonstrations of digging on the Moon. A game can collect them at scale before any hardware launches. See the full loop, and what works today →
Drive an excavator under lunar gravity and do a real job with a measurable goal, like digging a trench to depth along a surveyed line. It's quick to learn and has clear success criteria.
Ten times a second the game logs the machine's pose, velocity, arm and bucket state, load, the terrain around it, task progress, and the player's exact inputs. It also saves robot-camera frames. One shift gives hundreds of labeled frames.
Observation→action pairs are the raw material for imitation learning. Many players add up to a large library of excavation demonstrations, which can be used to train and evaluate autonomy for lunar construction machines.
The terrain is cut from NASA stereo elevation models, and gravity, signal delay, polar lighting and the strength of the regolith use published values: digging takes real force, and lunar traction is scarce. Every session file records its sources. We are just as explicit about what is still approximated. See simulation fidelity →
The left frame is what the player sees. The inset is what the robot sees, and that's what gets recorded. At the end of a shift you can download the whole session as JSON Lines.


A real step record from a session, shortened. The full schema is in the repo.
// goldenpath_session_<id>.jsonl: one line per 100 ms {"t": 13.9, "step": 138, "pose": {"pos": [0.006, -0.078, 5.673], "quat_xyzw": [-0.0328, 0.0012, -0.0077, 0.9994]}, "vel": {"lin": [-0.003, 0.024, -0.998], "yaw_rate": -0.001, "forward_speed": 1.0}, "arm": {"boom": -0.41, "bucket": 0.01, "bucket_edge": [-0.013, -0.815, 1.305]}, "load_m3": 1.359, "digging": true, "dumping": false, "action": {"throttle": 1.0, "steer": 0.0, "arm": -1.0, "bucket": 0.0}, "task": {"progress": 0.3529, "complete": false}, "terrain_patch": [-0.01, -0.014, -0.02, ... 121 heights, 11×11 at 0.5 m], "camera_jpg_b64": "/9j/4AAQ... (192×108 robot cam, every 5th step)"}