Skip to content

Commit f0e1126

Browse files
committed
feat: move and rotate
1 parent a1a27df commit f0e1126

File tree

3 files changed

+60
-6
lines changed

3 files changed

+60
-6
lines changed

arduino_alvik.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ def __init__(self):
5151
self.bottom_tof = None
5252
self.linear_velocity = None
5353
self.angular_velocity = None
54+
self.last_ack = ''
5455
self.version = [None, None, None]
5556

5657
def begin(self) -> int:
@@ -86,6 +87,24 @@ def _stop_update_thread(cls):
8687
"""
8788
cls._update_thread_running = False
8889

90+
def rotate(self, angle: float):
91+
"""
92+
Rotates the robot by given angle
93+
:param angle:
94+
:return:
95+
"""
96+
self.packeter.packetC1F(ord('R'), angle)
97+
uart.write(self.packeter.msg[0:self.packeter.msg_size])
98+
99+
def move(self, distance: float):
100+
"""
101+
Moves the robot by given distance
102+
:param distance:
103+
:return:
104+
"""
105+
self.packeter.packetC1F(ord('G'), distance)
106+
uart.write(self.packeter.msg[0:self.packeter.msg_size])
107+
89108
def stop(self):
90109
"""
91110
Stops all Alvik operations
@@ -193,6 +212,13 @@ def set_servo_positions(self, a_position: int, b_position: int):
193212
self.packeter.packetC2B(ord('S'), a_position & 0xFF, b_position & 0xFF)
194213
uart.write(self.packeter.msg[0:self.packeter.msg_size])
195214

215+
def get_ack(self):
216+
"""
217+
Resets and returns last acknowledgement
218+
:return:
219+
"""
220+
return self.last_ack
221+
196222
# def send_ack(self):
197223
# self.packeter.packetC1B(ord('X'), ACK_)
198224
# uart.write(self.packeter.msg[0:self.packeter.msg_size])
@@ -301,6 +327,9 @@ def _parse_message(self) -> int:
301327
elif code == ord('v'):
302328
# robot velocity
303329
_, self.linear_velocity, self.angular_velocity = self.packeter.unpacketC2F()
330+
elif code == ord('x'):
331+
# robot ack
332+
_, self.last_ack = self.packeter.unpacketC1B()
304333
elif code == 0x7E:
305334
# firmware version
306335
_, *self.version = self.packeter.unpacketC3B()

examples/move_example.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,18 @@
77

88
while True:
99
try:
10-
alvik.set_wheels_speed(10, 10)
11-
sleep_ms(1000)
10+
alvik.move(100.0)
11+
while (ack := alvik.get_ack()) != ord('M'):
12+
print(f'moving... not on target yet ack={ack}')
13+
sleep_ms(200)
14+
print("on target after move")
1215

13-
alvik.set_wheels_speed(30, 60)
14-
sleep_ms(1000)
16+
alvik.rotate(90.0)
17+
while (ack := alvik.get_ack()) != ord('R'):
18+
print(f'rotating... not on target yet ack={ack}')
19+
sleep_ms(200)
20+
print("on target after rotation")
1521

16-
alvik.set_wheels_speed(60, 30)
17-
sleep_ms(1000)
1822
except KeyboardInterrupt as e:
1923
print('over')
2024
alvik.stop()

examples/wheels_speed.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
from arduino_alvik import ArduinoAlvik
2+
from time import sleep_ms
3+
import sys
4+
5+
alvik = ArduinoAlvik()
6+
alvik.begin()
7+
8+
while True:
9+
try:
10+
alvik.set_wheels_speed(10, 10)
11+
sleep_ms(1000)
12+
13+
alvik.set_wheels_speed(30, 60)
14+
sleep_ms(1000)
15+
16+
alvik.set_wheels_speed(60, 30)
17+
sleep_ms(1000)
18+
except KeyboardInterrupt as e:
19+
print('over')
20+
alvik.stop()
21+
sys.exit()

0 commit comments

Comments
 (0)