31 from __future__
import absolute_import
36 from tf2_msgs.msg
import TFMessage
37 from geometry_msgs.msg
import TransformStamped, Quaternion
39 from rc_reason_msgs.srv
import SilhouetteMatchDetectObject
40 from rc_reason_msgs.srv
import CalibrateBasePlane
41 from rc_reason_msgs.srv
import GetBasePlaneCalibration
42 from rc_reason_msgs.srv
import DeleteBasePlaneCalibration
44 from visualization_msgs.msg
import Marker, MarkerArray
45 from std_msgs.msg
import ColorRGBA
47 from .rest_client
import RestClient
48 from .transform_helpers
import lc_to_marker, load_carrier_to_tf, match_to_tf
54 ignored_parameters = [
'load_carrier_crop_distance',
'load_carrier_model_tolerance']
55 super(SilhouetteMatchClient, self).
__init__(
'rc_silhouettematch', ignored_parameters)
61 self.
pub_tf = rospy.Publisher(
'/tf', TFMessage, queue_size=10)
62 self.
pub_markers = rospy.Publisher(
'visualization_marker_array', MarkerArray, queue_size=10)
81 def calib_cb(self, srv_name, srv_type, request):
83 if response.return_code.value >= 0:
91 self.
pub_tf.publish(TFMessage(transforms=transforms))
96 self.
pub_tf.publish(TFMessage(transforms=transforms))
102 for i, lc
in enumerate(lcs):
108 new_markers.append(m)
109 for i
in range(len(lcs), len(self.
lc_markers)):
116 def create_marker(plane, id=0):
117 m = Marker(action=Marker.ADD, type=Marker.CYLINDER)
118 m.color = ColorRGBA(r=0.0, g=1.0, b=0.0, a=0.5)
119 m.header.frame_id = pose_frame
120 m.pose.position.x = -plane.coef[0] * plane.coef[3]
121 m.pose.position.y = -plane.coef[1] * plane.coef[3]
122 m.pose.position.z = -plane.coef[2] * plane.coef[3]
127 q = Quaternion(x=-plane.coef[1], y=plane.coef[0], z=0.0, w=plane.coef[2] + 1.0)
128 norm = sqrt(q.x*q.x + q.y*q.y + q.z*q.z + q.w*q.w)
129 m.pose.orientation.x = q.x / norm
130 m.pose.orientation.y = q.y / norm
131 m.pose.orientation.w = q.z / norm
132 m.pose.orientation.x = q.z / norm
140 m = create_marker(plane)
149 except KeyboardInterrupt:
153 if __name__ ==
'__main__':