31 from __future__
import absolute_import
35 from tf2_msgs.msg
import TFMessage
36 from geometry_msgs.msg
import TransformStamped
38 from rc_reason_msgs.srv
import ComputeGrasps, DetectItems
40 from visualization_msgs.msg
import Marker, MarkerArray
41 from std_msgs.msg
import ColorRGBA
43 from .rest_client
import RestClient
44 from .transform_helpers
import lc_to_marker, load_carrier_to_tf
48 tf = TransformStamped()
49 tf.header.frame_id = grasp.pose.header.frame_id
50 tf.child_frame_id =
"grasp_".format(postfix)
51 tf.header.stamp = grasp.pose.header.stamp
52 tf.transform.translation.x = grasp.pose.pose.position.x
53 tf.transform.translation.y = grasp.pose.pose.position.y
54 tf.transform.translation.z = grasp.pose.pose.position.z
55 tf.transform.rotation = grasp.pose.pose.orientation
60 tf = TransformStamped()
61 tf.header.frame_id = item.pose.header.frame_id
62 tf.child_frame_id =
"boxitem_".format(postfix)
63 tf.header.stamp = item.pose.header.stamp
64 tf.transform.translation.x = item.pose.pose.position.x
65 tf.transform.translation.y = item.pose.pose.position.y
66 tf.transform.translation.z = item.pose.pose.position.z
67 tf.transform.rotation = item.pose.pose.orientation
74 ignored_parameters = [
'load_carrier_crop_distance',
'load_carrier_model_tolerance']
75 super(PickClient, self).
__init__(rest_name, ignored_parameters)
81 self.
pub_tf = rospy.Publisher(
'/tf', TFMessage, queue_size=10)
82 self.
pub_markers = rospy.Publisher(
'visualization_marker_array', MarkerArray, queue_size=10)
87 rospy.on_shutdown(self.
stop)
92 rospy.loginfo(
"starting %s", self.
rest_name)
96 rospy.loginfo(
"stopping %s", self.
rest_name)
102 self.
pub_tf.publish(TFMessage(transforms=transforms))
108 transforms = [
grasp_to_tf(grasp, i)
for i, grasp
in enumerate(grasps)]
109 self.
pub_tf.publish(TFMessage(transforms=transforms))
114 def create_marker(grasp, id):
115 m = Marker(action=Marker.ADD, type=Marker.SPHERE)
116 m.color = ColorRGBA(r=0.8, g=0.2, b=0.0, a=0.8)
117 m.scale.x = grasp.max_suction_surface_length
118 m.scale.y = grasp.max_suction_surface_width
120 m.header = grasp.pose.header
121 m.pose = grasp.pose.pose
127 for i, grasp
in enumerate(grasps):
128 m = create_marker(grasp, i)
133 new_markers.append(m)
142 for i, lc
in enumerate(lcs):
148 new_markers.append(m)
149 for i
in range(len(lcs), len(self.
lc_markers)):
159 super(ItemPickClient, self).
__init__(rest_name)
172 super(BoxPickClient, self).
__init__(rest_name)
194 transforms = [
item_to_tf(item, i)
for i, item
in enumerate(items)]
195 self.
pub_tf.publish(TFMessage(transforms=transforms))
198 def main(rest_node='rc_itempick'):
199 if rest_node ==
'rc_itempick':
201 elif rest_node ==
'rc_boxpick':
205 logging.error(
'unknown rest_node %s', rest_node)
210 except KeyboardInterrupt:
215 main(rest_node=
'rc_itempick')
219 main(rest_node=
'rc_boxpick')
222 if __name__ ==
'__main__':
def main(rest_node='rc_itempick')
def detect_items_cb(self, srv_name, srv_type, request)
def compute_grasps_cb(self, srv_name, srv_type, request)
def item_to_tf(item, postfix)
def call_rest_service(self, name, srv_type=None, request=None)
def add_rest_service(self, srv_type, srv_name, callback)
def publish_grasps_markers(self, grasps)
def publish_lc_markers(self, lcs)
def compute_grasps_cb(self, srv_name, srv_type, request)
def __init__(self, rest_name)
def __init__(self, rest_name)
def __init__(self, rest_name)
def publish_items(self, items)
def grasp_to_tf(grasp, postfix)
def publish_grasps(self, grasps)
def publish_lcs(self, lcs)