@@ -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
0 commit comments