31 from __future__
import absolute_import
35 from tf2_msgs.msg
import TFMessage
36 from geometry_msgs.msg
import TransformStamped
37 from visualization_msgs.msg
import Marker, MarkerArray
38 from std_msgs.msg
import ColorRGBA
40 from rc_reason_msgs.srv
import DetectTags
42 from .rest_client
import RestClient
46 tf = TransformStamped()
47 tf.header.frame_id = tag.header.frame_id
48 tf.child_frame_id =
"{}_{}".format(tag.tag.id, tag.instance_id)
49 tf.header.stamp = tag.header.stamp
50 tf.transform.translation.x = tag.pose.pose.position.x
51 tf.transform.translation.y = tag.pose.pose.position.y
52 tf.transform.translation.z = tag.pose.pose.position.z
53 tf.transform.rotation = tag.pose.pose.orientation
60 super(TagClient, self).
__init__(rest_name)
66 self.
pub_tf = rospy.Publisher(
'/tf', TFMessage, queue_size=10)
67 self.
pub_markers = rospy.Publisher(
'visualization_marker_array', MarkerArray, queue_size=10)
69 rospy.on_shutdown(self.
stop)
77 rospy.loginfo(
"starting %s", self.
rest_name)
81 rospy.loginfo(
"stopping %s", self.
rest_name)
86 if response.return_code.value == 0:
92 transforms = [
tag_to_tf(tag)
for tag
in tags]
93 self.
pub_tf.publish(TFMessage(transforms=transforms))
98 def create_marker(tag, id):
99 m = Marker(action=Marker.ADD, type=Marker.CUBE)
100 m.color = ColorRGBA(r=0.0, g=1.0, b=0.0, a=0.5)
101 m.header.stamp = tag.pose.header.stamp
102 m.header.frame_id =
"{}_{}".format(tag.tag.id, tag.instance_id)
103 m.pose.orientation.w = 1.0
104 m.pose.position.x = tag.tag.size / 2
105 m.pose.position.y = tag.tag.size / 2
106 m.pose.position.z = 0.001 / 2
107 m.scale.x = tag.tag.size
108 m.scale.y = tag.tag.size
115 for i, tag
in enumerate(tags):
116 m = create_marker(tag, i)
121 new_markers.append(m)
129 def main(rest_node='rc_april_tag_detect'):
134 except KeyboardInterrupt:
139 main(rest_node=
'rc_april_tag_detect')
143 main(rest_node=
'rc_qr_code_detect')
146 if __name__ ==
'__main__':