xyz_to_screenpoint.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 
3 import rospy
4 import tf2_ros
5 import tf2_geometry_msgs
6 
7 from sensor_msgs.msg import CameraInfo
8 from geometry_msgs.msg import PointStamped
9 from geometry_msgs.msg import PoseStamped
10 from image_geometry import PinholeCameraModel
11 
12 
13 class XYZToScreenPoint(object):
14  def __init__(self):
16  self.is_camera_arrived = False
17  self.frame_id = None
18  self.tf_buffer = tf2_ros.Buffer(rospy.Duration(1200.0))
20 
21  self.pub = rospy.Publisher("~output", PointStamped, queue_size=1)
22 
23  rospy.Subscriber('~input/camera_info', CameraInfo, self.camera_info_cb)
24  rospy.Subscriber('~input', PointStamped, self.point_stamped_cb)
25 
26  def camera_info_cb(self, msg):
27  self.cameramodels.fromCameraInfo(msg)
28  self.frame_id = msg.header.frame_id
29  self.is_camera_arrived = True
30 
31  def point_stamped_cb(self, msg):
32  if not self.is_camera_arrived:
33  return
34  pose_stamped = PoseStamped()
35  pose_stamped.pose.position.x = msg.point.x
36  pose_stamped.pose.position.y = msg.point.y
37  pose_stamped.pose.position.z = msg.point.z
38  try:
39  transform = self.tf_buffer.lookup_transform(self.frame_id, msg.header.frame_id, rospy.Time(0), rospy.Duration(1.0))
40  except (tf2_ros.LookupException, tf2_ros.ConnectivityException, tf2_ros.ExtrapolationException) as e:
41  rospy.logerr('lookup_transform failed: {}'.format(e))
42  return
43  position_transformed = tf2_geometry_msgs.do_transform_pose(pose_stamped, transform).pose.position
44  pub_point = (position_transformed.x, position_transformed.y, position_transformed.z)
45  u, v = self.cameramodels.project3dToPixel(pub_point)
46  rospy.logdebug("u, v : {}, {}".format(u, v))
47  pub_msg = PointStamped()
48  pub_msg.header = msg.header
49  pub_msg.header.frame_id = self.frame_id
50  pub_msg.point.x = u
51  pub_msg.point.y = v
52  pub_msg.point.z = 0
53  self.pub.publish(pub_msg)
54 
55 
56 if __name__ == '__main__':
57  rospy.init_node("xyz_to_screenpoint")
58  xyz_to_screenpoint = XYZToScreenPoint()
59  rospy.spin()


jsk_pcl_ros_utils
Author(s): Yohei Kakiuchi
autogenerated on Mon May 3 2021 03:03:15