From 9e2c25db6c6491b6dc609405e6333a07347f834f Mon Sep 17 00:00:00 2001 From: Andru Liu <90433630+WallabyLester@users.noreply.github.com> Date: Mon, 7 Oct 2024 19:58:10 -0700 Subject: [PATCH] Changed file name. --- aPID_numpy.py | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 aPID_numpy.py diff --git a/aPID_numpy.py b/aPID_numpy.py new file mode 100644 index 0000000..8fda6f9 --- /dev/null +++ b/aPID_numpy.py @@ -0,0 +1,75 @@ +import numpy as np + +class AdaptivePIDNP: + """ PID class implemented for numpy integration. + + ... + + Attributes + ---------- + Kp : float64 + Proportional gain. + Ki : float64 + Integral gain. + Kd : float64 + Derivative gain. + rbf_network : RBFNetwork object + RBF network class instance. + + Methods + ------- + update(target, measured_value, dt): + Updates the control signal. + """ + def __init__(self, Kp, Ki, Kd, rbf_network): + """ Constructs PID gains and RBF network. + + Parameters + ---------- + Kp : float64 + Proportional gain. + Ki : float64 + Integral gain. + Kd : float64 + Derivative gain. + rbf_network : RBFNetwork object + RBF network class instance. + """ + self.Kp = Kp + self.Ki = Ki + self.Kd = Kd + self.rbf_network = rbf_network + self.prev_err = 0 + self.error = 0 + self.integral = 0 + self.derivative = 0 + + def update(self, target, measured_value, dt): + """ Update the control signal according to error and adapt with RBF + network predictions. + + Parameters + ---------- + target : float64 + Target setpoint. + measured_value : float64 + Actual value. + dt : float64 + Timestep. + + Returns + ------- + Control signal. + """ + self.error = target - measured_value + self.integral += self.error * dt + self.derivative = (self.error - self.prev_err) / dt + + u = (self.Kp * self.error) + (self.Ki * self.integral) + (self.Kd*self.derivative) + + gain_adapt = self.rbf_network.predict(np.array([self.error, self.integral, self.derivative])) + u += gain_adapt + + self.prev_err = self.error + return u + \ No newline at end of file