MoonRanger: lunar micro-rover perception.
Software perception for one of the first truly autonomous micro-rovers targeted for the lunar surface. I worked on the stereo reconstruction pipeline, getting disparity data saved and inspectable so the team could debug failures offline.
Context
MoonRanger is a small, fast lunar rover being built at Carnegie Mellon to demonstrate autonomous navigation on the moon, without continuous earth-based teleoperation. The mission targets prospecting for water ice near the lunar south pole, which means the rover has to see and understand the terrain in front of it entirely on its own.
My contribution
I worked on the perception team, on the data side of the stereo reconstruction pipeline: getting disparity and image data flowing, saved, and inspectable so the rest of the team could debug the pipeline.
Concretely, I added the ability to write disparity-map data to disk, storing it as a
grayscale image instead of the CSV format that had been used before, and wired up ROS
image_transport to save image data during a run. Along the way I cleaned up the
codebase, removing dead code and tightening how image data (cv::Mat) was
handled, and added unit tests around the disk-writing functionality.
The motivation is that stereo failures are hard to debug live. A disparity map can look plausible on a screen and still be quietly wrong: bad matches in low-texture regions, edge fattening, or holes where the surface has too little contrast. Being able to dump the raw disparity to disk meant the team could replay a run frame by frame and actually see where the pipeline broke, instead of guessing from a downstream navigation failure.
The stereo pipeline
The rover's depth perception is classical stereo. Two calibrated cameras view the same
scene, and the disparity between a point's position in the two images gives its depth by
triangulation. MoonRanger's pipeline builds on ROS stereo_image_proc, using
block matching to compute the disparity map after a careful stereo camera calibration,
since stereo depth is only ever as good as the calibration behind it. The perception
software runs on NASA's core Flight System (cFS), the flight-software framework the rover
is built on.
Challenges
The moon is a hostile place for stereo vision. The sun sits at a very low angle near the horizon throughout the lunar day, which casts long shadows and produces extremely high-contrast scenes. High contrast actually helps stereo matching, since it gives texture to lock onto, but the long shadows and glare are punishing. We tested in a sandbox rig on the ground; the closest earthly analogy is driving across terrain blanketed after a snowstorm, where the surface is bright, low on texture, and hard to read.
What I learned
This was my first time inside a research codebase actually headed for flight hardware. The bar for testing and reproducibility is different when the system has to run autonomously on the moon with no one able to patch it: every capability needs a way to be inspected and verified offline, and "it works on my machine" isn't a finish line.