Skip to content

Commit 3ce9e3f

Browse files
committed
Merge branch 'mycobot_280_refactor' of github.com:elephantrobotics/pymycobot into myhand_gripper
2 parents fc32665 + c303a6a commit 3ce9e3f

File tree

6 files changed

+47
-34
lines changed

6 files changed

+47
-34
lines changed

pymycobot/common.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -801,7 +801,7 @@ def write(self, command, method=None):
801801
self._serial_port.flush()
802802

803803

804-
def read(self, genre, method=None, command=None, _class=None, timeout=None):
804+
def read(self, genre, method=None, command=None, _class=None, timeout=None, real_command=None):
805805
datas = b""
806806
data_len = -1
807807
k = 0
@@ -833,9 +833,16 @@ def read(self, genre, method=None, command=None, _class=None, timeout=None):
833833
wait_time = 90
834834
elif genre == ProtocolCode.SET_SSID_PWD or genre == ProtocolCode.GET_SSID_PWD:
835835
wait_time = 0.05
836+
if real_command:
837+
if genre == ProtocolCode.SET_TOQUE_GRIPPER:
838+
if real_command[6] == 13:
839+
wait_time = 3
836840
data = b""
837-
838841
if method is not None:
842+
if real_command:
843+
if genre == ProtocolCode.SET_TOQUE_GRIPPER:
844+
if real_command[6] == 13:
845+
wait_time = 3
839846
if genre == 177:
840847
while True:
841848
data = self.sock.recv(1024)

pymycobot/error.py

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,14 @@ def calibration_parameters(**kwargs):
349349
"coords_min": [-310, -310, -140, -180, -180, -180],
350350
"coords_max": [310, 310, 480, 180, 180, 180]
351351
},
352+
"MyArmM": {
353+
"joint_id": [1, 2, 3, 4, 5, 6, 7],
354+
"servo_id": [1, 2, 3, 4, 5, 6, 7, 8],
355+
"angles_min": [-170, -83, -90, -155, -91, -153, -118],
356+
"angles_max": [170, 83, 84, 153, 88, 153, 2],
357+
"encoders_min": [137, 1163, 1035, 1013, 248, 979, 220, 706],
358+
"encoders_max": [4004, 2945, 3079, 3026, 3724, 2994, 3704, 2048]
359+
},
352360
"MyArmSocket": {
353361
"id": [1, 2, 3, 4, 5, 6, 7, 8],
354362
"angles_min": [-160, -70, -170, -113, -170, -115, -180],
@@ -787,7 +795,7 @@ def calibration_parameters(**kwargs):
787795
raise MyCobot320DataException(
788796
"The range of 'gripper_id' in {} is 1 ~ 254, but the received value is {}".format(parameter,
789797
gripper_id))
790-
if torque_value < 100 or torque_value > 300:
798+
if torque_value < 0 or torque_value > 100:
791799
raise MyCobot320DataException(
792800
"The range of 'torque_value' in {} is 100 ~ 300, but the received value is {}".format(parameter,
793801
torque_value))
@@ -1284,52 +1292,40 @@ def calibration_parameters(**kwargs):
12841292
value = kwargs[parameter]
12851293
value_type = type(value)
12861294
if parameter in ("servo_id", "joint_id") and value not in limit_info[parameter]:
1287-
raise MyArmDataException(
1288-
"The id not right, should be in {0}, but received {1}.".format(limit_info[parameter], value)
1289-
)
1295+
raise ValueError(f"The {parameter} not right, should be in {limit_info[parameter]}, but received {value}.")
12901296
elif parameter == 'angle':
12911297
i = kwargs['joint_id'] - 1
12921298
min_angle = limit_info["angles_min"][i]
12931299
max_angle = limit_info["angles_max"][i]
12941300
if value < min_angle or value > max_angle:
1295-
raise MyArmDataException(
1296-
f"angle value not right, should be {min_angle} ~ {max_angle}, but received {value}"
1297-
)
1301+
raise ValueError(f"angle value not right, should be {min_angle} ~ {max_angle}, but received {value}")
12981302
elif parameter == 'angles':
12991303
for i, v in enumerate(value):
13001304
min_angle = limit_info["angles_min"][i]
13011305
max_angle = limit_info["angles_max"][i]
13021306
if v < min_angle or v > max_angle:
1303-
raise MyArmDataException(
1304-
f"angle value not right, should be {min_angle} ~ {max_angle}, but received {v}"
1305-
)
1307+
raise ValueError(f"angle value not right, should be {min_angle} ~ {max_angle}, but received {v}")
13061308
elif parameter == 'encoder':
13071309
i = kwargs['servo_id'] - 1
13081310
max_encoder = limit_info["encoders_max"][i]
13091311
min_encoder = limit_info["encoders_min"][i]
13101312
if value < min_encoder or value > max_encoder:
1311-
raise MyArmDataException(
1312-
f"angle value not right, should be {min_encoder} ~ {max_encoder}, but received {value}"
1313-
)
1313+
raise ValueError(f"angle value not right, should be {min_encoder} ~ {max_encoder}, but received {value}")
13141314
elif parameter == 'encoders':
13151315
for i, v in enumerate(value):
13161316
max_encoder = limit_info["encoders_max"][i]
13171317
min_encoder = limit_info["encoders_min"][i]
13181318
if v < min_encoder or v > max_encoder:
1319-
raise MyArmDataException(
1320-
f"encoder value not right, should be {min_encoder} ~ {max_encoder}, but received {v}"
1321-
)
1319+
raise ValueError(f"encoder value not right, should be {min_encoder} ~ {max_encoder}, but received {v}")
13221320
elif parameter == "speed":
1323-
check_value_type(parameter, value_type, MyArmDataException, int)
1321+
check_value_type(parameter, value_type, TypeError, int)
13241322
if not 1 <= value <= 100:
1325-
raise MyArmDataException(f"speed value not right, should be 1 ~ 100, the received speed is {value}")
1323+
raise ValueError(f"speed value not right, should be 1 ~ 100, the received speed is {value}")
13261324
elif parameter == "speeds":
13271325
assert len(value) == 8, "The length of `speeds` must be 8."
13281326
for i, s in enumerate(value):
13291327
if not 1 <= s <= 100:
1330-
raise MyArmDataException(
1331-
f"speed value not right, should be 1 ~ 100, the received speed is {value}"
1332-
)
1328+
raise ValueError(f"speed value not right, should be 1 ~ 100, the received speed is {value}")
13331329
elif parameter == "servo_addr":
13341330
if value in (0, 1, 2, 3, 4):
1335-
raise MyArmDataException("addr 0-4 cannot be modified")
1331+
raise ValueError("addr 0-4 cannot be modified")

pymycobot/myarm_api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ def _mesg(self, genre, *args, **kwargs):
6767
data = self._read(genre, command=command, timeout=timeout, _class=self.__class__.__name__)
6868
res = self._process_received(data, genre, arm=8)
6969

70-
if len(res) == 0:
70+
if not res:
7171
return None
7272

7373
return_single_genres = [

pymycobot/myarmm.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -108,15 +108,11 @@ def get_robot_power_status(self):
108108
return self._mesg(ProtocolCode.IS_POWER_ON, has_reply=True)
109109

110110
def set_robot_power_on(self):
111-
"""Set the robot to power on
112-
Returns: (int) 1
113-
"""
111+
"""Set the robot to power on"""
114112
return self._mesg(ProtocolCode.POWER_ON, has_reply=True)
115113

116114
def set_robot_power_off(self):
117-
"""Set the robot to power off
118-
Returns: (int) 1
119-
"""
115+
"""Set the robot to power off"""
120116
return self._mesg(ProtocolCode.POWER_OFF, has_reply=True)
121117

122118
def clear_robot_err(self):

pymycobot/mycobot320.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ def _res(self, real_command, has_reply, genre):
154154
try_count = 0
155155
while try_count < 3:
156156
self._write(self._flatten(real_command))
157-
data = self._read(genre)
157+
data = self._read(genre, real_command=real_command)
158158
if data is not None and data != b'':
159159
break
160160
try_count += 1
@@ -165,6 +165,11 @@ def _res(self, real_command, has_reply, genre):
165165
res = self._process_received(data, genre)
166166
if res is None:
167167
return None
168+
if genre == ProtocolCode.SET_TOQUE_GRIPPER:
169+
if res == [0]:
170+
self._write(self._flatten(real_command))
171+
data = self._read(genre, real_command=real_command)
172+
res = self._process_received(data, genre)
168173
if res is not None and isinstance(res, list) and len(res) == 1 and genre not in [ProtocolCode.GET_BASIC_VERSION,
169174
ProtocolCode.GET_JOINT_MIN_ANGLE,
170175
ProtocolCode.GET_JOINT_MAX_ANGLE,
@@ -201,6 +206,10 @@ def _res(self, real_command, has_reply, genre):
201206
]:
202207
return self._process_single(res)
203208
elif genre in [ProtocolCode.GET_TOQUE_GRIPPER]:
209+
if res[-1] == 255 and res[-2] == 255:
210+
self._write(self._flatten(real_command))
211+
data = self._read(genre)
212+
res = self._process_received(data, genre)
204213
return self._process_high_low_bytes(res)
205214
elif genre in [ProtocolCode.GET_ANGLES]:
206215
return [self._int2angle(angle) for angle in res]

pymycobot/mycobot320socket.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ def _mesg(self, genre, *args, **kwargs):
145145
try_count = 0
146146
while try_count < 3:
147147
self._write(self._flatten(real_command), "socket")
148-
data = self._read(genre, method='socket')
148+
data = self._read(genre, method='socket', real_command=real_command)
149149
if data is not None and data != b'':
150150
break
151151
try_count += 1
@@ -156,7 +156,12 @@ def _mesg(self, genre, *args, **kwargs):
156156
res = self._process_received(data, genre)
157157
if res is None:
158158
return None
159-
elif res is not None and isinstance(res, list) and len(res) == 1 and genre not in [
159+
if genre == ProtocolCode.SET_TOQUE_GRIPPER:
160+
if res == [0]:
161+
self._write(self._flatten(real_command))
162+
data = self._read(genre, real_command=real_command)
163+
res = self._process_received(data, genre)
164+
if res is not None and isinstance(res, list) and len(res) == 1 and genre not in [
160165
ProtocolCode.GET_BASIC_VERSION,
161166
ProtocolCode.GET_JOINT_MIN_ANGLE,
162167
ProtocolCode.GET_JOINT_MAX_ANGLE,

0 commit comments

Comments
 (0)