Steve Scandore, the technical lead of the Mars 2020 FSW, talks about the role of Hierarchical State Machines in the Mars Perseverance Software in his keynote address at the recent Embedded Online Conference 2021…
Hierarchical State Machines in Perseverance Flight Software
Among others, Steve explains the role of hierarchical state machines in the Perseverance rover flight software, especially in the “surface component” responsible for traversing the Mars surface. This mission-critical component uses roughly 40 hierarchical state machines.
Here, Steve references the presentation “Modern Embedded Software Goes Beyond the RTOS” by Dr. Samek of Quantum Leaps.
In the live Q&A session following his talk, Steve explains further types of state machines used in the Perseverance mission and why “Samek’s hierarchical state machines” lend themselves particularly well to the event-driven architecture used inside the flight software.
I’d like to clarify a few things: The latest Perseverance Mars mission most likely does NOT use the whole QP framework. My understanding is that they only use the hierarchical state machine implementation (the QEP event-processor component of QP).
NASA JPL has a long standing tradition in those missions going back to Pathfinder from 1997, where they started with VxWorks. Also, the general event-driven software architecture used in ALL those missions comes from JPL and is nicely summarized in a conference paper “Managing Concurrency in Complex Embedded Systems” by Dr. David Cummings:
But it is remarkable that the original software architecture used by JPL has all the characteristics of the event-driven “Active Object” design pattern. Therefore, hierarchical state machines are such a good match.
Here are also some other references to NASA JPL publications, where they describe their use of hierarchical state machines from the “Practical Statechars in C/C++” books: