Skip to content

Commit cb2a602

Browse files
committed
mod: conversions in % of MOTOR_MAX_RPM and ROBOT_MAX_DEG_S
1 parent 6fddffe commit cb2a602

File tree

4 files changed

+46
-15
lines changed

4 files changed

+46
-15
lines changed

arduino_alvik.py

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import math
2-
31
import gc
42

53
from uart import uart
@@ -193,8 +191,7 @@ def get_wheels_speed(self, unit: str = 'rpm') -> (float, float):
193191
Returns the speed of the wheels
194192
:return: left_wheel_speed, right_wheel_speed
195193
"""
196-
return (convert_rotational_speed(self.left_wheel.get_speed(), 'rpm', unit),
197-
convert_rotational_speed(self.right_wheel.get_speed(), 'rpm', unit))
194+
return self.left_wheel.get_speed(unit), self.right_wheel.get_speed(unit)
198195

199196
def set_wheels_speed(self, left_speed: float, right_speed: float, unit: str = 'rpm'):
200197
"""
@@ -204,8 +201,15 @@ def set_wheels_speed(self, left_speed: float, right_speed: float, unit: str = 'r
204201
:param unit: the speed unit of measurement (default: 'rpm')
205202
:return:
206203
"""
207-
self.packeter.packetC2F(ord('J'), convert_rotational_speed(left_speed, unit, 'rpm'),
208-
convert_rotational_speed(right_speed, unit, 'rpm'))
204+
205+
if unit == '%':
206+
left_speed = (left_speed/100)*MOTOR_MAX_RPM
207+
right_speed = (right_speed/100)*MOTOR_MAX_RPM
208+
else:
209+
left_speed = convert_rotational_speed(left_speed, unit, 'rpm')
210+
right_speed = convert_rotational_speed(right_speed, unit, 'rpm')
211+
212+
self.packeter.packetC2F(ord('J'), left_speed, right_speed)
209213
uart.write(self.packeter.msg[0:self.packeter.msg_size])
210214

211215
def set_wheels_position(self, left_angle: float, right_angle: float, unit: str = 'deg'):
@@ -276,7 +280,10 @@ def drive(self, linear_velocity: float, angular_velocity: float, linear_unit: st
276280
:return:
277281
"""
278282
linear_velocity = convert_speed(linear_velocity, linear_unit, 'mm/s')
279-
angular_velocity = convert_rotational_speed(angular_velocity, angular_unit, 'deg/s')
283+
if angular_unit == '%':
284+
angular_velocity = (angular_velocity/100)*ROBOT_MAX_DEG_S
285+
else:
286+
angular_velocity = convert_rotational_speed(angular_velocity, angular_unit, 'deg/s')
280287
self.packeter.packetC2F(ord('V'), linear_velocity, angular_velocity)
281288
uart.write(self.packeter.msg[0:self.packeter.msg_size])
282289

@@ -287,8 +294,12 @@ def get_drive_speed(self, linear_unit: str = 'mm/s', angular_unit: str = 'deg/s'
287294
:param angular_unit: output angular velocity unit of meas
288295
:return: linear_velocity, angular_velocity
289296
"""
290-
return (convert_speed(self.linear_velocity, 'mm/s', linear_unit),
291-
convert_rotational_speed(self.angular_velocity, 'deg/s', angular_unit))
297+
if angular_unit == '%':
298+
angular_velocity = (self.angular_velocity/ROBOT_MAX_DEG_S)*100
299+
else:
300+
angular_velocity = convert_rotational_speed(self.angular_velocity, 'deg/s', angular_unit)
301+
302+
return convert_speed(self.linear_velocity, 'mm/s', linear_unit), angular_velocity
292303

293304
def reset_pose(self, x: float, y: float, theta: float, distance_unit: str = 'cm', angle_unit: str = 'deg'):
294305
"""
@@ -606,8 +617,13 @@ def set_speed(self, velocity: float, unit: str = 'rpm'):
606617
:param unit: the unit of measurement
607618
:return:
608619
"""
609-
self._packeter.packetC2B1F(ord('W'), self._label & 0xFF, ord('V'),
610-
convert_rotational_speed(velocity, unit, 'rpm'))
620+
621+
if unit == '%':
622+
velocity = (velocity/100)*MOTOR_MAX_RPM
623+
else:
624+
velocity = convert_rotational_speed(velocity, unit, 'rpm')
625+
626+
self._packeter.packetC2B1F(ord('W'), self._label & 0xFF, ord('V'), velocity)
611627
uart.write(self._packeter.msg[0:self._packeter.msg_size])
612628

613629
def get_speed(self, unit: str = 'rpm') -> float:
@@ -616,7 +632,11 @@ def get_speed(self, unit: str = 'rpm') -> float:
616632
:param unit: the unit of the output speed
617633
:return:
618634
"""
619-
return convert_rotational_speed(self._speed, 'rpm', unit)
635+
if unit == '%':
636+
speed = (self._speed/MOTOR_MAX_RPM)*100
637+
else:
638+
speed = convert_rotational_speed(self._speed, 'rpm', unit)
639+
return speed
620640

621641
def get_position(self, unit: str = 'deg') -> float:
622642
"""

conversions.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
from math import pi
44

5-
from robot_definitions import MOTOR_MAX_RPM
6-
75

86
def conversion_method(func):
97
def wrapper(*args, **kwargs):
@@ -23,7 +21,7 @@ def convert_rotational_speed(value: float, from_unit: str, to_unit: str) -> floa
2321
:param to_unit: unit of output value
2422
:return:
2523
"""
26-
speeds = {'rpm': 1.0, 'deg/s': 1/6, 'rad/s': 60/(2*pi), '%': MOTOR_MAX_RPM/100, 'rev/s': 60}
24+
speeds = {'rpm': 1.0, 'deg/s': 1/6, 'rad/s': 60/(2*pi), 'rev/s': 60}
2725
return value * speeds[from_unit.lower()] / speeds[to_unit.lower()]
2826

2927

examples/test_meas_units.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,11 @@
6464
print(f'R wheel pos: {curr_pos}')
6565

6666
# -- WHEELS SPEED --
67+
print("Set speed 50% max_rpm (35.0 rpm)")
68+
alvik.set_wheels_speed(50, 50, '%')
69+
sleep_ms(1000)
70+
print(f"Current speed is {alvik.get_wheels_speed()} rpm")
71+
6772
print("Set speed 12 rpm (1 rev in 5 sec)")
6873
alvik.set_wheels_speed(12, 12, 'rpm')
6974
sleep_ms(1000)
@@ -80,6 +85,11 @@
8085
print(f"Current speed is {alvik.get_wheels_speed()} rpm")
8186

8287
# -- DRIVE --
88+
print("Driving at 10 mm/s (expecting approx 5.6 rpm 64 deg/s)")
89+
alvik.drive(10, 20, linear_unit='mm/s', angular_unit='%')
90+
sleep_ms(2000)
91+
print(f"Current speed is {alvik.get_drive_speed()} (mm/s, deg/s))")
92+
8393
print("Driving at 10 mm/s (expecting approx 5.6 rpm)")
8494
alvik.drive(10, 0, linear_unit='mm/s')
8595
sleep_ms(2000)

robot_definitions.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,6 @@
77

88
# Wheels parameters
99
WHEEL_DIAMETER_MM = 34.0
10+
11+
# Robot params
12+
ROBOT_MAX_DEG_S = 6*(2*MOTOR_MAX_RPM*WHEEL_DIAMETER_MM)/WHEEL_TRACK_MM

0 commit comments

Comments
 (0)