Skip to content

Commit 15580df

Browse files
committed
feat: reset/update/get wheels position
wheels_servo.py
1 parent bfbbffd commit 15580df

File tree

2 files changed

+50
-2
lines changed

2 files changed

+50
-2
lines changed

arduino_alvik.py

+14-2
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,9 @@ def _parse_message(self) -> int:
276276
elif code == ord('q'):
277277
# imu position
278278
_, self.roll, self.pitch, self.yaw = self.packeter.unpacketC3F()
279+
if code == ord('w'):
280+
# wheels position
281+
_, self.left_wheel._position, self.right_wheel._position = self.packeter.unpacketC2F()
279282
elif code == 0x7E:
280283
# firmware version
281284
_, *self.version = self.packeter.unpacketC3B()
@@ -390,14 +393,16 @@ def __init__(self, packeter: ucPack, label: int, wheel_diameter_mm: float = WHEE
390393
self._label = label
391394
self._wheel_diameter_mm = wheel_diameter_mm
392395
self._speed = None
396+
self._position = None
393397

394398
def reset(self, initial_position: float = 0.0):
395399
"""
396400
Resets the wheel reference position
397401
:param initial_position:
398402
:return:
399403
"""
400-
pass
404+
self._packeter.packetC2B1F(ord('W'), self._label & 0xFF, ord('Z'), initial_position)
405+
uart.write(self._packeter.msg[0:self._packeter.msg_size])
401406

402407
def set_pid_gains(self, kp: float = MOTOR_KP_DEFAULT, ki: float = MOTOR_KI_DEFAULT, kd: float = MOTOR_KD_DEFAULT):
403408
"""
@@ -408,7 +413,7 @@ def set_pid_gains(self, kp: float = MOTOR_KP_DEFAULT, ki: float = MOTOR_KI_DEFAU
408413
:return:
409414
"""
410415

411-
self._packeter.packetC1B3F(ord('P'), self._label, kp, ki, kd)
416+
self._packeter.packetC1B3F(ord('P'), self._label & 0xFF, kp, ki, kd)
412417
uart.write(self._packeter.msg[0:self._packeter.msg_size])
413418

414419
def stop(self):
@@ -441,6 +446,13 @@ def get_speed(self) -> float:
441446
"""
442447
return self._speed
443448

449+
def get_position(self) -> float:
450+
"""
451+
Returns the wheel position (angle with respect to the reference)
452+
:return:
453+
"""
454+
return self._position
455+
444456
def set_position(self, position: float, unit: str = 'deg'):
445457
"""
446458
Sets left/right motor speed

examples/wheels_servo.py

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
from arduino_alvik import ArduinoAlvik
2+
from time import sleep
3+
import sys
4+
5+
alvik = ArduinoAlvik()
6+
alvik.begin()
7+
8+
alvik.left_wheel.reset()
9+
alvik.right_wheel.reset()
10+
11+
while True:
12+
try:
13+
alvik.left_wheel.set_position(30)
14+
sleep(2)
15+
print(f'Left wheel degs: {alvik.left_wheel.get_position()}')
16+
print(f'Right wheel degs: {alvik.right_wheel.get_position()}')
17+
18+
alvik.right_wheel.set_position(10)
19+
sleep(2)
20+
print(f'Left wheel degs: {alvik.left_wheel.get_position()}')
21+
print(f'Right wheel degs: {alvik.right_wheel.get_position()}')
22+
23+
alvik.left_wheel.set_position(180)
24+
sleep(2)
25+
print(f'Left wheel degs: {alvik.left_wheel.get_position()}')
26+
print(f'Right wheel degs: {alvik.right_wheel.get_position()}')
27+
28+
alvik.right_wheel.set_position(270)
29+
sleep(2)
30+
print(f'Left wheel degs: {alvik.left_wheel.get_position()}')
31+
print(f'Right wheel degs: {alvik.right_wheel.get_position()}')
32+
33+
except KeyboardInterrupt as e:
34+
print('over')
35+
alvik.stop()
36+
sys.exit()

0 commit comments

Comments
 (0)