Key Points
- cFS Basecamp provides a lightweight environment for learning and adopting NASA’s core Flight System (cFS) as well as creating cFS-based projects for more general STEM education.
- Basecamp minimizes the complexities of the cFS flight and ground system environments so educators can focus on lesson material and not get bogged down with cumbersome workflows.
- Basecamp uses a goal oriented additive model. The initial system is up and running in minutes which can be used to learn and use the cFS. Depending on your goals you can create and add additional apps to learn more advanced concepts.
- Basecamp provides automated app integration so educational projects can include groups of apps that teach system level concepts.
- Basecamp provides an immersive learning environment, so students learn by doing!
Introduction
NASA’s core Flight System (cFS) is a popular open-source flight software platform. The platform uses a layered architecture with the bottom framework layers providing an application runtime environment that is portable across hardware/operating system platforms. NASA has released over a dozen apps that perform mission functions such as onboard file management and stored command execution. Learning and adopting the cFS can be challenging because the cFS framework and apps are documented and released separately and it’s up to the developer to manually combine cFS components into a cFS target and to manually integrate it with a command and telemetry ground system. cFS Basecamp or simply Basecamp is designed to address these challenges. The Basecamp installation includes a cFS Linux target and a lightweight Python GUI used to operate the cFS. The cFS target includes the following apps that provide essential operational functions:
- CI_LAB: Receives commands from the Python GUI and sends them to apps using the cFS messaging system called the Software Bus.
- CI_LAB: Receives commands from the Python GUI and sends them to apps using the cFS messaging system called the Software Bus.
- KIT_TO: Receives telemetry messages from apps over the Software Bus and sends them to the Python GUI.
- KIT_SCH: Sends periodic messages to apps to initiate automated functions and to create a synchronized system.
- FILE_MGR: Performs onboard directory and file management functions in response to commands.
- FILE_XFER: Implements the file transfer algorithms on the flight side so files can be transferred between the flight software and the Python GUI.

The cFS services are like a building’s plumbing and electrical services and the essential architectural app suite provides higher level functions like doorways, elevators and phone systems for the human occupants. A project’s app suite determines the purpose of the building: library, hospital, school etc. Basecamp is designed to educate and facilitate users so they can create app suites to meet their project needs.
Learn the cFS
The initial system can be installed, built and operated in under 10 minutes. Built-in hands-on tutorials provide an immersive cFS learning environment. Additional more comprehensive documentation is also available.
Develop New Apps
Most programmers new to cFS can’t wait to write their first app. The create app tool contains multiple “Hello” app templates to get you started. Each template creates a new app that focuses on a particular design aspect of cFS apps. For example, “Hello World” creates the most basic app that accepts commands and sends a telemetry packet. More advanced templates like “Hello Object” and “Hello Child” focus on design elements that help developers learn how to create more sophisticated apps. In addition to creating the app, the templates contain coding exercises that reinforce app design and coding concepts. These exercises are done within the context of the Basecamp GUI, so no third-party tools are required.
Create New Projects
A key cFS mission design mindset is to think about groups of apps implementing functional requirements within the context of operational scenarios. As you develop an individual app you are concurrently thinking about interfaces to other apps, telemetry message content/rates, storage needs, etc. Basecamp projects help cultivate cFS systems engineering mindsets. Goal oriented projects like “Payload Manager” are automatically created by retrieving libraries/apps from Basecamp’s github repositories (think app store) and building a new cFS target. Space Steps provides detailed instructions for creating and using projects.
Technology Highlights
Multiple technologies drive Basecamp’s design and flexibility:
Electronic Data Sheets
Define what data is received/sent (i.e. commands/telemetry) at an app’s interface and the data’s format. Commands and telemetry messages are defined once and the cFS EDS toolchain creates flight software C code and Python libraries.
JSON Files
Every Basecamp app has a JSON spec file and a JSON runtime initialization file. These files facilitate the automated process of integrating an app into a cFS target.
Application Framework
A shared application framework library provides services that simply and standardize how common app features like accessing the JSON initialization parameters are implemented by each app. The library provides the foundation for the Basecamp app object-based design pattern.
GitHub App Store
Basecamp’s application and library GitHub repositories, combined with the JSON app specs facilitate an app store workflow.
PySimpleGUI
PySimpleGUI is a Python library that simplifies the process of creating graphical user interfaces (GUIs). It acts as a wrapper around more complex GUI frameworks like Tkinter, Qt, WxPython, and Remi, providing a simpler and more intuitive interface.
File Browser
Basecamp’s File Browser GUI simplifies transferring files between the flight and ground systems. It is designed like a desktop browser, so it is intuitive for most users.
Extensible Python GUI
When Basecamp’s Python GUI starts it discovers what built-in tutorials and coding templates exist which makes Basecamp itself customizable. A teacher can customize Basecamp with templates and tutorials that are specific to their curriculum.
Limited Python GUI
This may seem counterintuitive as a technology highlight, but the Python GUI has limited functionality to keep the learning curve small and workflows simple. It is not intended to be a fully functional ground system. Transitioning to a mission ground system requires translating the EDS command and telemetry definitions to a particular ground system.
Related Articles
- Setting up Linux – Space Steps
- Core Flight Software Basics – Space Steps
- Electronic Data Sheets – Space Steps
- cFS Basecamp JSON
- cFS Basecamp App Design
Curated Videos
- Introduction to cFS Basecamp
https://www.youtube.com/watch?v=xNEDNOQnwD8
Curated Links
- cFS Basecamp
https://github.com/cfs-tools/cfs-basecamp - NASA’s core Flight System
https://github.com/nasa/cFS - PySimpleGUI
https://www.pysimplegui.com/

