src/yocs_localization_manager/tracker_manager.py
Go to the documentation of this file.
1 #
2 # License: BSD
3 # https://raw.github.com/yujinrobot/yujin_ocs/license/LICENSE
4 #
5 
6 import rospy
7 import tf
8 import ar_track_alvar_msgs.msg as ar_track_alvar_msgs
9 import yocs_msgs.msg as yocs_msgs
10 import copy
11 import math
12 
13 def remove_leading_slash(frame_id):
14  if frame_id.startswith('/'):
15  return frame_id[1:]
16  else:
17  return frame_id
18 
19 class TrackerManager(object):
20  """
21  Receives AR Pair Annotations from annotation server.
22  Configure yocs_ar_pair_tracking and publish TFs
23  """
24  def __init__(self):
25  self._init_params()
26  self._init_variables()
27 
28  self._sub_global_pairs = rospy.Subscriber('global_pairs', ar_track_alvar_msgs.AlvarMarkers, self._process_global_pairs)
29  self._pub_pair_list = rospy.Publisher('update_ar_pairs', yocs_msgs.ARPairList, latch=True, queue_size=1)
30 
31 
32  def _init_params(self):
33  param = {}
34  param['tf_broadcast_freq'] = rospy.get_param('tf_broadcast_freq', 0.5)
35  param['ar_pair_baseline'] = rospy.get_param('ar_pair/baseline', 0.28)
36  param['ar_pair_target_offset'] = rospy.get_param('ar_pair/target_offset', 0.5)
37  param['ar_pair_global_prefix'] = rospy.get_param('ar_pair/global_prefix', 'global_marker')
38  param['ar_pair_target_postfix'] = rospy.get_param('ar_pair/global_postfix', 'target')
39 
40  self.loginfo("Target offset : %s"%param['ar_pair_target_offset'])
41 
42  self.param = param
43 
44  def _init_variables(self):
46  self._global_pairs = []
47 
48  def _process_global_pairs(self, msg):
49  # Register Global Marker
50  self._global_pairs = copy.deepcopy(msg.markers)
51  self.loginfo('Received ' + str(len(self._global_pairs)) + ' markers')
52 
53  # Notify AR Pair Tracker
55 
57  pair_list = yocs_msgs.ARPairList()
58 
59  baseline = self.param['ar_pair_baseline']
60  target_offset = self.param['ar_pair_target_offset']
61  global_prefix = self.param['ar_pair_global_prefix']
62  target_postfix = self.param['ar_pair_target_postfix']
63 
64  for marker in self._global_pairs:
65  p = yocs_msgs.ARPair()
66  p.left_id = marker.id
67  p.right_id = p.left_id - 3
68  p.baseline = baseline
69  p.target_offset = target_offset
70  p.target_frame = global_prefix + '_' + str(marker.id) + '_' + target_postfix
71  pair_list.pairs.append(p)
72 
73  self._pub_pair_list.publish(pair_list)
74 
75 
76 
78  global_prefix = self.param['ar_pair_global_prefix']
79  target_postfix = self.param['ar_pair_target_postfix']
80  target_offset = self.param['ar_pair_target_offset']
81 
82  for marker in self._global_pairs:
83  parent_frame_id = global_prefix + '_' + str(marker.id)
84  child_frame_id = parent_frame_id + '_' + target_postfix
85  parent_frame_id = remove_leading_slash(parent_frame_id)
86  child_frame_id = remove_leading_slash(child_frame_id)
87 
88  p = (0,0, target_offset)
89  q = tf.transformations.quaternion_from_euler(math.pi, 0, 0)
90  self._tf_broadcaster.sendTransform(p, q, rospy.Time.now(), child_frame_id , parent_frame_id)
91  rospy.sleep(0.05)
92 
94  global_prefix = self.param['ar_pair_global_prefix']
95  for marker in self._global_pairs:
96  parent_frame_id = marker.pose.header.frame_id
97  child_frame_id = global_prefix + '_' + str(marker.id)
98  parent_frame_id = remove_leading_slash(parent_frame_id)
99  child_frame_id = remove_leading_slash(child_frame_id)
100  p = (marker.pose.pose.position.x,marker.pose.pose.position.y, marker.pose.pose.position.z)
101  q = (marker.pose.pose.orientation.x, marker.pose.pose.orientation.y, marker.pose.pose.orientation.z,marker.pose.pose.orientation.w)
102  self._tf_broadcaster.sendTransform(p, q, rospy.Time.now(), child_frame_id ,parent_frame_id)
103  rospy.sleep(0.05)
104 
105  def loginfo(self, msg):
106  rospy.loginfo('TrackerManager : ' + str(msg))
107 
108  def spin(self):
109  if self.param['tf_broadcast_freq'] == 0:
110  rospy.spin()
111  else:
112  hertz = 1 / self.param['tf_broadcast_freq']
113  r = rospy.Rate(hertz)
114  while not rospy.is_shutdown():
115  self._publish_marker_tfs()
116  r.sleep()
117  self._publish_target_tfs()
118  r.sleep()


yocs_localization_manager
Author(s): Jihoon Lee, Daniel Stonier
autogenerated on Mon Jun 10 2019 15:53:38