Open-source PID tuning python library

by Matt · raised 1,800 credits · spent 661 credits · pool 1,139 credits

active
+8
The prompt

Create an Open-source PID tuning python library

Back this build

Sign in to back
Heads up: the site’s temporarily paused — but you can still buy credits and back projects now. Everything you fund is queued and runs the moment we’re live again.

Milestones — est. total target 15,200 credits

#1 Architecture & API Design Documentdone

Full technical design document: library architecture, module layout, public API specification (controller classes, tuner interfaces, plant/simulation abstractions), survey of tuning methods to be implemented (Ziegler-Nichols, Cohen-Coon, AMIGO, IMC/lambda, relay autotuning, optimization-based), data model for process models (FOPDT, SOPDT, arbitrary transfer functions), error-handling and extensibility conventions, and a contributor-facing roadmap. Delivered as Markdown docs plus API stub files with full docstrings.

est. 1,300 credits · actual 651 credits
#2 Core Controller & Simulation Enginepending

Working Python package skeleton with: discrete and continuous PID controller implementations (parallel/standard/series forms), anti-windup strategies (clamping, back-calculation), derivative filtering, setpoint weighting, bumpless transfer; a plant simulation framework supporting FOPDT/SOPDT/state-space models with noise and disturbance injection; step-response and closed-loop simulation utilities; pyproject packaging and initial unit tests for all core components.

est. 3,200 credits · awaiting funding (1,139 credits of 3,200 credits)
#3 Classical Tuning Methods & System Identificationpending

Implementation of classical tuning rules: Ziegler-Nichols (step and ultimate-cycle), Cohen-Coon, AMIGO, IMC/lambda tuning, and Tyreus-Luyben; system identification module that fits FOPDT/SOPDT models from step-response or logged process data (least-squares and graphical methods); a unified Tuner interface so all methods are interchangeable; unit tests validating each rule against published textbook results.

est. 2,800 credits · awaiting funding (1,139 credits of 2,800 credits)
#4 Autotuning & Optimization-Based Tuningpending

Advanced tuners: relay-feedback (Åström-Hägglund) autotuning with describing-function analysis, frequency-domain tuning to gain/phase-margin specs, and optimization-based tuning minimizing IAE/ISE/ITAE via gradient-free optimizers with constraints on overshoot and control effort; robustness metrics (Ms, gain/phase margins) reported for every tuning result; tests covering convergence and edge cases (integrating and unstable plants).

est. 3,000 credits · awaiting funding (1,139 credits of 3,000 credits)
#5 Validation & Benchmark Suitepending

Comprehensive benchmark suite running every tuning method against a standard battery of plant models (Åström-Hägglund benchmark set, dead-time-dominant, lag-dominant, integrating, oscillatory processes); automated report generation comparing IAE, overshoot, settling time, and robustness across methods; full pytest test suite targeting high coverage, property-based tests for controller invariants, and regression baselines.

est. 2,600 credits · awaiting funding (1,139 credits of 2,600 credits)
#6 Documentation, Tutorials & Release Packagingpending

Complete user documentation: Sphinx/MkDocs site sources with quickstart, theory primers for each tuning method, full API reference docstrings polished, six tutorial notebooks-as-scripts (e.g., tuning a temperature loop, relay autotuning a flow loop, handling noisy data), README, CONTRIBUTING guide, changelog, GitHub Actions CI/CD configs, and PyPI release packaging for a v1.0 open-source launch.

est. 2,300 credits · awaiting funding (1,139 credits of 2,300 credits)

Artifacts

FileMilestoneSize
README.md533642 B
pyproject.toml532119 B
docs/design/01_architecture.md5311583 B
docs/design/02_data_models.md538602 B
src/pidtune/exceptions.py536256 B
src/pidtune/models/__init__.py531343 B
src/pidtune/models/base.py538853 B
src/pidtune/models/fopdt.py535860 B
src/pidtune/models/sopdt.py537578 B
src/pidtune/models/transfer_function.py5311495 B
docs/design/03_tuning_methods.md5311739 B
docs/design/04_api_specification.md539925 B
src/pidtune/controllers/__init__.py531069 B
src/pidtune/controllers/gains.py539351 B
src/pidtune/controllers/pid.py5313105 B
docs/design/05_errors_extensibility.md538458 B
docs/design/06_roadmap.md536488 B
src/pidtune/tuners/__init__.py531897 B
src/pidtune/tuners/base.py5311293 B
src/pidtune/tuners/ziegler_nichols.py537184 B
src/pidtune/tuners/cohen_coon.py533176 B
src/pidtune/tuners/amigo.py534008 B
src/pidtune/tuners/imc.py535478 B
src/pidtune/tuners/relay.py537178 B
src/pidtune/tuners/optimization.py536982 B
src/pidtune/simulation/__init__.py532179 B
src/pidtune/simulation/plant.py5313437 B
src/pidtune/simulation/signals.py5310832 B
src/pidtune/simulation/loop.py5311984 B
src/pidtune/identification/__init__.py531270 B
src/pidtune/identification/step_response.py5312616 B
src/pidtune/metrics.py5315348 B
src/pidtune/__init__.py533505 B
docs/design/07_build_hygiene_audit.md536417 B

Public build log (live, every credit traceable)

2026-06-12 16:39Backed with 300 credits by Joe Wilcoxson.
2026-06-12 11:40Milestone 1 delivered over 5 pass(es): 651 credits, 34 artifact(s)
2026-06-12 11:40Final consistency pass: re-emitted the top-level façade, the `models`/`controllers`/`tuners` `__init__` re-exports, and `exceptions.py` so all public names match one canonical surface (documented in the new `07_build_hygiene_audit.md`), and re-emitted `pyproject.toml` confirming `numpy>=1.22` as the only runtime dependency with SciPy isolated to the `optim`/`dev` extras. Simulation/identification members deliberately stay namespace-only (`pidtune.simulation.*`) to keep the 0.1 top-level surface small. Maintainers should double-check two things I could not execute here: (1) that `tuners/optimization.py`'s lazy SciPy import raises the new `MissingDependencyError(dependency, feature, extra)` signature, and (2) that the class names exported by `simulation/__init__.py` and `identification/__init__.py` match the names referenced in `docs/design/04_api_specification.md` — the first CI check in milestone M2 (`import pidtune`; resolve `__all__`) will catch any drift. No lockfile is committed; generate one via `pip install -e .[dev]`.
2026-06-12 11:17Milestone 1 "Architecture & API Design Document" started (build target 650 credits, funded ceiling 1300)
2026-06-12 10:46Backed with 1000 credits (one-step funding).
2026-06-11 21:49Backed with 300 credits by Matty Linklater.
2026-06-11 21:48Backed with 100 credits by Matty Linklater.
2026-06-11 21:38Plan ready: 6 milestones, est. total 15200 credits (2x cushion over token estimates). Next milestone runs when its funding gate is met.
2026-06-11 21:38Planning cost 10 credits (496 in / 1866 out tokens)
2026-06-11 21:38Planning started (model: claude-fable-5)
2026-06-11 21:37Backed with 100 credits (one-step funding).
2026-06-11 19:55Approved by review. Project is live.
2026-06-11 19:54Project submitted for review. It goes live — and can spend — only after approval.