Skip to content

Commit f81d278

Browse files
committed
mod: move and rotate with timeouts
1 parent d97e755 commit f81d278

File tree

2 files changed

+15
-8
lines changed

2 files changed

+15
-8
lines changed

arduino_alvik/arduino_alvik.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import struct
44
from machine import I2C
55
import _thread
6-
from time import sleep_ms
6+
from time import sleep_ms, ticks_ms, ticks_diff
77

88
from ucPack import ucPack
99

@@ -229,9 +229,14 @@ def _stop_update_thread(cls):
229229
"""
230230
cls._update_thread_running = False
231231

232-
def _wait_for_target(self):
233-
while not self.is_target_reached():
234-
pass
232+
def _wait_for_target(self, timeout):
233+
start = ticks_ms()
234+
while True:
235+
if self.is_target_reached():
236+
print("ACK received")
237+
if ticks_diff(ticks_ms(), start) >= timeout*1000:
238+
print('timeout reached')
239+
break
235240

236241
def is_target_reached(self) -> bool:
237242
"""
@@ -243,8 +248,8 @@ def is_target_reached(self) -> bool:
243248
sleep_ms(50)
244249
return False
245250
else:
246-
self._packeter.packetC1B(ord('X'), ord('K'))
247-
uart.write(self._packeter.msg[0:self._packeter.msg_size])
251+
# self._packeter.packetC1B(ord('X'), ord('K'))
252+
# uart.write(self._packeter.msg[0:self._packeter.msg_size])
248253
sleep_ms(200)
249254
return True
250255

@@ -270,7 +275,7 @@ def rotate(self, angle: float, unit: str = 'deg', blocking: bool = True):
270275
self._packeter.packetC1F(ord('R'), angle)
271276
uart.write(self._packeter.msg[0:self._packeter.msg_size])
272277
if blocking:
273-
self._wait_for_target()
278+
self._wait_for_target(timeout=(angle/MOTOR_CONTROL_DEG_S)*1.05)
274279

275280
def move(self, distance: float, unit: str = 'cm', blocking: bool = True):
276281
"""
@@ -285,7 +290,7 @@ def move(self, distance: float, unit: str = 'cm', blocking: bool = True):
285290
self._packeter.packetC1F(ord('G'), distance)
286291
uart.write(self._packeter.msg[0:self._packeter.msg_size])
287292
if blocking:
288-
self._wait_for_target()
293+
self._wait_for_target(timeout=(distance/MOTOR_CONTROL_MM_S)*1.05)
289294

290295
def stop(self):
291296
"""

arduino_alvik/robot_definitions.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
MOTOR_KI_DEFAULT = 450.0
44
MOTOR_KD_DEFAULT = 0.0
55
MOTOR_MAX_RPM = 70.0
6+
MOTOR_CONTROL_DEG_S = 40
7+
MOTOR_CONTROL_MM_S = 40
68
WHEEL_TRACK_MM = 89.0
79

810
# Wheels parameters

0 commit comments

Comments
 (0)