← Home
Rocket Test Software 🚀 Oct 30, 2017
Rocket Test Software 🚀
Embedded C & Python

Throughout 2017 I designed a hybrid rocket engine/solid rocket motor testing system with an emphasis on fast design iteration and maximum safety. To do this, I employed a wide array of microcontrollers and custom electronics, as well as building two totally separate software stacks for the autonomous and human control of the system.

The major challenge in building a rocket test system from the ground up was separation of concerns, and performance vs productivity. I chose to go with a three-tiered approach handling complexity:

  • Low-level embedded C on microcontrollers to set state, take sensor data; hard to write and debug, but fast, ~100-1000Hz
  • A middle-level code in Python to connect realtime microcontrollers to the high level UI layer, ~100Hz loop
  • A high-level Python UI layer to visualize state, provide 'test-conductor' control, running fast-ish, around ~40-60Hz

I did a decent job of documenting the work, and regardless, the software for the high-, middle-, and low-levels is all open

HDCS (Human Digital Control Station)

Written in Python

The HDCS was the graphical user interface for 'test actuation', think of it like Mission Control screens.

It was built using PyQt5 and a lot of custom UI elements and communication protocols. Most communication protocols and existing UI software was way too slow for near-realtime operations.

  • All system modules onscreen were easily re-arrangeable, so if the design changed things could be updated quickly
  • Checklist procedures could be defined via the interface, and automatically progress-tracked based on hardware state!

RMC GUI This is what the interface looked like in an idle but armed state

When all states converged to 'the rocket engine should be firing now' a little fire image would ignite - both cute and crucial to tracking the state of things in real time as a test operator!

To showcase the work and gather interest around the open source code, I made a tutorial teaching how it works:

I considered abstracting this GUI software into a MATLAB/Simulink competitor, but at that point I was super burned out and needed to take a big break from both rockets and engineering, generally.

ADCS (Autonomous Digital Control Station)

Written in mostly in C++ with some Python

ADCS was a Linux microcomputer (Raspberry pi) specially configured for a few crucial tasks

  • Stop the test if something goes out of limits or a crucial piece of hardware goes offline
  • Log the data at a high rate for analysis
  • Communicate between the realtime microcontrollers and the non-realtime GUI

Some of the hardware the ADCS communicates with can be seen in a hype-reel I made showcasing the meticulous electronics work

Exoplanet's Rocket Engine

Overall, the Exoplanet project was abandoned in early 2018 as I chose to set my sights on what would eventually become Verse. It was the most intense hardware and software engineering task I've ever undertaken and I learned a ton about building and maintaining complex systems through this project.

Although I never successfuly burned the custom hybrid rocket engine, I did characterize solid rocket motors successfully at a higher resolution than ever before, and proved a number of critical shortcomings in the hybrid rocket I'd designed!

Here are some videos made to document the project

Project published: Oct 30, 2017

❤️ Made with love by Jonny of Earth