Metadata-Version: 2.4
Name: Generalized_ADCS
Version: 0.1.5
Summary: Generalized Attitude Determination and Control System (ADCS) framework.
Author: Patrick McKeen, Niclas Scheuer, William Goldman
License: MIT
Project-URL: Repository, https://github.com/nscheuer/Generalized_ADCS
Project-URL: Documentation, https://nscheuer.github.io/Generalized_ADCS/
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: numpy>=1.26
Requires-Dist: scipy>=1.10
Requires-Dist: matplotlib>=3.7
Requires-Dist: numba>=0.59
Requires-Dist: ppigrf>=2.0
Requires-Dist: skyfield>=1.45
Requires-Dist: tqdm>=4.60
Requires-Dist: rich>=13.0
Provides-Extra: viz
Requires-Dist: pyvista>=0.44; extra == "viz"
Provides-Extra: cpp
Requires-Dist: cmake>=3.27; extra == "cpp"
Requires-Dist: Cython>=3.0; extra == "cpp"
Requires-Dist: pybind11>=2.12; extra == "cpp"
Provides-Extra: docs
Requires-Dist: sphinx>=7.2; extra == "docs"
Requires-Dist: sphinx-autodoc-typehints; extra == "docs"
Requires-Dist: sphinx-copybutton; extra == "docs"
Requires-Dist: myst-parser; extra == "docs"
Requires-Dist: furo; extra == "docs"
Provides-Extra: dev
Requires-Dist: pytest; extra == "dev"
Requires-Dist: numdifftools; extra == "dev"
Requires-Dist: black; extra == "dev"
Requires-Dist: ruff; extra == "dev"
Dynamic: license-file

# 🚀 Generalized ADCS

<p>
  <img src="docs/source/_static/starlab_logo.svg" alt="STARLab Logo" height="100">
  <img src="docs/source/_static/ssc_logo.png" alt="Small Satellite Collaborative Logo" height="100">
</p>

<strong>Generalized ADCS</strong> is a Python framework for satellite attitude determination
and control (ADCS), designed for **research, prototyping, and flight-software development**.
The framework emphasizes generality, modularity, and transparency for modern spacecraft
control and estimation workflows.

<p align="center">
  <a href="https://nscheuer.github.io/Generalized_ADCS/index.html">🛠 Documentation</a> •
  <a href="https://nscheuer.github.io/Generalized_ADCS/installation/index.html">📘 Installation</a> •
  <a href="https://nscheuer.github.io/Generalized_ADCS/tutorials/index.html">🧪 Tutorials</a> •
  <a href="https://nscheuer.github.io/Generalized_ADCS/contributing/index.html">🤝 Contributing</a>
</p>


## ✨ Key Features

<p align="center">
  <img src="docs/source/_static/ground_tracking.png"
       alt="Tracking a ground target"
       height="300">
</p>

- ✅ Fully generalized 6-DOF spacecraft attitude dynamics (RK4 integration)
- ✅ Fully generalized orbit propagation
- ✅ Estimation frameworks:
  UKF, SRUKF, UAKF, SRUAKF, orbital estimators, and custom filters
- ✅ Controller frameworks:
  PD, LQR, ALTRO, and user-defined controllers
- ✅ Sensor modeling:
  magnetometers, gyroscopes, sun sensors, GPS
- ✅ Actuator modeling:
  reaction wheels and magnetorquers
- ✅ Growing catalog of CubeSat-scale sensors and actuators
- ✅ Designed for underactuated and overactuated systems

Optional add-ons:
- trajectory_planner (tplaunch/pysat) and SALTRO (saltro_py) are optional C++ extensions.
- Core ADCS functionality works without them.
- Build instructions are in docs/Install_WSL.md and docs/Install_Windows.md.

## 📚 Academic Background

This project is based on the PhD research of **Patrick McKeen**:

- 🔗 Source Code:  
  https://github.com/patrickmckeen/PhD_Dissertation_Code
- 📄 Dissertation:  
  *Computational Methods to Improve Satellite Attitude Determination and Control
  with a Focus on Autonomy, Generalizability, and Underactuation*  
  https://dspace.mit.edu/handle/1721.1/158874

See the release paper:

- 📄 *A Modular Open-Source ADCS Framework for Small Satellite Development and Testing*  
  https://smallsateurope.com/paper/a-modular-open-source-adcs-framework-for-small-satellite-development-and-testing/

