Sequoia GNC

From Stanford SSI Wiki
Jump to navigation Jump to search

This page describes the architecture for the Guidance, Navigation, and Control (GNC) system for the Sequoia project. Since this system is primarily focused on determining and controlling attitude, we also may refer to it as ADCS.

Sequoia GNC Onboarding

No matter what background you have, you can contribute to Sequoia GNC! You can learn about the intersection between physics, CS, and engineering that is control theory. Here's a few aspects of our system we currently need someone to work on:

Choose a Project!
Project Background Skills/Knowledge Involved
Write Script to Evaluate Kalman Filter Performance A Kalman Filter is an algorithm that takes a series of noisy measurements from multiple sources over time, adds in some physics and probability theory, and estimates the current state of the satellite, with uncertainties. Currently, we have an in-progress code that simulates the physics of the satellite's rotation and a Kalman filter that gets simulated measurements from that code and estimates the orientation of the satellite. However, we need a code that runs the Kalman filter multiple times in different scenarios and evaluates its performance. This will be needed as we progress with the Kalman Filter development to evaluate its performance and identify problems. Basic knowledge of coding (particularly Python), physics, and probability theory are helpful, but by no means necessary. We expect that this project will be a good chance to learn about these.
Write an Evaluation Pipeline for Star Tracker Algorithm A star tracker takes pictures of the sky and identifies constellations of stars in the images to determine the orientation of the camera that took the image, and, by extension, the satellite. We need a comprehensive package that helps us test the performance of the star tracker. Working on this project can involve designing and coding up plots and other diagnostics as well as testing our code on real images of the sky. Also see the below related project that involves simulating synthetic images of the sky to feed into this test system. We will explain all the plots and diagnostics necessary for star tracker development and guide you through how to use all of the image analysis packages. This is a great project to learn about how to use these tools and how the star tracker works. In addition, this project is a great way to learn about positional and photometric astronomy, image analysis, and some miscellaneous computer science and probability stuff used in astronomy, image processing, and elsewhere. Basic python familiarity helpful but not required.
Write Code to Simulate Star Images to test the Star Tracker To test our star tracker code, we need to simulate what the sky will look like to our camera. This project involves using a number of astronomy packages in python to make synthetic images of the sky as they will be seen by our camera. We will explain all packages you will be using, as well as the introductory astronomy and image processing involved.
Make special format for sending GNC messages between microcontrollers Our GNC system requires sending a bunch of small messages between the two microcontrollers onboard the satellite. To send messages as quickly and efficiently as possible, we need a short code on both microcontrollers to put the messages into standardized formats to eliminate overhead. This project will involve coming up with these formats and writing python scripts to handle the messages. Basic knowledge of binary, python coding, and linear algebra would be helpful, but if not this is a great project to learn them
Write Algorithm to Search Nearby Magnetic Field Map to Determine Location based on Measured Magnetic Field Our satellite has a magnetic field sensor onboard as well as a map of Earth's magnetic field. Putting the two together, we will be able to tell our position relative to Earth. This is a standard problem in GNC; however, we have not started our code to do this yet. This would be a more self-driven project involving some math and some basic physics and algorithms. The best way to start would likely be a literature review (as mentioned, this is a standard GNC technique) to figure out how you want to design this algorithm.
Write/improve our software for predicting and plotting satellite orbits and learn about orbital mechanics on the way! There are a number of software packages that can predict satellite orbits, as well as some code we have, or we can walk you through programming your own. There are a number of miscellaneous orbit prediction tasks you can help with while learning about orbital mechanics and orbit prediction, or you can work your code to be part of our orbit tracking and plotting software or part of the orbit calculation code onboard the satellite depending on where you want to go with it. Basic coding and physics helpful, but can be learned along the way as well.
Something New! We are always looking for better ideas for our sattelite! Either better ways to achieve our current aims or (potentially) adding some new feature you want to work on. We do not know what skills will be involved but we guess that churning butter will not be one of them.

Or learn by writing your own mini GNC algorithm In addition to the above projects that will allow you to jump right in to helping produce our GNC algorithms, there are a few practice onboarding projects we can guide you through where you can code your own simplified GNC subsystem. These are cool projects where you implement your own baby version of one of our core GNC algorithms to get you up to speed quickly. For example, a Kalman filter is an algorithm that takes in a bunch of noisy data from different sensors and uses knowledge of the dynamics of the system to predict the current state of the sattelite. It was invented in the early 60s to navigate people to the moon. One of the projects is coding a Kalman filter to predict the state simple dynamical systems (for example, balancing a broom on your hand by moving your hand back and forth to stabilize it). In addition to the Kalman filtering side of this, there is also a control side where you determine how much you should move your hand to keep the broom stable. Depending on how many people are interested, background, ect. We will set up either individuals or teams to write codes to tackle this GNC problem. Afterwards, you can jump into writing the equivalent code for our satellite. We will guide you through every step of the project, giving you all guidance and background materials necessary. We know this may seem complicated or daunting, but none of us started out knowing how to do this.

If you're interested in working on the GNC components of the satellite, you can email the leads Alec Lessing ( or Rodrigo Castellon (!

Overview of Sequoia GNC Architecture

Below is a diagram of our GNC architecture for the Sequoia satellite. Our system is split between two microcontrollers (PyCubed and Raspberry Pi), with more computation-heavy algorithms running on the Raspberry Pi.


Kalman Filter is an algorithm that takes in a bunch of noisy data from different sensors and uses knowledge of the dynamics of the system to predict the current state of the sattelite. It was invented in the early 60s to navigate people to the moon.

TortoiseSat is an experimental algorithm published by a Stanford lab a few months ago. It allows us to control our satellite using only magnet-torquers (small controlled current loops that create torque by interacting with Earth's magnetic field). The difficulty with this is that with magnet-torquers you can only generate a torque in two directions and not all three, which is why we need the experimental optimization algorithm to do it. We hope to demonstrate this algorithm on orbit for the first time with our satellite.