Satellite Software

From Stanford SSI Wiki
Jump to navigation Jump to search

Satellites software is responsible for writing the code to operate our satellite-related projects. Currently, the team is working on writing the flight software and payload code for Sequoia (see Sequoia Software).



1. Join the SSI slack, and the #satellites and #satellites-software channels. Joining #satellites-systems is optional, if you want to receive info on systems-level discussions.

2. Come to meetings Thursdays at 10:00 am PST.

3. Create a github account ( and DM @langston and @moritz (the software co-leads) your username

4. Also message @langston and @moritz your Stanford email, so you can get added to the Google Drive.

5. Read Sequoia Software to get a broad understanding of our systems. Also, skim at the slides from our preliminary design review to see the current state of our subsystems.

6. Take a look at the projects below, and see which ones interest you. Message @langston and @moritz which one you want to do, or if you have any questions.

7. Setup your workspace (see below). Some tools are only required for certain projects, but some are required for almost everything, like Git and Pycharm.

Onboarding Projects

Wondering how to start getting involved? You came to the right spot! Take a look at the on-boarding projects here and then contact your software team leads for details. These projects are meant both as a way to learn about the technical workings of Sequoia and a fun way to get to know the team, so never hesitate to ask for help!

Choose a Project! Background Difficulty Skills/Knowledge Involved Link to Spec
Practice creating a PR using GitHub Github is how we add code to our codebase. This project will practice making a small change to the codebase, then adding it to our code repository so you can get familiar with Git. Easy Git, Github, Terminal. Specification
Experiment with existing code base The current setup includes the Raspberry Pi as well as our PyCubed flight controller. This task is about looking at our existing software, actually running it on our hardware and playing around with it to get a better sense of what direction you want to take this project. This task will involve lots of close contact with the existing team members, who will help you get set up and explain any open questions. Medium Python, CircuitPython, Redis, Microservices, PyCharm, SSH, Terminal Specification
Connect sensors to flight computer Our sensors (e.g. sun sensor) are connected to the board with various hardware mechanisms (like I2C). Some of them need to be configured to be able to use them with our software. You will be writing the code to interact with these sensors. Medium Circuitpython, PyCharm, Terminal, Hardware Specification
Define Radio Message-Passing Format We have a working radio, but we still need to the format of the data we send and the commands we receive. This will also involve researching existing satellites and protocols. Medium Circuitpython, PyCharm, Radio, LoRa Specification
Create simulated sensors for testing and development Since the creation of the hardware of our satellite takes time, we need to develop software for hardware that does not even exist yet. To make this task easier, a critical and helpful tool are small pieces of code that can simulate the behavior of an actual sensor or other device. For example, you could model a thermometer by investigating how the temperature of the satellite should change in a simplified scenario and then use that information to code a simple class that our main software can interact with to get simulated temperature readings. Medium Python, MicroPython, Object Oriented Programming, PyCharm, Terminal, Physics TBA
Machine Learning Model The main mission of the satellite is to run ML models while in flight. This project will have you create a basic prototype model designed to be used on the satellite. We have a tutorial and dataset for cloud detection, although other applications are allowed. Difficult Python, Data Science, Image Processing, Machine Learning Specification

Points of Contact

These are people you should talk to when you have questions about a part of the software codebase, and also request reviews from when you create a PR.

  • PyCubed (i.e. flight_computer/): Langston Nashold (@lgnashold on Github)
  • Raspberry Pi (i.e. Payload/): Moritz (@austrian_code_wizard)
  • Radio Telemetry on PyCubed: Zach Witzel (@zachwitz)
  • Modeling (sequoia-modeling repo): Langston Nashold, Rayan Krishnan (@rayank)

Workspace Setup


Git is a tool for tracking revisions to a codebase, and GitHub is a central place to store these revisions. It's the most common version control system used in software development.

Setup Steps

1. Create a Github account (

2. Message @moritz or @langston with your github username and ask to be added to the Github Team

3. Install either git on the command line, if you are comfortable with the terminal, or github desktop, if you prefer a GUI. These steps focus on using git from the terminal.

4. Try checking out the codebase! Go the repository and press clone. In the terminal, run the following command (if you are using the CLI) git clone

5. You should see the codebase downloaded to a local folder.

If you've never used git before, check out this tutorial for an introduction.


PyCharm is an IDE that makes it easy to edit Python files. This will be used for development on both the PyCubed and RaspberryPi. You can download it from here.


Dataplicity is a tool we use to access the PyCubed remotely. It lets us login to a RaspberryPi that has the PyCubed mounted as a drive. You can copy files to the PyCubed and view the PyCubed output.

1. Create an account on

2. Message @flynn (Sats lead) the email you used to sign up with, saying you need access to dataplicity

3. You should see two Raspberry Pi's. One of them has the PyCubed.

4. Dataplicity is basically like ssh, so you can access the command line of the Raspberry Pis from your browser.

5. The PyCubed files are stored at /mount/PYCUBED. Copy code to and from this to change what the PyCubed runs.

6. To see the PyCubed REPL, run the command

  • screen /devices/ttyACM0

7. Since dataplicity is slow, it's easier to edit files locally, push to a github branch, pull the github branch onto dataplicity, and copy them onto PyCubed if necessary