CraterNav

Terrain-relative navigation in lunar orbit

CraterNav

A spacecraft 100 km above the Moon works out where it is from the craters it photographs, with no help from the ground.

Every 20 seconds of daylight the camera takes a picture. A neural network finds the craters in it, each one is matched to a catalogue of 1.3 million known craters, and a Kalman filter turns the matches into a position. Press play to fly three orbits, or drag the timeline.

Onboard camera
100 km polar orbit · drag to turn the Moon
Time since start
–
Sun above horizon
–
Craters found / identified
–
Position error, crater navigation
–
Without craters
–
Crater navigation (filter estimate) Same filter, no craters (dead reckoning) Night side, no images

How it works

Four stages run every time the camera takes a picture. Each one below runs live in your browser with the project's own data.

1

Render what the camera would see

No camera has flown this orbit, so every image is rendered from the elevation model of NASA's Lunar Orbiter Laser Altimeter: 474 m per pixel, with cast shadows and the reflectance of lunar soil (the lunar-Lambert law).

Fly along the ground track from 84° S to 84° N with the Sun as it was during the flight, or take the Sun yourself. With the Sun low, every rim throws a shadow; with the Sun high, craters flatten into grey. The detector has to cope with both, so training images use Sun elevations from 5° to 70°.

55° S
15°
E
Loading the terrain under the orbit
Under the orbit Drag up or down to move along the orbit
2

Find the craters

A compact U-Net with 0.49 million parameters turns each image into a map of crater rims. A ring-matching step then turns the rims into circles. The network was trained on 4,000 rendered views, on a desktop CPU in under two hours.

These six views come from twelve regions of the Moon that training never saw. Check compares the detections with the catalogue.

3

Recognise them

From its current estimate the filter predicts where each catalogue crater should appear. An error in position shifts all the predictions by about the same amount. Every pair of a detection and a prediction of similar size votes for that shift, and the shift with the most votes wins. A wrong pair cannot win the vote on its own.

Drag the catalogue layer (dashed circles) to give the spacecraft a position error, and watch the vote find it.

Drag to add a position error
Votes: shift between prediction and detection
4

Estimate the orbit

An extended Kalman filter propagates the orbit with the Moon's main gravity terms and updates it with the pixel position of every identified crater. The simulated truth also feels the Earth's tide, which the filter does not model.

Consecutive images overlap by two thirds, so most craters are seen two or three times, and about 190 m of each crater's position error belongs to the crater itself: it comes back every time the crater is seen. The filter therefore estimates each crater's catalogue error alongside the orbit, and never counts the same error twice. The result is a filter that knows how good it is: the error stays inside its own 3σ bounds.

Results

Three orbits at 100 km, 5 h 53 min, starting with a 1 km position error. The same run with an ideal detector (the catalogue itself, with pixel noise, misses and false alarms) shows what the matching and the filter can do on their own.

Trained networkIdeal detector

What limits the accuracy

The map. The network finds crater centres to 0.8 px (about 260 m) in a single image, and most of that error repeats every time the same crater is seen, so averaging more images does not remove it. An ideal detector that sees every crater exactly where the catalogue puts it reaches 36 m.

What happens at night

Half of every orbit is dark and the camera sees nothing. The filter coasts on its gravity model and the error grows, up to a kilometre or so, then collapses within a few images when the Sun comes back. Without craters the error never comes back down: 48 km after six hours.