Skip to content

Commit 4c254c6

Browse files
authored
Merge pull request #109 from elephantrobotics/myhand_gripper
Myhand gripper
2 parents 7187cfb + 48bb575 commit 4c254c6

File tree

4 files changed

+940
-10
lines changed

4 files changed

+940
-10
lines changed

pymycobot/common.py

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,39 @@ class ProGripper(object):
2525
SET_GRIPPER_ANGLES = 45
2626

2727

28+
class MyHandGripper(object):
29+
GET_HAND_MAJOR_FIRMWARE_VERSION = 1
30+
GET_HAND_MINOR_FIRMWARE_VERSION = 2
31+
SET_HAND_GRIPPER_ID = 3
32+
GET_HAND_GRIPPER_ID = 4
33+
SET_HAND_GRIPPER_ENABLED = 10
34+
SET_HAND_GRIPPER_ANGLE = 11
35+
GET_HAND_GRIPPER_ANGLE = 12
36+
SET_HAND_GRIPPER_CALIBRATION = 13
37+
GET_HAND_GRIPPER_STATUS = 14
38+
SET_HAND_GRIPPER_P = 15
39+
GET_HAND_GRIPPER_P = 16
40+
SET_HAND_GRIPPER_D = 17
41+
GET_HAND_GRIPPER_D = 18
42+
SET_HAND_GRIPPER_I = 19
43+
GET_HAND_GRIPPER_I = 20
44+
SET_HAND_GRIPPER_CLOCKWISE = 21
45+
GET_HAND_GRIPPER_CLOCKWISE = 22
46+
SET_HAND_GRIPPER_COUNTERCLOCKWISE = 23
47+
GET_HAND_GRIPPER_COUNTERCLOCKWISE = 24
48+
SET_HAND_GRIPPER_MIN_PRESSURE = 25
49+
GET_HAND_GRIPPER_MIN_PRESSURE = 26
50+
SET_HAND_GRIPPER_TORQUE = 27
51+
GET_HAND_GRIPPER_TORQUE = 28
52+
SET_HAND_GRIPPER_SPEED = 32
53+
GET_HAND_GRIPPER_DEFAULT_SPEED = 33
54+
SET_HAND_GRIPPER_ANGLES = 45
55+
GET_HAND_SINGLE_PRESSURE_SENSOR = 46
56+
GET_HAND_ALL_PRESSURE_SENSOR = 47
57+
GET_HAND_ALL_ANGLES = 50
58+
SET_HAND_GRIPPER_PINCH_ACTION = 51
59+
60+
2861
class ProtocolCode(object):
2962
# BASIC
3063
HEADER = 0xFE
@@ -802,8 +835,12 @@ def read(self, genre, method=None, command=None, _class=None, timeout=None, real
802835
wait_time = 0.05
803836
if real_command:
804837
if genre == ProtocolCode.SET_TOQUE_GRIPPER:
805-
if real_command[6] == 13:
806-
wait_time = 3
838+
if len(real_command) == 12:
839+
if real_command[6] == 13:
840+
wait_time = 10
841+
else:
842+
if real_command[6] == 13:
843+
wait_time = 3
807844
data = b""
808845
if method is not None:
809846
if real_command:

pymycobot/error.py

Lines changed: 61 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -780,7 +780,7 @@ def calibration_parameters(**kwargs):
780780
raise MyCobot320DataException(
781781
"The range of 'gripper_angle' in {} is 0 ~ 100, but the received value is {}".format(parameter,
782782
gripper_angle))
783-
elif parameter == "gripper_id":
783+
elif parameter == "gripper_id" or parameter == "set_id":
784784
check_value_type(parameter, value_type, MyCobot320DataException, int)
785785
if value < 1 or value > 254:
786786
raise MyCobot320DataException(
@@ -881,6 +881,56 @@ def calibration_parameters(**kwargs):
881881
raise MyCobot320DataException(
882882
"'address' in {} cannot be one of the following values: {}, but the received value is {}".format(
883883
parameter, invalid_addresses, address))
884+
885+
elif parameter == "gripper_joint_id":
886+
check_value_type(parameter, value_type, MyCobot320DataException, int)
887+
if value < 1 or value > 6:
888+
raise MyCobot320DataException(
889+
"The range of 'gripper_id' in {} is 1 ~ 6, but the received value is {}".format(parameter,
890+
value))
891+
elif parameter == "gripper_angles":
892+
if len(value) != 6:
893+
raise MyCobot320DataException(
894+
"{}: 'gripper_angles' must contain exactly 6 values, but received {}.".format(class_name,
895+
len(value)))
896+
897+
for i, angle in enumerate(value):
898+
if not isinstance(angle, int):
899+
raise MyCobot320DataException(
900+
"{}: Value at position {} in 'gripper_angles' must be an integer, but received {}.".format(
901+
class_name, i + 1, angle)
902+
)
903+
if angle < 0 or angle > 100:
904+
raise MyCobot320DataException(
905+
"{}: Value {} at position {} in 'gripper_angles' is out of range (0 ~ 100).".format(
906+
class_name, angle, i + 1)
907+
)
908+
elif parameter == 'pinch_mode':
909+
check_0_or_1(parameter, value, [0, 1, 2, 3], value_type, MyCobot320DataException, int)
910+
elif parameter == "gripper_finger_id":
911+
check_value_type(parameter, value_type, MyCobot320DataException, int)
912+
if value < 1 or value > 5:
913+
raise MyCobot320DataException(
914+
"The range of 'gripper_id' in {} is 1 ~ 6, but the received value is {}".format(parameter,
915+
value))
916+
elif parameter == "clockwise":
917+
check_value_type(parameter, value_type, MyCobot320DataException, int)
918+
if value < 0 or value > 16:
919+
raise MyCobot320DataException(
920+
"The range of 'value' in {} is 0 ~ 16, but the received value is {}".format(parameter,
921+
value))
922+
elif parameter in ["min_pressure", "gripper_i"]:
923+
check_value_type(parameter, value_type, MyCobot320DataException, int)
924+
if value < 0 or value > 254:
925+
raise MyCobot320DataException(
926+
"The range of 'value' in {} is 0 ~ 254, but the received value is {}".format(parameter,
927+
value))
928+
elif parameter in ["gripper_p", "gripper_d"]:
929+
check_value_type(parameter, value_type, MyCobot320DataException, int)
930+
if value < 0 or value > 150:
931+
raise MyCobot320DataException(
932+
"The range of 'value' in {} is 0 ~ 150, but the received value is {}".format(parameter,
933+
value))
884934
elif class_name in ["MechArm", "MechArmSocket"]:
885935
public_check(parameter_list, kwargs, robot_limit, class_name, MechArmDataException)
886936
elif class_name in ["MechArm270", "MechArmSocket"]:
@@ -1292,31 +1342,36 @@ def calibration_parameters(**kwargs):
12921342
value = kwargs[parameter]
12931343
value_type = type(value)
12941344
if parameter in ("servo_id", "joint_id") and value not in limit_info[parameter]:
1295-
raise ValueError(f"The {parameter} not right, should be in {limit_info[parameter]}, but received {value}.")
1345+
raise ValueError(
1346+
f"The {parameter} not right, should be in {limit_info[parameter]}, but received {value}.")
12961347
elif parameter == 'angle':
12971348
i = kwargs['joint_id'] - 1
12981349
min_angle = limit_info["angles_min"][i]
12991350
max_angle = limit_info["angles_max"][i]
13001351
if value < min_angle or value > max_angle:
1301-
raise ValueError(f"angle value not right, should be {min_angle} ~ {max_angle}, but received {value}")
1352+
raise ValueError(
1353+
f"angle value not right, should be {min_angle} ~ {max_angle}, but received {value}")
13021354
elif parameter == 'angles':
13031355
for i, v in enumerate(value):
13041356
min_angle = limit_info["angles_min"][i]
13051357
max_angle = limit_info["angles_max"][i]
13061358
if v < min_angle or v > max_angle:
1307-
raise ValueError(f"angle value not right, should be {min_angle} ~ {max_angle}, but received {v}")
1359+
raise ValueError(
1360+
f"angle value not right, should be {min_angle} ~ {max_angle}, but received {v}")
13081361
elif parameter == 'encoder':
13091362
i = kwargs['servo_id'] - 1
13101363
max_encoder = limit_info["encoders_max"][i]
13111364
min_encoder = limit_info["encoders_min"][i]
13121365
if value < min_encoder or value > max_encoder:
1313-
raise ValueError(f"angle value not right, should be {min_encoder} ~ {max_encoder}, but received {value}")
1366+
raise ValueError(
1367+
f"angle value not right, should be {min_encoder} ~ {max_encoder}, but received {value}")
13141368
elif parameter == 'encoders':
13151369
for i, v in enumerate(value):
13161370
max_encoder = limit_info["encoders_max"][i]
13171371
min_encoder = limit_info["encoders_min"][i]
13181372
if v < min_encoder or v > max_encoder:
1319-
raise ValueError(f"encoder value not right, should be {min_encoder} ~ {max_encoder}, but received {v}")
1373+
raise ValueError(
1374+
f"encoder value not right, should be {min_encoder} ~ {max_encoder}, but received {v}")
13201375
elif parameter == "speed":
13211376
check_value_type(parameter, value_type, TypeError, int)
13221377
if not 1 <= value <= 100:

0 commit comments

Comments
 (0)