Metadata-Version: 2.4
Name: Generalized_ADCS
Version: 0.1.8
Summary: Generalized Attitude Determination and Control System (ADCS) framework.
Author: William Goldman
Author-email: Patrick McKeen <pmckeen@mit.edu>, Niclas Scheuer <nscheuer@ethz.ch>
License-Expression: MIT
Project-URL: Homepage, https://nscheuer.github.io/Generalized_ADCS/
Project-URL: Documentation, https://nscheuer.github.io/Generalized_ADCS/
Project-URL: Repository, https://github.com/nscheuer/Generalized_ADCS
Project-URL: Issues, https://github.com/nscheuer/Generalized_ADCS/issues
Project-URL: Changelog, https://nscheuer.github.io/Generalized_ADCS/release_notes/index.html
Keywords: ADCS,attitude control,attitude determination,spacecraft,satellite,cubesat,smallsat,aerospace,GNC,magnetorquer,reaction wheel,control allocation,Kalman filter,orbit
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Science/Research
Classifier: Intended Audience :: Education
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Scientific/Engineering :: Astronomy
Classifier: Topic :: Scientific/Engineering :: Physics
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Operating System :: OS Independent
Classifier: Natural Language :: English
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: poster
Requires-Dist: qrcode[pil]; extra == "poster"
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="https://raw.githubusercontent.com/nscheuer/Generalized_ADCS/main/docs/source/_static/starlab_logo.svg" alt="STARLab Logo" height="100">
  <img src="https://raw.githubusercontent.com/nscheuer/Generalized_ADCS/main/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>


## 📦 Installation

```bash
pip install generalized-adcs
```

Optional extras: `viz` (3-D orbit animation), `dev` (test tooling), `docs`
(documentation build), `cpp` (toolchain for the optional C++ add-ons).

```bash
pip install "generalized-adcs[viz]"
```

Requires Python 3.10 or newer. For deterministic reproduction of published
campaign results, see `requirements-repro.txt` in the repository.


## ✨ Key Features

<p align="center">
  <img src="https://raw.githubusercontent.com/nscheuer/Generalized_ADCS/main/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

Spacecraft attitude states are represented by `ADCS.State` (`w`, `q`, and
reaction-wheel momentum `h`). Estimators use `ADCS.EstimatorState` for the
physical state, estimated parameters, and covariance. Explicit `from_array()`
and `as_array()` conversions preserve the established numerical ordering at
SciPy and native-planner boundaries.

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
