Skip to content
Snippets Groups Projects
Commit 9abf5acf authored by Felix Messmer's avatar Felix Messmer
Browse files

Merge pull request #5 from tnl-woi/version_aware_deserializing_hydro

Fixed RobotModeData and MasterboardData parsing for UR firmware v3.0.
parents 22eaec6e 8ce9f4ab
No related merge requests found
...@@ -50,7 +50,7 @@ class ToolMode(object): ...@@ -50,7 +50,7 @@ class ToolMode(object):
BOOTLOADER = 249 BOOTLOADER = 249
RUNNING = 253 RUNNING = 253
IDLE = 255 IDLE = 255
class MasterSafetyState(object): class MasterSafetyState(object):
UNDEFINED = 0 UNDEFINED = 0
BOOTLOADER = 1 BOOTLOADER = 1
...@@ -76,7 +76,7 @@ class RobotModeData(object): ...@@ -76,7 +76,7 @@ class RobotModeData(object):
(plen, ptype) = struct.unpack_from("!IB", buf) (plen, ptype) = struct.unpack_from("!IB", buf)
if plen == 29: if plen == 29:
return RobotModeData_V18.unpack(buf) return RobotModeData_V18.unpack(buf)
elif plen == 37: elif plen == 38:
return RobotModeData_V30.unpack(buf) return RobotModeData_V30.unpack(buf)
else: else:
print "RobotModeData has wrong length: " + str(plen) print "RobotModeData has wrong length: " + str(plen)
...@@ -103,15 +103,16 @@ class RobotModeData_V30(object): ...@@ -103,15 +103,16 @@ class RobotModeData_V30(object):
__slots__ = ['timestamp', 'robot_connected', 'real_robot_enabled', __slots__ = ['timestamp', 'robot_connected', 'real_robot_enabled',
'power_on_robot', 'emergency_stopped', 'power_on_robot', 'emergency_stopped',
'security_stopped', 'program_running', 'program_paused', 'security_stopped', 'program_running', 'program_paused',
'robot_mode', 'target_speed_fraction', 'speed_scaling'] 'robot_mode', 'control_mode', 'target_speed_fraction',
'speed_scaling']
@staticmethod @staticmethod
def unpack(buf): def unpack(buf):
rmd = RobotModeData_V30() rmd = RobotModeData_V30()
(_, _, (_, _,
rmd.timestamp, rmd.robot_connected, rmd.real_robot_enabled, rmd.timestamp, rmd.robot_connected, rmd.real_robot_enabled,
rmd.power_on_robot, rmd.emergency_stopped, rmd.security_stopped, rmd.power_on_robot, rmd.emergency_stopped, rmd.security_stopped,
rmd.program_running, rmd.program_paused, rmd.robot_mode, rmd.program_running, rmd.program_paused, rmd.robot_mode, rmd.control_mode,
rmd.target_speed_fraction, rmd.speed_scaling) = struct.unpack_from("!IBQ???????Bdd", buf) rmd.target_speed_fraction, rmd.speed_scaling) = struct.unpack_from("!IBQ???????BBdd", buf)
return rmd return rmd
#this parses JointData for all versions (i.e. 1.6, 1.7, 1.8, 3.0) #this parses JointData for all versions (i.e. 1.6, 1.7, 1.8, 3.0)
...@@ -125,7 +126,7 @@ class JointData(object): ...@@ -125,7 +126,7 @@ class JointData(object):
for i in range(6): for i in range(6):
jd = JointData() jd = JointData()
(jd.q_actual, jd.q_target, jd.qd_actual, jd.I_actual, jd.V_actual, (jd.q_actual, jd.q_target, jd.qd_actual, jd.I_actual, jd.V_actual,
jd.T_motor, jd.T_micro, jd.T_motor, jd.T_micro,
jd.joint_mode) = struct.unpack_from("!dddffffB", buf, offset) jd.joint_mode) = struct.unpack_from("!dddffffB", buf, offset)
offset += 41 offset += 41
all_joints.append(jd) all_joints.append(jd)
...@@ -153,9 +154,9 @@ class MasterboardData(object): ...@@ -153,9 +154,9 @@ class MasterboardData(object):
def unpack(buf): def unpack(buf):
md = MasterboardData() md = MasterboardData()
(plen, ptype) = struct.unpack_from("!IB", buf) (plen, ptype) = struct.unpack_from("!IB", buf)
if plen == 64: if (plen == 64) or (plen == 76): # Euromap67 interface = 12 bytes
return MasterboardData_V18.unpack(buf) return MasterboardData_V18.unpack(buf)
elif plen == 68: elif (plen == 72) or (plen == 92): # Euromap67 interface = 20 bytes
return MasterboardData_V30.unpack(buf) return MasterboardData_V30.unpack(buf)
else: else:
print "MasterboardData has wrong length: " + str(plen) print "MasterboardData has wrong length: " + str(plen)
...@@ -202,7 +203,7 @@ class MasterboardData_V30(object): ...@@ -202,7 +203,7 @@ class MasterboardData_V30(object):
@staticmethod @staticmethod
def unpack(buf): def unpack(buf):
md = MasterboardData_V30() md = MasterboardData_V30()
(_, _, (_, _, _UNDOCUMENTED_,
md.digital_input_bits, md.digital_output_bits, md.digital_input_bits, md.digital_output_bits,
md.analog_input_range0, md.analog_input_range1, md.analog_input_range0, md.analog_input_range1,
md.analog_input0, md.analog_input1, md.analog_input0, md.analog_input1,
...@@ -211,7 +212,7 @@ class MasterboardData_V30(object): ...@@ -211,7 +212,7 @@ class MasterboardData_V30(object):
md.masterboard_temperature, md.masterboard_temperature,
md.robot_voltage_48V, md.robot_current, md.robot_voltage_48V, md.robot_current,
md.master_io_current, md.safety_mode, md.master_io_current, md.safety_mode,
md.in_reduced_mode) = struct.unpack_from("!IBiibbddbbddffffBB", buf) md.in_reduced_mode) = struct.unpack_from("!IBIiibbddbbddffffBB", buf)
return md return md
#this parses JointData for all versions (i.e. 1.6, 1.7, 1.8, 3.0) #this parses JointData for all versions (i.e. 1.6, 1.7, 1.8, 3.0)
...@@ -239,7 +240,7 @@ class JointLimitData(object): ...@@ -239,7 +240,7 @@ class JointLimitData(object):
#ConfigurationData is not available in 1.6 and 1.7 #ConfigurationData is not available in 1.6 and 1.7
class ConfigurationData(object): class ConfigurationData(object):
__slots__ = ['joint_limit_data', __slots__ = ['joint_limit_data',
'v_joint_default', 'a_joint_default', 'v_joint_default', 'a_joint_default',
'v_tool_default', 'a_tool_default', 'eq_radius', 'v_tool_default', 'a_tool_default', 'eq_radius',
'dh_a', 'dh_d', 'dh_alpha', 'dh_theta', 'dh_a', 'dh_d', 'dh_alpha', 'dh_theta',
'masterboard_version', 'controller_box_type', 'masterboard_version', 'controller_box_type',
...@@ -291,7 +292,7 @@ class AdditionalInfoOld(object): ...@@ -291,7 +292,7 @@ class AdditionalInfoOld(object):
ai = AdditionalInfoOld() ai = AdditionalInfoOld()
(_,_,ai.ctrl_bits, ai.teach_button) = struct.unpack_from("!IBIB", buf) (_,_,ai.ctrl_bits, ai.teach_button) = struct.unpack_from("!IBIB", buf)
return ai return ai
class AdditionalInfoNew(object): class AdditionalInfoNew(object):
__slots__ = ['teach_button_enabled','teach_button_pressed'] __slots__ = ['teach_button_enabled','teach_button_pressed']
@staticmethod @staticmethod
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment