5 import python_qt_binding
8 from .constants
import _MICROSTRAIN_ROS_VERISON
9 if _MICROSTRAIN_ROS_VERISON == 1:
11 elif _MICROSTRAIN_ROS_VERISON == 2:
13 import rclpy.exceptions
16 from rclpy.callback_groups
import ReentrantCallbackGroup
18 from .constants
import _PACKAGE_RESOURCE_DIR
19 from .constants
import _NODE_NAME_ENV_KEY, _DEFAULT_NODE_NAME
20 from .constants
import _DEFAULT_MESSAGE_TIMEOUT, _DEFAULT_POLL_INTERVAL, _DEFAULT_VAL, _DEFAULT_STR
21 from .constants
import _ICON_GREY_UNCHECKED_SMALL, _ICON_GREEN_UNCHECKED_SMALL
32 service_name = os.path.join(self.
_node_name, service_path)
35 if _MICROSTRAIN_ROS_VERISON == 1:
38 service_func = rospy.ServiceProxy(service_name, service_type)
39 response = service_func(**kwargs)
40 if hasattr(response,
'success'):
49 elif _MICROSTRAIN_ROS_VERISON == 2:
50 client = self.
_node.create_client(service_type, service_name)
53 req = service_type.Request()
54 for key, value
in kwargs.items():
56 setattr(req, key, value)
60 return client.call_async(req)
67 def __init__(self, node, node_name, path, message_type, message_timeout = _DEFAULT_MESSAGE_TIMEOUT):
80 if _MICROSTRAIN_ROS_VERISON == 1:
81 return rospy.Time.now().to_sec()
82 elif _MICROSTRAIN_ROS_VERISON == 2:
83 return self.
_node.get_clock().now().to_msg().sec
94 sinr_cosp = 2 * (q_w * q_x + q_y * q_z)
95 cosr_cosp = 1- 2 * (q_x * q_x + q_y * q_y)
96 roll = math.atan2(sinr_cosp, cosr_cosp)
98 sinp = 2 * (q_w * q_y - q_z * q_x)
99 if math.fabs(sinp) >= 1:
100 pitch = math.copysign(math.pi / 2, sinp)
102 pitch = math.asin(sinp)
104 siny_cosp = 2 * (q_w * q_z + q_x * q_y)
105 cosy_cosp = 1 - 2 * (q_y * q_y + q_z * q_z)
106 yaw = math.atan2(siny_cosp, cosy_cosp)
108 return (roll, pitch, yaw)
121 def _get_string(self, val, default_val = _DEFAULT_VAL, default_str = _DEFAULT_STR):
122 if val
is default_val
or self.
_get_val(val, default_val)
is default_val:
128 if val
is default_val
or self.
_get_val(val, default_val)
is default_val:
131 return "%.6f %s" % (val, units)
133 def _get_string_hex(self, val, default_val = _DEFAULT_VAL, default_str = _DEFAULT_STR):
134 if (val
is default_val
or self.
_get_val(val, default_val)
is default_val):
140 if val
is default_val
or self.
_get_val(val, default_val)
is default_val:
141 return _ICON_GREY_UNCHECKED_SMALL
144 return _ICON_GREEN_UNCHECKED_SMALL
146 return _ICON_GREY_UNCHECKED_SMALL
149 if val
is default_val
or self.
_get_val(val, default_val)
is default_val:
160 def __init__(self, node, node_name, path, service_type, message_timeout=_DEFAULT_MESSAGE_TIMEOUT, callback=_DEFAULT_VAL, poll_interval=_DEFAULT_POLL_INTERVAL):
162 if _MICROSTRAIN_ROS_VERISON == 1:
163 super(ServiceMonitor, self).
__init__(node, node_name, path, service_type._response_class, message_timeout=message_timeout)
165 elif _MICROSTRAIN_ROS_VERISON == 2:
166 super(ServiceMonitor, self).
__init__(node, node_name, path, service_type.Response, message_timeout=message_timeout)
178 if callback
is _DEFAULT_VAL:
181 if _MICROSTRAIN_ROS_VERISON == 1:
182 self.
_poll_timer = rospy.Timer(rospy.Duration(poll_interval), callback)
183 elif _MICROSTRAIN_ROS_VERISON == 2:
190 super(ServiceMonitor, self).
stop()
191 if _MICROSTRAIN_ROS_VERISON == 1:
193 elif _MICROSTRAIN_ROS_VERISON == 2:
198 if _MICROSTRAIN_ROS_VERISON == 1:
203 if new_message
is not _DEFAULT_VAL:
206 elif _MICROSTRAIN_ROS_VERISON == 2:
212 if _MICROSTRAIN_ROS_VERISON == 2:
215 if hasattr(response,
'success'):
226 @_current_message.setter
233 def __init__(self, node, node_name, path, message_type, message_timeout=_DEFAULT_MESSAGE_TIMEOUT, callback=_DEFAULT_VAL):
235 super(SubscriberMonitor, self).
__init__(node, node_name, path, message_type, message_timeout=message_timeout)
241 if callback
is _DEFAULT_VAL:
244 if _MICROSTRAIN_ROS_VERISON == 1:
246 elif _MICROSTRAIN_ROS_VERISON == 2:
250 super(SubscriberMonitor, self).
stop()
251 if _MICROSTRAIN_ROS_VERISON == 1:
253 elif _MICROSTRAIN_ROS_VERISON == 2: