Skip to content

Commit d41cf29

Browse files
authored
Merge pull request #124 from Open-STEM/pid-timestep-fix
No longer update PID derivative if timestep is 0
2 parents a7342f3 + 8754164 commit d41cf29

1 file changed

Lines changed: 6 additions & 3 deletions

File tree

XRPLib/pid.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ def __init__(self,
4141

4242
self.prev_error = 0
4343
self.prev_integral = 0
44+
self.prev_derivative = 0
4445
self.prev_output = 0
4546

4647
self.start_time = None
@@ -84,10 +85,11 @@ def update(self, error: float, debug: bool = False) -> float:
8485
if self.max_integral is not None:
8586
integral = max(-self.max_integral, min(self.max_integral, integral))
8687

87-
derivative = (error - self.prev_error) / timestep
88+
if timestep != 0:
89+
self.prev_derivative = (error - self.prev_error) / timestep
8890

8991
# derive output
90-
output = self.kp * error + self.ki * integral + self.kd * derivative
92+
output = self.kp * error + self.ki * integral + self.kd * self.prev_derivative
9193
self.prev_error = error
9294
self.prev_integral = integral
9395

@@ -110,7 +112,7 @@ def update(self, error: float, debug: bool = False) -> float:
110112
self.prev_output = output
111113

112114
if debug:
113-
print(f"{output}: ({self.kp * error}, {self.ki * integral}, {self.kd * derivative})")
115+
print(f"{output}: ({self.kp * error}, {self.ki * integral}, {self.kd * self.prev_derivative})")
114116

115117
return output
116118

@@ -124,6 +126,7 @@ def is_done(self) -> bool:
124126
def clear_history(self):
125127
self.prev_error = 0
126128
self.prev_integral = 0
129+
self.prev_derivative = 0
127130
self.prev_output = 0
128131
self.prev_time = None
129132
self.times = 0

0 commit comments

Comments
 (0)