Go to the documentation of this file.00001
00002
00003 import roslib; roslib.load_manifest('camera_pose_calibration')
00004 import tf2_ros
00005 import rospy
00006 import PyKDL
00007 from tf_conversions import posemath
00008 from geometry_msgs.msg import TransformStamped
00009
00010
00011 class StaticPublisher:
00012 def __init__(self):
00013 self.pub = tf2_ros.TransformBroadcaster()
00014 pose = rospy.get_param('~transform')
00015 self.pose_msg = TransformStamped()
00016 self.pose_msg.header.frame_id = pose['parent_id']
00017 self.pose_msg.child_frame_id = pose['child_id']
00018 self.pose_msg.transform.translation.x = pose['translation'][0]
00019 self.pose_msg.transform.translation.y = pose['translation'][1]
00020 self.pose_msg.transform.translation.z = pose['translation'][2]
00021 q = self.pose_msg.transform.rotation
00022
00023 if 'rotation' in pose and 'quaternion' in pose:
00024 rospy.logfatal("'quaterion' and 'rotation' specified. Please remove one")
00025 raise
00026
00027 if 'rotation' in pose:
00028 (q.x, q.y, q.z, q.w) = PyKDL.Rotation(*pose['rotation']).GetQuaternion()
00029 elif 'quaternion' in pose:
00030 r = pose['quaternion']
00031 q.x = r['x']
00032 q.y = r['y']
00033 q.z = r['z']
00034 q.w = r['w']
00035 else:
00036 rospy.logfatal("No rotation specified. Use 'rotation' or 'quaternion'.")
00037 raise
00038
00039
00040
00041 def publish(self):
00042 self.pose_msg.header.stamp = rospy.Time.now() + rospy.Duration(0.5)
00043 self.pub.sendTransform(self.pose_msg)
00044
00045
00046
00047 def main():
00048 rospy.init_node('static_tf_publisher')
00049 s = StaticPublisher()
00050 r = rospy.Rate(5)
00051 while not rospy.is_shutdown():
00052 s.publish()
00053 r.sleep()
00054
00055
00056 if __name__ == '__main__':
00057 main()