Skip to content

Commit de14198

Browse files
committed
feat: alvik wheels as children. mechanical constants in robot_definitions.py
1 parent e29e429 commit de14198

File tree

2 files changed

+71
-0
lines changed

2 files changed

+71
-0
lines changed

arduino_alvik.py

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,16 @@
55
from ucPack import ucPack
66

77
from pinout_definitions import *
8+
from robot_definitions import *
89
from constants import *
910

1011

1112
class ArduinoAlvik:
1213

1314
def __init__(self):
1415
self.packeter = ucPack(200)
16+
self.left_wheel = ArduinoAlvikWheel(self.packeter, ord('L'))
17+
self.right_wheel = ArduinoAlvikWheel(self.packeter, ord('R'))
1518
self._update_thread_running = False
1619
self._update_thread_id = None
1720
self.l_speed = None
@@ -215,6 +218,8 @@ def _parse_message(self) -> int:
215218
if code == ord('j'):
216219
# joint speed
217220
_, self.l_speed, self.r_speed = self.packeter.unpacketC2F()
221+
self.left_wheel._speed = self.l_speed
222+
self.right_wheel._speed = self.r_speed
218223
elif code == ord('l'):
219224
# line sensor
220225
_, self.left_line, self.center_line, self.right_line = self.packeter.unpacketC3I()
@@ -300,3 +305,62 @@ def print_status(self):
300305
if str(a).startswith('_'):
301306
continue
302307
print(f'{str(a).upper()} = {getattr(self, str(a))}')
308+
309+
310+
class ArduinoAlvikWheel:
311+
312+
def __init__(self, packeter: ucPack, label: int, wheel_diameter_mm: float = WHEEL_DIAMETER_MM):
313+
self._packeter = packeter
314+
self._label = label
315+
self._wheel_diameter_mm = wheel_diameter_mm
316+
self._speed = None
317+
318+
def reset(self, initial_position: float = 0.0):
319+
pass
320+
321+
def set_pid_gains(self, kp: float = MOTOR_KP_DEFAULT, ki: float = MOTOR_KI_DEFAULT, kd: float = MOTOR_KD_DEFAULT):
322+
"""
323+
Set PID gains for Alvik wheels
324+
:param kp: proportional gain
325+
:param ki: integration gain
326+
:param kd: derivative gain
327+
:return:
328+
"""
329+
330+
self._packeter.packetC1B3F(ord('P'), self._label, kp, ki, kd)
331+
uart.write(self._packeter.msg[0:self._packeter.msg_size])
332+
333+
def stop(self):
334+
"""
335+
Stop Alvik wheel
336+
:return:
337+
"""
338+
self.set_speed(0)
339+
340+
def set_speed(self, velocity: float, unit: str = 'rpm'):
341+
"""
342+
Sets left/right motor speed
343+
:param velocity: the speed of the motor
344+
:param unit: the unit of measurement
345+
:return:
346+
"""
347+
348+
self._packeter.packetC2B1F(ord('W'), self._label & 0xFF, ord('V'), velocity)
349+
uart.write(self._packeter.msg[0:self._packeter.msg_size])
350+
351+
def get_speed(self):
352+
"""
353+
Gets the current RPM speed of the wheel
354+
:return:
355+
"""
356+
return self._speed
357+
358+
def set_position(self, position: float, unit: str = 'deg'):
359+
"""
360+
Sets left/right motor speed
361+
:param position: the speed of the motor
362+
:param unit: the unit of measurement
363+
:return:
364+
"""
365+
self._packeter.packetC2B1F(ord('W'), self._label & 0xFF, ord('P'), position)
366+
uart.write(self._packeter.msg[0:self._packeter.msg_size])

robot_definitions.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Motor control and mechanical parameters
2+
MOTOR_KP_DEFAULT = 32.0
3+
MOTOR_KI_DEFAULT = 450.0
4+
MOTOR_KD_DEFAULT = 0.0
5+
6+
# Wheels parameters
7+
WHEEL_DIAMETER_MM = 34

0 commit comments

Comments
 (0)