deserializeRT.py
Go to the documentation of this file.
1 from __future__ import print_function
2 import struct
3 import copy
4 
5 #this class handles different protocol versions
6 class RobotStateRT(object):
7  @staticmethod
8  def unpack(buf):
9  rs = RobotStateRT()
10  (plen, ptype) = struct.unpack_from("!IB", buf)
11  if plen == 756:
12  return RobotStateRT_V15.unpack(buf)
13  elif plen == 812:
14  return RobotStateRT_V18.unpack(buf)
15  elif plen == 1044:
16  return RobotStateRT_V30.unpack(buf)
17  else:
18  print("RobotStateRT has wrong length: " + str(plen))
19  return rs
20 
21 #this parses RobotStateRT for versions = v1.5
22 #http://wiki03.lynero.net/Technical/RealTimeClientInterface?foswiki_redirect_cache=9b4574b30760f720c6f79c5f1f2203dd
23 class RobotStateRT_V15(object):
24  __slots__ = ['time',
25  'q_target', 'qd_target', 'qdd_target', 'i_target', 'm_target',
26  'q_actual', 'qd_actual', 'i_actual', 'tool_acc_values',
27  'unused',
28  'tcp_force', 'tool_vector', 'tcp_speed',
29  'digital_input_bits', 'motor_temperatures', 'controller_timer',
30  'test_value']
31 
32  @staticmethod
33  def unpack(buf):
34  offset = 0
35  message_size = struct.unpack_from("!i", buf, offset)[0]
36  offset+=4
37  if message_size != len(buf):
38  print(("MessageSize: ", message_size, "; BufferSize: ", len(buf)))
39  raise Exception("Could not unpack RobotStateRT packet: length field is incorrect")
40 
41  rs = RobotStateRT_V15()
42  #time: 1x double (1x 8byte)
43  rs.time = struct.unpack_from("!d",buf, offset)[0]
44  offset+=8
45 
46  #q_target: 6x double (6x 8byte)
47  all_values = list(struct.unpack_from("!dddddd",buf, offset))
48  offset+=6*8
49  rs.q_target = copy.deepcopy(all_values)
50 
51  #qd_target: 6x double (6x 8byte)
52  all_values = list(struct.unpack_from("!dddddd",buf, offset))
53  offset+=6*8
54  rs.qd_target = copy.deepcopy(all_values)
55 
56  #qdd_target: 6x double (6x 8byte)
57  all_values = list(struct.unpack_from("!dddddd",buf, offset))
58  offset+=6*8
59  rs.qdd_target = copy.deepcopy(all_values)
60 
61  #i_target: 6x double (6x 8byte)
62  all_values = list(struct.unpack_from("!dddddd",buf, offset))
63  offset+=6*8
64  rs.i_target = copy.deepcopy(all_values)
65 
66  #m_target: 6x double (6x 8byte)
67  all_values = list(struct.unpack_from("!dddddd",buf, offset))
68  offset+=6*8
69  rs.m_target = copy.deepcopy(all_values)
70 
71  #q_actual: 6x double (6x 8byte)
72  all_values = list(struct.unpack_from("!dddddd",buf, offset))
73  offset+=6*8
74  rs.q_actual = copy.deepcopy(all_values)
75 
76  #qd_actual: 6x double (6x 8byte)
77  all_values = list(struct.unpack_from("!dddddd",buf, offset))
78  offset+=6*8
79  rs.qd_actual = copy.deepcopy(all_values)
80 
81  #i_actual: 6x double (6x 8byte)
82  all_values = list(struct.unpack_from("!dddddd",buf, offset))
83  offset+=6*8
84  rs.i_actual = copy.deepcopy(all_values)
85 
86  ###
87 
88  #tool_acc_values: 3x double (3x 8byte)
89  all_values = list(struct.unpack_from("!ddd",buf, offset))
90  offset+=3*8
91  rs.tool_acc_values = copy.deepcopy(all_values)
92 
93  #unused: 15x double (15x 8byte)
94  offset+=120
95  rs.unused = []
96 
97  #tcp_force: 6x double (6x 8byte)
98  all_values = list(struct.unpack_from("!dddddd",buf, offset))
99  offset+=6*8
100  rs.tcp_force = copy.deepcopy(all_values)
101 
102  #tool_vector: 6x double (6x 8byte)
103  all_values = list(struct.unpack_from("!dddddd",buf, offset))
104  offset+=6*8
105  rs.tool_vector = copy.deepcopy(all_values)
106 
107  #tcp_speed: 6x double (6x 8byte)
108  all_values = list(struct.unpack_from("!dddddd",buf, offset))
109  offset+=6*8
110  rs.tcp_speed = copy.deepcopy(all_values)
111 
112  #digital_input_bits: 1x double (1x 8byte) ?
113  rs.digital_input_bits = struct.unpack_from("!d",buf, offset)[0]
114  offset+=8
115 
116  #motor_temperatures: 6x double (6x 8byte)
117  all_values = list(struct.unpack_from("!dddddd",buf, offset))
118  offset+=6*8
119  rs.motor_temperatures = copy.deepcopy(all_values)
120 
121  #controller_timer: 1x double (1x 8byte)
122  rs.controller_timer = struct.unpack_from("!d",buf, offset)[0]
123  offset+=8
124 
125  #test_value: 1x double (1x 8byte)
126  rs.test_value = struct.unpack_from("!d",buf, offset)[0]
127  offset+=8
128 
129  return rs
130 
131 
132 #this parses RobotStateRT for versions <= v1.8 (i.e. 1.6, 1.7, 1.8)
133 class RobotStateRT_V18(object):
134  __slots__ = ['time',
135  'q_target', 'qd_target', 'qdd_target', 'i_target', 'm_target',
136  'q_actual', 'qd_actual', 'i_actual', 'tool_acc_values',
137  'unused',
138  'tcp_force', 'tool_vector', 'tcp_speed',
139  'digital_input_bits', 'motor_temperatures', 'controller_timer',
140  'test_value',
141  'robot_mode', 'joint_modes']
142 
143  @staticmethod
144  def unpack(buf):
145  offset = 0
146  message_size = struct.unpack_from("!i", buf, offset)[0]
147  offset+=4
148  if message_size != len(buf):
149  print(("MessageSize: ", message_size, "; BufferSize: ", len(buf)))
150  raise Exception("Could not unpack RobotStateRT packet: length field is incorrect")
151 
152  rs = RobotStateRT_V18()
153  #time: 1x double (1x 8byte)
154  rs.time = struct.unpack_from("!d",buf, offset)[0]
155  offset+=8
156 
157  #q_target: 6x double (6x 8byte)
158  all_values = list(struct.unpack_from("!dddddd",buf, offset))
159  offset+=6*8
160  rs.q_target = copy.deepcopy(all_values)
161 
162  #qd_target: 6x double (6x 8byte)
163  all_values = list(struct.unpack_from("!dddddd",buf, offset))
164  offset+=6*8
165  rs.qd_target = copy.deepcopy(all_values)
166 
167  #qdd_target: 6x double (6x 8byte)
168  all_values = list(struct.unpack_from("!dddddd",buf, offset))
169  offset+=6*8
170  rs.qdd_target = copy.deepcopy(all_values)
171 
172  #i_target: 6x double (6x 8byte)
173  all_values = list(struct.unpack_from("!dddddd",buf, offset))
174  offset+=6*8
175  rs.i_target = copy.deepcopy(all_values)
176 
177  #m_target: 6x double (6x 8byte)
178  all_values = list(struct.unpack_from("!dddddd",buf, offset))
179  offset+=6*8
180  rs.m_target = copy.deepcopy(all_values)
181 
182  #q_actual: 6x double (6x 8byte)
183  all_values = list(struct.unpack_from("!dddddd",buf, offset))
184  offset+=6*8
185  rs.q_actual = copy.deepcopy(all_values)
186 
187  #qd_actual: 6x double (6x 8byte)
188  all_values = list(struct.unpack_from("!dddddd",buf, offset))
189  offset+=6*8
190  rs.qd_actual = copy.deepcopy(all_values)
191 
192  #i_actual: 6x double (6x 8byte)
193  all_values = list(struct.unpack_from("!dddddd",buf, offset))
194  offset+=6*8
195  rs.i_actual = copy.deepcopy(all_values)
196 
197  #tool_acc_values: 3x double (3x 8byte)
198  all_values = list(struct.unpack_from("!ddd",buf, offset))
199  offset+=3*8
200  rs.tool_acc_values = copy.deepcopy(all_values)
201 
202  #unused: 15x double (15x 8byte)
203  offset+=120
204  rs.unused = []
205 
206  #tcp_force: 6x double (6x 8byte)
207  all_values = list(struct.unpack_from("!dddddd",buf, offset))
208  offset+=6*8
209  rs.tcp_force = copy.deepcopy(all_values)
210 
211  #tool_vector: 6x double (6x 8byte)
212  all_values = list(struct.unpack_from("!dddddd",buf, offset))
213  offset+=6*8
214  rs.tool_vector = copy.deepcopy(all_values)
215 
216  #tcp_speed: 6x double (6x 8byte)
217  all_values = list(struct.unpack_from("!dddddd",buf, offset))
218  offset+=6*8
219  rs.tcp_speed = copy.deepcopy(all_values)
220 
221  #digital_input_bits: 1x double (1x 8byte) ?
222  rs.digital_input_bits = struct.unpack_from("!d",buf, offset)[0]
223  offset+=8
224 
225  #motor_temperatures: 6x double (6x 8byte)
226  all_values = list(struct.unpack_from("!dddddd",buf, offset))
227  offset+=6*8
228  rs.motor_temperatures = copy.deepcopy(all_values)
229 
230  #controller_timer: 1x double (1x 8byte)
231  rs.controller_timer = struct.unpack_from("!d",buf, offset)[0]
232  offset+=8
233 
234  #test_value: 1x double (1x 8byte)
235  rs.test_value = struct.unpack_from("!d",buf, offset)[0]
236  offset+=8
237 
238  #robot_mode: 1x double (1x 8byte)
239  rs.robot_mode = struct.unpack_from("!d",buf, offset)[0]
240  offset+=8
241 
242  #joint_mode: 6x double (6x 8byte)
243  all_values = list(struct.unpack_from("!dddddd",buf, offset))
244  offset+=6*8
245  rs.joint_modes = copy.deepcopy(all_values)
246 
247  return rs
248 
249 #this parses RobotStateRT for versions >=3.0 (i.e. 3.0)
250 class RobotStateRT_V30(object):
251  __slots__ = ['time',
252  'q_target', 'qd_target', 'qdd_target', 'i_target', 'm_target',
253  'q_actual', 'qd_actual', 'i_actual', 'i_control',
254  'tool_vector_actual', 'tcp_speed_actual', 'tcp_force',
255  'tool_vector_target', 'tcp_speed_target',
256  'digital_input_bits', 'motor_temperatures', 'controller_timer',
257  'test_value',
258  'robot_mode', 'joint_modes', 'safety_mode',
259  #6xd: unused
260  'tool_acc_values',
261  #6xd: unused
262  'speed_scaling', 'linear_momentum_norm',
263  #2xd: unused
264  'v_main', 'v_robot', 'i_robot', 'v_actual']
265 
266  @staticmethod
267  def unpack(buf):
268  offset = 0
269  message_size = struct.unpack_from("!i", buf, offset)[0]
270  offset+=4
271  if message_size != len(buf):
272  print(("MessageSize: ", message_size, "; BufferSize: ", len(buf)))
273  raise Exception("Could not unpack RobotStateRT packet: length field is incorrect")
274 
275  rs = RobotStateRT_V30()
276  #time: 1x double (1x 8byte)
277  rs.time = struct.unpack_from("!d",buf, offset)[0]
278  offset+=8
279 
280  #q_target: 6x double (6x 8byte)
281  all_values = list(struct.unpack_from("!dddddd",buf, offset))
282  offset+=6*8
283  rs.q_target = copy.deepcopy(all_values)
284 
285  #qd_target: 6x double (6x 8byte)
286  all_values = list(struct.unpack_from("!dddddd",buf, offset))
287  offset+=6*8
288  rs.qd_target = copy.deepcopy(all_values)
289 
290  #qdd_target: 6x double (6x 8byte)
291  all_values = list(struct.unpack_from("!dddddd",buf, offset))
292  offset+=6*8
293  rs.qdd_target = copy.deepcopy(all_values)
294 
295  #i_target: 6x double (6x 8byte)
296  all_values = list(struct.unpack_from("!dddddd",buf, offset))
297  offset+=6*8
298  rs.i_target = copy.deepcopy(all_values)
299 
300  #m_target: 6x double (6x 8byte)
301  all_values = list(struct.unpack_from("!dddddd",buf, offset))
302  offset+=6*8
303  rs.m_target = copy.deepcopy(all_values)
304 
305  #q_actual: 6x double (6x 8byte)
306  all_values = list(struct.unpack_from("!dddddd",buf, offset))
307  offset+=6*8
308  rs.q_actual = copy.deepcopy(all_values)
309 
310  #qd_actual: 6x double (6x 8byte)
311  all_values = list(struct.unpack_from("!dddddd",buf, offset))
312  offset+=6*8
313  rs.qd_actual = copy.deepcopy(all_values)
314 
315  #i_actual: 6x double (6x 8byte)
316  all_values = list(struct.unpack_from("!dddddd",buf, offset))
317  offset+=6*8
318  rs.i_actual = copy.deepcopy(all_values)
319 
320  #i_control: 6x double (6x 8byte)
321  all_values = list(struct.unpack_from("!dddddd",buf, offset))
322  offset+=6*8
323  rs.i_control = copy.deepcopy(all_values)
324 
325  #tool_vector_actual: 6x double (6x 8byte)
326  all_values = list(struct.unpack_from("!dddddd",buf, offset))
327  offset+=6*8
328  rs.tool_vector_actual = copy.deepcopy(all_values)
329 
330  #tcp_speed_actual: 6x double (6x 8byte)
331  all_values = list(struct.unpack_from("!dddddd",buf, offset))
332  offset+=6*8
333  rs.tcp_speed_actual = copy.deepcopy(all_values)
334 
335  #tcp_force: 6x double (6x 8byte)
336  all_values = list(struct.unpack_from("!dddddd",buf, offset))
337  offset+=6*8
338  rs.tcp_force = copy.deepcopy(all_values)
339 
340  #tool_vector_target: 6x double (6x 8byte)
341  all_values = list(struct.unpack_from("!dddddd",buf, offset))
342  offset+=6*8
343  rs.tool_vector_target = copy.deepcopy(all_values)
344 
345  #tcp_speed_target: 6x double (6x 8byte)
346  all_values = list(struct.unpack_from("!dddddd",buf, offset))
347  offset+=6*8
348  rs.tcp_speed_target = copy.deepcopy(all_values)
349 
350  #digital_input_bits: 1x double (1x 8byte) ?
351  rs.digital_input_bits = struct.unpack_from("!d",buf, offset)[0]
352  offset+=8
353 
354  #motor_temperatures: 6x double (6x 8byte)
355  all_values = list(struct.unpack_from("!dddddd",buf, offset))
356  offset+=6*8
357  rs.motor_temperatures = copy.deepcopy(all_values)
358 
359  #controller_timer: 1x double (1x 8byte)
360  rs.controller_timer = struct.unpack_from("!d",buf, offset)[0]
361  offset+=8
362 
363  #test_value: 1x double (1x 8byte)
364  rs.test_value = struct.unpack_from("!d",buf, offset)[0]
365  offset+=8
366 
367  #robot_mode: 1x double (1x 8byte)
368  rs.robot_mode = struct.unpack_from("!d",buf, offset)[0]
369  offset+=8
370 
371  #joint_modes: 6x double (6x 8byte)
372  all_values = list(struct.unpack_from("!dddddd",buf, offset))
373  offset+=6*8
374  rs.joint_modes = copy.deepcopy(all_values)
375 
376  #safety_mode: 1x double (1x 8byte)
377  rs.safety_mode = struct.unpack_from("!d",buf, offset)[0]
378  offset+=8
379 
380  #unused: 6x double (6x 8byte)
381  offset+=48
382 
383  #tool_acc_values: 3x double (3x 8byte)
384  all_values = list(struct.unpack_from("!ddd",buf, offset))
385  offset+=3*8
386  rs.tool_acc_values = copy.deepcopy(all_values)
387 
388  #unused: 6x double (6x 8byte)
389  offset+=48
390 
391  #speed_scaling: 1x double (1x 8byte)
392  rs.speed_scaling = struct.unpack_from("!d",buf, offset)[0]
393  offset+=8
394 
395  #linear_momentum_norm: 1x double (1x 8byte)
396  rs.linear_momentum_norm = struct.unpack_from("!d",buf, offset)[0]
397  offset+=8
398 
399  #unused: 2x double (2x 8byte)
400  offset+=16
401 
402  #v_main: 1x double (1x 8byte)
403  rs.v_main = struct.unpack_from("!d",buf, offset)[0]
404  offset+=8
405 
406  #v_robot: 1x double (1x 8byte)
407  rs.v_robot = struct.unpack_from("!d",buf, offset)[0]
408  offset+=8
409 
410  #i_robot: 1x double (1x 8byte)
411  rs.i_robot = struct.unpack_from("!d",buf, offset)[0]
412  offset+=8
413 
414  #v_actual: 6x double (6x 8byte)
415  all_values = list(struct.unpack_from("!dddddd",buf, offset))
416  offset+=6*8
417  rs.v_actual = copy.deepcopy(all_values)
418 
419  return rs


ur_driver
Author(s): Stuart Glaser, Shaun Edwards, Felix Messmer
autogenerated on Sun Nov 24 2019 03:36:29