2
2
from .imu import IMU
3
3
from .controller import Controller
4
4
from .pid import PID
5
+ from .timeout import Timeout
5
6
import time
6
7
import math
7
8
@@ -97,7 +98,7 @@ def straight(self, distance: float, speed: float = 0.5, timeout: float = None, m
97
98
speed *= - 1
98
99
distance *= - 1
99
100
100
- startTime = time . time ( )
101
+ time_out = Timeout ( timeout )
101
102
startingLeft = self .get_left_encoder_position ()
102
103
startingRight = self .get_right_encoder_position ()
103
104
@@ -137,7 +138,7 @@ def straight(self, distance: float, speed: float = 0.5, timeout: float = None, m
137
138
distanceError = rotationsToDo - rotationsDelta
138
139
effort = main_controller .tick (distanceError )
139
140
140
- if main_controller .is_done ():
141
+ if main_controller .is_done () or time_out . is_done () :
141
142
break
142
143
143
144
# calculate heading correction
@@ -155,10 +156,7 @@ def straight(self, distance: float, speed: float = 0.5, timeout: float = None, m
155
156
156
157
self .stop ()
157
158
158
- if timeout is None :
159
- return True
160
- else :
161
- return time .time () < startTime + timeout
159
+ return not time_out .is_done ()
162
160
163
161
164
162
def turn (self , turn_degrees : float , speed : float = 0.5 , timeout : float = None , main_controller : Controller = None , secondary_controller : Controller = None , use_imu :bool = True ) -> bool :
@@ -186,7 +184,7 @@ def turn(self, turn_degrees: float, speed: float = 0.5, timeout: float = None, m
186
184
speed *= - 1
187
185
turn_degrees *= - 1
188
186
189
- startTime = time . time ( )
187
+ time_out = Timeout ( timeout )
190
188
startingLeft = self .get_left_encoder_position ()
191
189
startingRight = self .get_right_encoder_position ()
192
190
@@ -197,8 +195,7 @@ def turn(self, turn_degrees: float, speed: float = 0.5, timeout: float = None, m
197
195
minOutput = 0.25 ,
198
196
maxOutput = speed ,
199
197
tolerance = 0.5 ,
200
- toleranceCount = 3 ,
201
- timeout = timeout
198
+ toleranceCount = 3
202
199
)
203
200
204
201
# Secondary controller to keep encoder values in sync
@@ -228,7 +225,7 @@ def turn(self, turn_degrees: float, speed: float = 0.5, timeout: float = None, m
228
225
turnSpeed = main_controller .tick (turnError )
229
226
230
227
# exit if timeout or tolerance reached
231
- if main_controller .is_done ():
228
+ if main_controller .is_done () or time_out . is_done () :
232
229
break
233
230
234
231
@@ -240,7 +237,4 @@ def turn(self, turn_degrees: float, speed: float = 0.5, timeout: float = None, m
240
237
241
238
self .stop ()
242
239
243
- if timeout is None :
244
- return True
245
- else :
246
- return time .time () < startTime + timeout
240
+ return not time_out .is_done ()
0 commit comments