Skip to main content

No project description provided

Project description

Run Tests and Publish PyPI Documentation Status

advanced-pid

An advanced PID controller in Python. The derivative term can also be used in practice thanks to built-in first-order filter. Detailed information can be found here.

Usage is very simple:

from advanced_pid import PID

# Create PID controller 
pid = PID(Kp=2.0, Ki=0.1, Kd=1.0, Tf=0.05)

# Control loop
while True:
    # Get current measurement from system
    timestamp, measurement = system.get_measurement()
    
    # Calculate control signal by using PID controller
    reference = 1.0
    control = pid(timestamp, reference - measurement)
    
    # Feed control signal to system
    system.set_input(control)

Complete API documentation can be found here.

Usage

Biggest advantage of advanced-pid, the derivative term has a built-in first-order filter.
advanced-pid package includes a toy mass-spring-damper system model for testing:

from advanced_pid import PID
from advanced_pid.models import MassSpringDamper
from matplotlib import pyplot as plt
from numpy import diff

# Create a mass-spring-damper system model
system = MassSpringDamper(mass=1.0, spring_const=1.0, damping_const=0.2)
system.set_initial_value(initial_position=1.0, initial_velocity=0.0)

# Create PID controller 
pid = PID(Kp=1.0, Ki=0.0, Kd=2.0, Tf=0.5)

# Control loop
time, meas, cont = [], [], []
for i in range(800):
    # Get current measurement from system
    timestamp, measurement = system.get_measurement()
    
    # Calculate control signal by using PID controller
    control = pid(timestamp, -measurement)
    
    # Feed control signal to system
    system.set_input(control)
    
    # Record for plotting
    time.append(timestamp)
    meas.append(measurement)
    cont.append(control)

# Plot result
fig, (ax1, ax2, ax3) = plt.subplots(3, 1)
fig.suptitle('Mass-Spring-Damper system')
ax1.set_ylabel('Measured Position [m]')
ax1.plot(time, meas, 'b')
ax1.grid()
ax2.set_ylabel('Force [N]')
ax2.plot(time, cont, 'g')
ax2.grid()
ax3.set_xlabel('Time [s]')
ax3.set_ylabel('Derivative Term')
ax3.plot(time[1:], diff(meas)/diff(time), 'r')
ax3.grid()
plt.show()

As It can be seen in the figure, derivative term cannot be use without a filter:
alt text

Installation

To install, run:

pip3 install advanced-pid

Tests

To run tests, run:

python -m unittest tests.test_pid

License

Licensed under the MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

advanced-pid-0.0.8.tar.gz (5.2 kB view details)

Uploaded Source

Built Distribution

advanced_pid-0.0.8-py3-none-any.whl (6.1 kB view details)

Uploaded Python 3

File details

Details for the file advanced-pid-0.0.8.tar.gz.

File metadata

  • Download URL: advanced-pid-0.0.8.tar.gz
  • Upload date:
  • Size: 5.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for advanced-pid-0.0.8.tar.gz
Algorithm Hash digest
SHA256 b9f51bccbdfbd129a782dfb0c42be45148c4c900a80c6e471b08c53c2638ab5b
MD5 0d99b6aec47020c417f7a4e3c537809f
BLAKE2b-256 171c6ecdd637951c971edd7b8633142f8338f46fab3bb4eee1e2d7333f2f68ad

See more details on using hashes here.

File details

Details for the file advanced_pid-0.0.8-py3-none-any.whl.

File metadata

File hashes

Hashes for advanced_pid-0.0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 469fcff1b21bcd95fb40914d2424e180ec1ef308425608c7a200a4318800c8b3
MD5 d7d2c4cff77ce31b45558ebbfefb6b54
BLAKE2b-256 304ec58a27680c950635936c77ee5e0248d917281cec275f6456b05d5eb7cbae

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page