objects.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 
3 import time
4 
5 import rospy
6 import rosparam
7 
8 import tf.transformations as tft
9 import tf2_ros
10 
11 import yaml
12 
15 from frame_editor.srv import *
16 from frame_editor import utils_tf
17 
18 from geometry_msgs.msg import Pose
19 
20 from visualization_msgs.msg import InteractiveMarkerControl, Marker
21 import rospkg
22 
23 
24 class Frame(object):
25 
26  tf_broadcaster = None
27  tf_buffer = None
28  tf_listener = None
29 
30  __id_counter = -1
31 
32  def __init__(self, name, position=(0,0,0), orientation=(0,0,0,1), parent="world", style="none", group=""):
33  self.name = name
34  self.position = position
35  self.orientation = orientation
36  self.parent = parent
37  self.style = style
38  self.color = (0.0, 0.5, 0.5, 0.75)
39  self.group = group
40 
41  self.hidden = False
42  self.marker = None
43 
44  @staticmethod
45  def init_tf(static=True):
46  if Frame.tf_buffer is None:
47  if static:
48  Frame.tf_broadcaster = tf2_ros.StaticTransformBroadcaster()
49  else:
50  Frame.tf_broadcaster = tf2_ros.TransformBroadcaster()
51  Frame.tf_buffer = tf2_ros.Buffer()
52  Frame.tf_listener = tf2_ros.TransformListener(Frame.tf_buffer)
53 
54  @staticmethod
56  tf2_structure_in_yaml = Frame.tf_buffer.all_frames_as_yaml()
57  tf2_structure = yaml.load(tf2_structure_in_yaml, Loader=yaml.Loader)
58  try:
59  bc = tf2_structure[name]["broadcaster"]
60  return bc == rospy.get_name()
61  except KeyError:
62  return False
63 
64  @classmethod
65  def create_new_id(cls):
66  cls.__id_counter = cls.__id_counter + 1
67  return cls.__id_counter
68 
69  @property
70  def pose(self):
71  return ToPose(self.position, self.orientation)
72 
73  def print_all(self):
74  print(" {} (parent: {}) {} {} {}".format(self.name, self.parent, self.position, self.orientation, self.group))
75 
76  def value(self, symbol):
77  if symbol == 'x':
78  return self.position[0]
79  elif symbol == 'y':
80  return self.position[1]
81  elif symbol == 'z':
82  return self.position[2]
83  else:
84  rpy = tft.euler_from_quaternion(self.orientation)
85  if symbol == 'a':
86  return rpy[0]
87  elif symbol == 'b':
88  return rpy[1]
89  elif symbol == 'c':
90  return rpy[2]
91 
92  def set_value(self, symbol, value):
93  if symbol in ['x', 'y', 'z']:
94  position = list(self.position)
95  if symbol == 'x':
96  position[0] = value
97  elif symbol == 'y':
98  position[1] = value
99  elif symbol == 'z':
100  position[2] = value
101  self.position = tuple(position)
102  else:
103  rpy = list(tft.euler_from_quaternion(self.orientation))
104  if symbol == 'a':
105  rpy[0] = value
106  elif symbol == 'b':
107  rpy[1] = value
108  elif symbol == 'c':
109  rpy[2] = value
110  self.orientation = tuple(tft.quaternion_from_euler(*rpy))
111 
112  def set_group(self, group):
113  self.group = group
114 
115  @staticmethod
116  def can_transform(target_frame, source_frame, time_):
117  return utils_tf.can_transform(
118  Frame.tf_buffer, target_frame, source_frame, time_)
119 
120  @staticmethod
121  def wait_for_transform(target_frame, source_frame, timeout):
122  return utils_tf.wait_for_transform(
123  Frame.tf_buffer, target_frame, source_frame, timeout)
124 
125 
127 
128  def __init__(self, name, position, orientation, parent, style, group):
129 
130  super(Object_Geometry, self).__init__(name, position, orientation, parent, style, group)
131 
132 
133  self.marker = Marker()
134  self.marker.scale = NewVector3(1, 1, 1)
135  self.marker.pose = Pose()
136  self.marker.color = NewColor(self.color[0], self.color[1], self.color[2], self.color[3])
137  self.marker.id = Frame.create_new_id()
138  #self.marker.lifetime = 0 # forever
139  self.update_marker()
140 
141  def update_marker(self):
142  self.marker.header.frame_id = self.name
143  self.marker.header.stamp = rospy.Time.now()
144 
145  def set_color(self, color):
146  self.color = color
147  self.marker.color = NewColor(color[0], color[1], color[2], color[3])
148  self.update_marker()
149  #self.marker.update()
150 
151 
153 
154  def __init__(self, name, position, orientation, parent, length=1.0, width=1.0, group=""):
155 
156  self.length = length
157  self.width = width
158 
159  super(Object_Plane, self).__init__(name, position, orientation, parent, "plane", group)
160 
161  def update_marker(self):
162  super(Object_Plane, self).update_marker()
163 
164  l = self.length*0.5
165  w = self.width*0.5
166 
167  self.marker.type = Marker.TRIANGLE_LIST
168  self.marker.points = [
169  NewPoint(-l, -w, 0.0), NewPoint(l, -w, 0.0), NewPoint(-l, w, 0.0),
170  NewPoint( l, -w, 0.0), NewPoint(l, w, 0.0), NewPoint(-l, w, 0.0)
171  ]
172 
173 
175 
176  def __init__(self, name, position, orientation, parent, length=1.0, width=1.0, height=1.0, group=""):
177 
178  self.length = length
179  self.width = width
180  self.height = height
181 
182  super(Object_Cube, self).__init__(name, position, orientation, parent, "cube", group)
183 
184  def update_marker(self):
185  super(Object_Cube, self).update_marker()
186 
187  self.marker.type = Marker.CUBE
188  self.marker.scale = NewVector3(self.length, self.width, self.height)
189 
190 
192 
193  def __init__(self, name, position, orientation, parent, diameter=1.0, group=""):
194 
195  self.diameter = diameter
196 
197  super(Object_Sphere, self).__init__(name, position, orientation, parent, "sphere", group)
198 
199  def update_marker(self):
200  super(Object_Sphere, self).update_marker()
201 
202  self.marker.type = Marker.SPHERE
203  self.marker.scale = NewVector3(self.diameter, self.diameter, self.diameter)
204 
205 
207 
208  def __init__(self, name, position, orientation, parent, length=1.0, width=0.05, group=""):
209 
210  self.length = length
211  self.width = width
212 
213  super(Object_Axis, self).__init__(name, position, orientation, parent, "axis", group)
214 
215  def update_marker(self):
216  super(Object_Axis, self).update_marker()
217 
218  self.marker.type = Marker.ARROW
219  self.marker.scale = NewVector3(self.length, self.width, self.width)
220 
221 
223 
224  def __init__(self, name, position, orientation, parent, package=None, mesh_path="", scale=1.0, group=""):
225 
226  self.scale = scale
227  self.path = mesh_path
228  self.package = package
229 
230  super(Object_Mesh, self).__init__(name, position, orientation, parent, "mesh", group)
231 
232  def set_size(self, size):
233  self.scale = size
234  self.update_marker()
235  #self.marker.update()
236 
237 
238  def update_marker(self):
239  super(Object_Mesh, self).update_marker()
240 
241  self.marker.type = Marker.MESH_RESOURCE
242  if self.package == "" or self.package is None:
243  self.marker.mesh_resource = "file:"+self.path
244  else:
245  self.marker.mesh_resource = "file:"+rospkg.RosPack().get_path(self.package)+"/"+self.path
246 
247  self.marker.scale = NewVector3(self.scale, self.scale, self.scale)
248 
249 # eof
frame_editor.objects.Object_Cube
Definition: objects.py:174
frame_editor.objects.Frame.__id_counter
int __id_counter
Definition: objects.py:30
frame_editor.objects.Object_Axis
Definition: objects.py:206
frame_editor.objects.Frame.style
style
Definition: objects.py:37
frame_editor.objects.Frame.pose
def pose(self)
Definition: objects.py:70
frame_editor.objects.Object_Cube.length
length
Definition: objects.py:178
frame_editor.objects.Frame.was_published_by_frameeditor
def was_published_by_frameeditor(name)
Definition: objects.py:55
frame_editor.objects.Frame.name
name
Definition: objects.py:33
frame_editor.objects.Object_Plane.__init__
def __init__(self, name, position, orientation, parent, length=1.0, width=1.0, group="")
Definition: objects.py:154
frame_editor.objects.Frame.hidden
hidden
Definition: objects.py:41
frame_editor.objects.Object_Mesh.package
package
Definition: objects.py:228
frame_editor.objects.Object_Mesh.update_marker
def update_marker(self)
Definition: objects.py:238
frame_editor.objects.Object_Sphere.update_marker
def update_marker(self)
Definition: objects.py:199
frame_editor.objects.Object_Mesh.set_size
def set_size(self, size)
Definition: objects.py:232
srv
frame_editor.objects.Frame.value
def value(self, symbol)
Definition: objects.py:76
frame_editor.constructors_std.NewColor
def NewColor(r, g, b, a=1.0)
Color ##.
Definition: constructors_std.py:8
frame_editor.objects.Frame.print_all
def print_all(self)
Definition: objects.py:73
frame_editor.objects.Frame.marker
marker
Definition: objects.py:42
frame_editor.objects.Object_Cube.height
height
Definition: objects.py:180
frame_editor.objects.Object_Geometry.__init__
def __init__(self, name, position, orientation, parent, style, group)
Definition: objects.py:128
frame_editor.objects.Object_Axis.length
length
Definition: objects.py:210
frame_editor.constructors_std
Definition: constructors_std.py:1
frame_editor.objects.Frame.set_group
def set_group(self, group)
Definition: objects.py:112
tf2_ros::TransformListener
frame_editor.objects.Object_Plane.width
width
Definition: objects.py:157
frame_editor.objects.Object_Axis.width
width
Definition: objects.py:211
frame_editor.objects.Object_Cube.update_marker
def update_marker(self)
Definition: objects.py:184
frame_editor.objects.Object_Axis.__init__
def __init__(self, name, position, orientation, parent, length=1.0, width=0.05, group="")
Definition: objects.py:208
frame_editor.objects.Object_Geometry.update_marker
def update_marker(self)
Definition: objects.py:141
tf2_ros::StaticTransformBroadcaster
frame_editor.objects.Frame.create_new_id
def create_new_id(cls)
Definition: objects.py:65
frame_editor.objects.Object_Geometry.set_color
def set_color(self, color)
Definition: objects.py:145
frame_editor.objects.Object_Sphere
Definition: objects.py:191
frame_editor.objects.Frame.wait_for_transform
def wait_for_transform(target_frame, source_frame, timeout)
Definition: objects.py:121
frame_editor.objects.Object_Cube.width
width
Definition: objects.py:179
tf2_ros::Buffer
frame_editor.constructors_geometry.ToPose
def ToPose(p, o)
Pose ##.
Definition: constructors_geometry.py:9
frame_editor.objects.Object_Cube.__init__
def __init__(self, name, position, orientation, parent, length=1.0, width=1.0, height=1.0, group="")
Definition: objects.py:176
frame_editor.objects.Frame.parent
parent
Definition: objects.py:36
frame_editor.objects.Object_Plane
Definition: objects.py:152
frame_editor.objects.Frame
Definition: objects.py:24
frame_editor.constructors_geometry.NewVector3
def NewVector3(x, y, z)
Vector3 ##.
Definition: constructors_geometry.py:43
frame_editor.objects.Frame.color
color
Definition: objects.py:38
frame_editor.objects.Object_Geometry
Definition: objects.py:126
frame_editor.constructors_geometry
Definition: constructors_geometry.py:1
frame_editor.objects.Frame.position
position
Definition: objects.py:34
frame_editor.objects.Object_Plane.length
length
Definition: objects.py:156
tf2_ros::TransformBroadcaster
frame_editor.objects.Frame.set_value
def set_value(self, symbol, value)
Definition: objects.py:92
frame_editor.constructors_geometry.NewPoint
def NewPoint(x, y, z)
Point ##.
Definition: constructors_geometry.py:15
frame_editor.objects.Object_Mesh.__init__
def __init__(self, name, position, orientation, parent, package=None, mesh_path="", scale=1.0, group="")
Definition: objects.py:224
frame_editor.objects.Object_Mesh.path
path
Definition: objects.py:227
frame_editor.objects.Frame.__init__
def __init__(self, name, position=(0, 0, 0), orientation=(0, 0, 0, 1), parent="world", style="none", group="")
Definition: objects.py:32
frame_editor.objects.Frame.group
group
Definition: objects.py:39
frame_editor.objects.Frame.init_tf
def init_tf(static=True)
Definition: objects.py:45
frame_editor.objects.Object_Plane.update_marker
def update_marker(self)
Definition: objects.py:161
frame_editor.objects.Object_Sphere.diameter
diameter
Definition: objects.py:195
frame_editor.objects.Object_Mesh
Definition: objects.py:222
frame_editor.objects.Object_Axis.update_marker
def update_marker(self)
Definition: objects.py:215
frame_editor.objects.Frame.orientation
orientation
Definition: objects.py:35
frame_editor.objects.Object_Mesh.scale
scale
Definition: objects.py:226
frame_editor.objects.Frame.can_transform
def can_transform(target_frame, source_frame, time_)
Definition: objects.py:116
frame_editor.objects.Object_Sphere.__init__
def __init__(self, name, position, orientation, parent, diameter=1.0, group="")
Definition: objects.py:193


frame_editor
Author(s): ipa-lth , ipa-frn
autogenerated on Thu May 15 2025 02:17:25