Skip to content

Commit 41675b8

Browse files
committed
clear PID history when new speed set
1 parent 3639aa8 commit 41675b8

File tree

4 files changed

+21
-6
lines changed

4 files changed

+21
-6
lines changed

XRPLib/controller.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,10 @@ def is_done(self) -> bool:
2121
:return: If the controller has reached or settled at its desired value
2222
:rtype: bool
2323
"""
24+
pass
25+
26+
def clear_history(self):
27+
"""
28+
Clears all past data, such as integral sums or any other previous data
29+
"""
2430
pass

XRPLib/encoded_motor.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ def get_speed(self) -> float:
110110
:rtype: float
111111
"""
112112
# Convert from ticks per 20ms to rpm (60 sec/min, 50 Hz)
113-
return self.speed*(60*50)
113+
return self.speed*(60*50)/self._encoder.ticks_per_rev
114114

115115
def set_speed(self, speed_rpm: float | None = None):
116116
"""
@@ -123,11 +123,13 @@ def set_speed(self, speed_rpm: float | None = None):
123123
if speed_rpm is None:
124124
self.target_speed = None
125125
self.set_effort(0)
126+
self.speed = 0
126127
return
127128
# If the update timer is not running, start it at 50 Hz (20ms updates)
128129
self.updateTimer.init(period=20, callback=lambda t:self._update())
129130
# Convert from rev per min to ticks per 20ms (60 sec/min, 50 Hz)
130-
self.target_speed = speed_rpm/(60*50)
131+
self.target_speed = speed_rpm*self._encoder.ticks_per_rev/(60*50)
132+
self.speedController.clear_history()
131133

132134
def set_speed_controller(self, new_controller: Controller):
133135
"""
@@ -137,12 +139,13 @@ def set_speed_controller(self, new_controller: Controller):
137139
:type new_controller: Controller
138140
"""
139141
self.speedController = new_controller
142+
self.speedController.clear_history()
140143

141144
def _update(self):
142145
"""
143146
Non-api method; used for updating motor efforts for speed control
144147
"""
145-
current_position = self.get_position()
148+
current_position = self.get_position_ticks()
146149
self.speed = current_position - self.prev_position
147150
if self.target_speed is not None:
148151
error = self.target_speed - self.speed

XRPLib/pid.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,4 +111,10 @@ def is_done(self) -> bool:
111111
:rtype: bool
112112
"""
113113

114-
return self.times >= self.toleranceCount
114+
return self.times >= self.toleranceCount
115+
116+
def clear_history(self):
117+
self.prevError = 0
118+
self.prevIntegral = 0
119+
self.prevOutput = 0
120+
self.times = 0

XRPLib/version.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
"""
22
A python file holding the version number of the XRPLib package. This is used by the IDE to determine if the package needs to be updated.
33
"""
4-
# Last updated 29-June-2023
5-
__version__ = '0.9.3'
4+
# Last updated 13-July-2023
5+
__version__ = '0.9.4'

0 commit comments

Comments
 (0)