1 from __future__
import division
4 from threading
import Lock
14 expr_to_get_data='m.data',
15 input_sample_rate=500,
20 n_channel=1, target_channel=0,
21 get_latest_data=False,
37 codes = [
'b',
'h',
'i',
'l']
39 codes = [
'B',
'H',
'I',
'L']
76 expr_to_get_data = rospy.get_param(
77 '~expression_to_get_data',
'm.data')
78 n_channel = rospy.get_param(
'~n_channel', 1)
79 target_channel = rospy.get_param(
'~target_channel', 0)
80 data_sampling_rate = rospy.get_param(
'~data_sampling_rate', 500)
81 is_integer = rospy.get_param(
'~is_integer',
False)
82 is_signed = rospy.get_param(
'~is_signed',
True)
83 bitdepth = rospy.get_param(
'~bitdepth', 64)
84 return DataBuffer(expr_to_get_data=expr_to_get_data,
85 input_sample_rate=data_sampling_rate,
86 is_integer=is_integer,
90 target_channel=target_channel,
96 input_class, input_topic, self.
input_fn = rostopic.get_topic_class(
97 rospy.resolve_name(self.
topic_name), blocking=
True)
99 self.
sub = rospy.Subscriber(
100 input_topic, input_class, self.
input_cb)
103 self.
sub.unregister()
105 def _read(self, size, normalize=False):
113 if normalize
is True:
115 data_buffer = data_buffer / self.
max_value
117 rospy.logerr(
'normalize is disabled with current settings')
123 def read(self, size=None, wait=False, normalize=False):
128 and not rospy.is_shutdown()
and len(self.
data_buffer) < size:
130 return self.
_read(size, normalize=normalize)
134 self.
sub.unregister()
144 data_type = type(data)
145 if data_type
is bytes:
146 data_buffer = np.frombuffer(data, dtype=self.
dtype)
147 elif data_type
in [list, tuple]:
148 data_buffer = np.fromiter(data, dtype=self.
dtype)
149 elif data_type
in [int, float]:
150 data_buffer = np.array([data], dtype=self.
dtype)
152 rospy.logerr(
'Unsupported data type: {}'.format(data_type))