py_pidx: A Python package for PID control.
Project description
py_pidx
py_pidx is an advanced Python library for PID control that provides robust, real-world-ready features, including:
- 🧠 Gain scheduling
- 🧾 Deadband handling (error & output)
- 🚦 Anti-windup
- 🔁 Slew rate limiting
- 🌀 Derivative filtering
- 🧮 Feedforward support
- 🧪 Precision control with dynamic time steps
- 🔄 Integral and derivative-on-measurement option
🔧 Installation
pip install py_pidx
| Feature | Description |
|---|---|
Kp, Ki, Kd |
Tunable proportional, integral, and derivative gains |
GainScheduler |
Dynamically adjust PID gains at runtime |
| Deadbands | Zero out small control efforts or errors to reduce actuator jitter |
| Anti-windup | Prevents runaway integral values during saturation |
| Derivative on Measurement | Optionally compute D-term from PV instead of error |
| Integral on Measurement | Optionally compute I-term on process variable instead of error |
| Low-pass Filtering | Smooths noisy derivative term using alpha filtering |
| Feedforward | Optional term to improve open-loop response |
| Slew Rate Limiting | Prevents rapid output changes that may shock actuators |
🔧 Basic Usage
from py_pidx import PID
pid = PID(Kp=1.2, Ki=0.5, Kd=0.05, setpoint=100)
while True:
pv = read_sensor() # Your process variable
control_signal = pid.run(pv)
send_to_actuator(control_signal)
time.sleep(0.01)
🎯 Advanced Features
Gain Scheduling
from py_pidx.gain_scheduler import GainScheduler
class MyScheduler(GainScheduler):
def get_gains(self, pv):
if pv < 10:
return (2.0, 0.1, 0.01)
elif pv < 20:
return (1.5, 0.05, 0.005)
else:
return (1.0, 0.01, 0.001)
pid = PID(gain_scheduler=MyScheduler())
Deadbands
pid = PID(
output_deadband_limits=(-0.1, 0.1),
error_deadband_limits=(-0.05, 0.05)
)
Anti-Windup and Slew Rate
pid = PID(
Ki=0.3,
anti_windup=True,
max_output_rate=10.0 # Max 10 units/sec change
)
Derivative Filtering and Feedforward
pid = PID(
Kd=0.2,
derivative_filter=0.3, # Low-pass smoothing factor (0.0–1.0)
feedforward=1.5
)
Testing / Resetting / Toggling
pid.set_auto_mode(False) # Pause control
pid.set_auto_mode(True) # Resume control
pid.reset() # Clear internal state
PID Controller Methods
| Method | Description |
|---|---|
run(pv, delta_time=None) |
Compute the control output |
reset() |
Clear internal PID state |
set_auto_mode(enabled) |
Enable/disable PID control loop |
set_output_limits(min, max) |
Clamp controller output |
__repr__() |
Debug string with current gains and output |
📄 Documentation
👉 Full API Reference and usage examples: 📖 https://mehrabmahdian.github.io/py_pidx/
🧠 Why Use py_pidx?
- Designed with real control systems in mind
- Great for robotics, automation, process control, and simulations
- Extensible and highly configurable
- Clean, readable, and well-documented
📃 License
This project is licensed under the terms of the MIT license.
🤝 Contributing
Pull requests and feature ideas are welcome! Please open an issue for bugs or enhancement suggestions.
⭐️ Show Your Support
If you find this library useful, consider starring the repo or sharing it with others in the controls/automation community!
📬 Contact
Maintained by Mehrab Mahdian.
If you have questions, feature requests, or would like to collaborate, feel free to reach out:
📧 Email:
memahdian@outlook.com
mehrab.mahdian@taltech.ee
🧑💻 GitHub: @mehrabmahdian
💼 LinkedIn: Mehrab Mahdian
I’m always happy to connect with fellow developers, engineers, and researchers.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file py_pidx-1.1.0.tar.gz.
File metadata
- Download URL: py_pidx-1.1.0.tar.gz
- Upload date:
- Size: 8.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3ef3b0080ea2de527161fef351b18022b51d8a3042b7b743015eafd7ab5ebeec
|
|
| MD5 |
50987d6f9cf6bfd45d1e20af0b0692a3
|
|
| BLAKE2b-256 |
3210a758b708677f47850249e265758ccc05e18328b91650d8363fe7e900e272
|
File details
Details for the file py_pidx-1.1.0-py3-none-any.whl.
File metadata
- Download URL: py_pidx-1.1.0-py3-none-any.whl
- Upload date:
- Size: 7.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0e004f9ebee1ab0b5e293aef2d20a6bc045609313544c9f946da214962e7dfd2
|
|
| MD5 |
94345606c3045e41e142e988f69eb73d
|
|
| BLAKE2b-256 |
b9f4c71944e35a538483fd105851e756eed4f89aaaa869947e123119ae99f83a
|