CMU Lunar Rover

This page details my contributions to Carnegie Mellon’s effort to develop a low-cost, swarmable lunar-rover. Currently, the project has Phase II NASA funding, and we are hoping to land on the moon around 2020. Expect more information to be available down the road, but for now I am limited in what content I am allowed to share on this page, including the rover name. My role included many responsibilities including:

  • One of three main firmware developers for the onboard software
  • Lead operator interface developer
  • Validation and fabrication of the single board computer, as well as power systems work on the actual design and routing.

The majority of my work was done in Spring 2018 when I connected with the team for the first time since Summer 2016. I took a leading role with several other software team members to design from scratch the software and hardware for this generation of the rover. This initiative resulted in the first driving, functional SBC in nearly three years of development of the project prior to this work. Unfortunately, much of this work is confidential so I can go into limited detail here.

This is one of the best learning experiences I’ve had at Carnegie Mellon, and helped teach me not only a significant amount about embedded systems engineering – both software and hardware, but also about *systems* engineering under in general. CubeRover is in early development, so while technical requirements are well-defined and tight, mission-level requirements are extremely loose and in a state of constant flux. The project is used as a learning-experience for many undergrad/grad students, so inter-semester turnover is very high. This leads to overall stagnation most semesters, so I am proud to have been on the team in a time of significant improvement and progress. A couple other students and I took significant ownership over avionics during my time on the project, which allowed us to move very quickly and formalize mission requirements for avionics development. The rover prototype we developed in Spring 2018 was even featured on Discovery Channel Canada in May 2018.

The Rover:

This is a test platform specifically for testing our avionics equipment and control software, and it does not represent the actual appearance and form of the final rover. However, it handles significantly well in sandbed testing, and is being entirely controlled by software built by the Spring 2018 avionics. The rover on the left was built to house our custom avionics system, and I created the laser cut board mounts. The rover on the right is a more flight-accurate prototype built to perform mobility and robustness tests. We took both rovers to NASA’s Glenn Research Facility in May 2018 to perform tests. Expect to see footage on Discovery Channel Canada’s “Daily Planet” program!


Here we are at the SLOPE lab at NASA’s Glenn Research Center for mobility testing.  You can see both the avionics-equipped rover and the mobility-testing rover which features a flight-representative carbon-fiber unibody and aluminum wheels. Behind our rovers is the much larger Scarab rover which was also designed at Carnegie Mellon University. Scarab was designed to drive in dark craters in the lunar polar regions, hence it’s lack of a solar array.

Rover demo:

This video shows obstacle navigation of the rover test bed:

This video shows reverse traversal of the rover test bed:


My primary contribution to the project was my work as one of three software engineers working on the firmware for the main processor. We developed software in C for a FreeRTOS running on an TI Hercules automotive microcontroller. Due to the critical nature of the mission, all software needs to be written safely with reliable execution, and we worked to the specifications outlined by JPL’s safe coding practices. A significant aspect of the software development is the fully-custom telemetry/command protocol, developed specifically for the high-latency, low-bandwidth application of space-robotics.

I specifically wrote threads for sensor management, communications, and motor control, as well as drivers for sensors. I learned a significant amount of good firmware practices from my peers, John Lore and Jae Choi, who worked on FreeRTOS task management, BLDC motor control, and IMU filtering.

Overview of a Hercules RM42 Processor:

Operator Interface

I took the lead developer role on the software interface for the rover, which has been primarily used for testing our avionics pipeline. The interface displays, graphs, and logs real-time telemetry data from the rover, and allows for command and control of the rover’s various onboard systems. The interface was written in C++ using the Qt framework, and communicates via a TCP socket connected to the rover.


I worked closely with a colleague, Jae Choi, to develop a single-board computer (SBC) for the current iteration of the rover. To date, this is the most successfully avionics SBC that we have used, and it has resulted in nearly-flawless system bring-up. We have successfully driven three-phase brushless DC-motors (bldc), on-board IMU filtering, thermal monitoring, encoder feedback, and radio-operations from the main microprocessor, a Texas Instruments Hercules RM42.

In Summer of 2018 I designed an 8-layer board for the FPGA-based video-processing pipeline, which included 2 parallel camera interfaces, memory interfaces, and an Altera (Intel) Cyclone-10 FPGA. This board has not yet been fabricated.


Comparison to older boards:

3d model: