From e16fd1cdc088e147f0b8f0db35e5c59ea31a597a Mon Sep 17 00:00:00 2001 From: ExhAustin Date: Tue, 18 Apr 2023 12:50:46 -0700 Subject: [PATCH 1/2] Protect modbus from erroneous return values --- .../robotiq_2f_gripper.py | 19 +++++++++++-------- .../robotiq_modbus_rtu/comModbusRtu.py | 2 +- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/polymetis/polymetis/python/polymetis/robot_client/robotiq_gripper/third_party/robotiq_2finger_grippers/robotiq_2f_gripper.py b/polymetis/polymetis/python/polymetis/robot_client/robotiq_gripper/third_party/robotiq_2finger_grippers/robotiq_2f_gripper.py index 80962cb5a4..376a48dbda 100644 --- a/polymetis/polymetis/python/polymetis/robot_client/robotiq_gripper/third_party/robotiq_2finger_grippers/robotiq_2f_gripper.py +++ b/polymetis/polymetis/python/polymetis/robot_client/robotiq_gripper/third_party/robotiq_2finger_grippers/robotiq_2f_gripper.py @@ -68,14 +68,17 @@ def getStatus(self): return False # Assign the values to their respective variables - self.gACT = (status[0] >> 0) & 0x01 - self.gGTO = (status[0] >> 3) & 0x01 - self.gSTA = (status[0] >> 4) & 0x03 - self.gOBJ = (status[0] >> 6) & 0x03 - self.gFLT = status[2] - self.gPR = status[3] - self.gPO = status[4] - self.gCU = status[5] + try: + self.gACT = (status[0] >> 0) & 0x01 + self.gGTO = (status[0] >> 3) & 0x01 + self.gSTA = (status[0] >> 4) & 0x03 + self.gOBJ = (status[0] >> 6) & 0x03 + self.gFLT = status[2] + self.gPR = status[3] + self.gPO = status[4] + self.gCU = status[5] + except Exception: + return False # also return False if status has incorrect format return True diff --git a/polymetis/polymetis/python/polymetis/robot_client/robotiq_gripper/third_party/robotiq_2finger_grippers/robotiq_modbus_rtu/comModbusRtu.py b/polymetis/polymetis/python/polymetis/robot_client/robotiq_gripper/third_party/robotiq_2finger_grippers/robotiq_modbus_rtu/comModbusRtu.py index 086073866a..af4d274daf 100644 --- a/polymetis/polymetis/python/polymetis/robot_client/robotiq_gripper/third_party/robotiq_2finger_grippers/robotiq_modbus_rtu/comModbusRtu.py +++ b/polymetis/polymetis/python/polymetis/robot_client/robotiq_gripper/third_party/robotiq_2finger_grippers/robotiq_modbus_rtu/comModbusRtu.py @@ -115,7 +115,7 @@ def getStatus(self, numBytes): # print("Failed to receive status") return None # Newer versions of pymodbus returns a ModbusIOException instead - elif type(response) is ModbusIOException: + elif isinstance(response, ModbusIOException): return None # Instantiate output as an empty list From 4fc15aba743bcd0815e4c2a5201d3d5f1d54456b Mon Sep 17 00:00:00 2001 From: ExhAustin Date: Tue, 18 Apr 2023 15:31:54 -0700 Subject: [PATCH 2/2] Individual field checking --- .../robotiq_2finger_grippers/robotiq_2f_gripper.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/polymetis/polymetis/python/polymetis/robot_client/robotiq_gripper/third_party/robotiq_2finger_grippers/robotiq_2f_gripper.py b/polymetis/polymetis/python/polymetis/robot_client/robotiq_gripper/third_party/robotiq_2finger_grippers/robotiq_2f_gripper.py index 376a48dbda..87af27e5e3 100644 --- a/polymetis/polymetis/python/polymetis/robot_client/robotiq_gripper/third_party/robotiq_2finger_grippers/robotiq_2f_gripper.py +++ b/polymetis/polymetis/python/polymetis/robot_client/robotiq_gripper/third_party/robotiq_2finger_grippers/robotiq_2f_gripper.py @@ -68,17 +68,19 @@ def getStatus(self): return False # Assign the values to their respective variables - try: + if status[0] is not None: self.gACT = (status[0] >> 0) & 0x01 self.gGTO = (status[0] >> 3) & 0x01 self.gSTA = (status[0] >> 4) & 0x03 self.gOBJ = (status[0] >> 6) & 0x03 + if status[2] is not None: self.gFLT = status[2] + if status[3] is not None: self.gPR = status[3] + if status[4] is not None: self.gPO = status[4] + if status[5] is not None: self.gCU = status[5] - except Exception: - return False # also return False if status has incorrect format return True