Skip to content

Commit 48e92ce

Browse files
authoredJan 31, 2024
Merge pull request #5 from arduino/api_update
Api update
2 parents 90b66d0 + f0e1126 commit 48e92ce

File tree

3 files changed

+73
-7
lines changed

3 files changed

+73
-7
lines changed
 

‎arduino_alvik.py

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ def __init__(self):
4949
self.right_tof = None
5050
self.top_tof = None
5151
self.bottom_tof = None
52+
self.linear_velocity = None
53+
self.angular_velocity = None
54+
self.last_ack = ''
5255
self.version = [None, None, None]
5356

5457
def begin(self) -> int:
@@ -84,6 +87,24 @@ def _stop_update_thread(cls):
8487
"""
8588
cls._update_thread_running = False
8689

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+
87108
def stop(self):
88109
"""
89110
Stops all Alvik operations
@@ -174,6 +195,13 @@ def drive(self, linear_velocity: float, angular_velocity: float):
174195
self.packeter.packetC2F(ord('V'), linear_velocity, angular_velocity)
175196
uart.write(self.packeter.msg[0:self.packeter.msg_size])
176197

198+
def get_drive_speed(self) -> (float, float):
199+
"""
200+
Returns linear and angular velocity of the robot
201+
:return: linear_velocity, angular_velocity
202+
"""
203+
return self.linear_velocity, self.angular_velocity
204+
177205
def set_servo_positions(self, a_position: int, b_position: int):
178206
"""
179207
Sets A/B servomotor angle
@@ -184,6 +212,13 @@ def set_servo_positions(self, a_position: int, b_position: int):
184212
self.packeter.packetC2B(ord('S'), a_position & 0xFF, b_position & 0xFF)
185213
uart.write(self.packeter.msg[0:self.packeter.msg_size])
186214

215+
def get_ack(self):
216+
"""
217+
Resets and returns last acknowledgement
218+
:return:
219+
"""
220+
return self.last_ack
221+
187222
# def send_ack(self):
188223
# self.packeter.packetC1B(ord('X'), ACK_)
189224
# uart.write(self.packeter.msg[0:self.packeter.msg_size])
@@ -286,9 +321,15 @@ def _parse_message(self) -> int:
286321
elif code == ord('q'):
287322
# imu position
288323
_, self.roll, self.pitch, self.yaw = self.packeter.unpacketC3F()
289-
if code == ord('w'):
324+
elif code == ord('w'):
290325
# wheels position
291326
_, self.left_wheel._position, self.right_wheel._position = self.packeter.unpacketC2F()
327+
elif code == ord('v'):
328+
# robot velocity
329+
_, self.linear_velocity, self.angular_velocity = self.packeter.unpacketC2F()
330+
elif code == ord('x'):
331+
# robot ack
332+
_, self.last_ack = self.packeter.unpacketC1B()
292333
elif code == 0x7E:
293334
# firmware version
294335
_, *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)
Please sign in to comment.