In 2009, Mike was part of the team which built and operated Moonraker. This robot was designed to excavate and collect simulated lunar regolith (moondust), one of NASA's Centennial Challenges. In 30 minutes it mined and delivered 439 kg, almost twice what the next team accomplished. This earned it the $500,000 first prize.
Mike's defined the software architecture and wrote most of the code for Moonraker. This fell into two main categories:
The system was designed to perform many functions simultaneously. For example, a PID feedback loop monitored a gyro to control the direction of travel, and another controlled the position of the digging mechanism. Video from the four cameras was compressed so it could be sent to the operator.
The operator could "tune" the parameters of the feedback loops in real time, and could even take direct control of the actuators if necessary.
To simulate the time it takes for radio to travel between the Earth and the Moon, the competition organizers added an artificial two-second delay in each direction. This meant that the operator only saw what had happened two seconds in the past, and that any commands sent to the robot would not be obeyed for another two seconds.
Because of this constraint, Mike implemented a technique not used by any of the competing teams. A set of preprogrammed behaviors was put into the robot's control software. These are tasks such as "Move forward one foot" and "Turn right 30 degrees." The operator could decide the sequence of tasks the robot should execute, and send this sequence. Then the operator was free to plan future operations while the robot worked through the sequence.
While all this was going on, the robot was continually reporting its heading and other real-time status information. Because contest rules limited the total bandwidth (data bytes per second), this was continually monitored and displayed to the operator. If necessary, the video feed could be restricted to conserve bandwidth.