quat2rpy.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 '''
3 Node to convert from quaternions to rpy in various ROS messages
4 '''
5 
6 import rospy
7 import tf
8 from geometry_msgs.msg import Vector3
9 from geometry_msgs.msg import Pose
10 from geometry_msgs.msg import PoseArray
11 from sensor_msgs.msg import Imu
12 from gazebo_msgs.msg import ModelStates
13 from nav_msgs.msg import Odometry
14 
15 class Node():
16  def __init__(self,pose_index=None,model_name=None,
17  input_msg_type='Pose'):
18  self.pubmsg = None
19  self.pub = None
20  self.pose_index = pose_index
21  self.model_name = model_name
22  self.input_msg_type = input_msg_type
23 
24 
25  def callback(self,data):
26  #rospy.loginfo("callback")
27  if (not (pose_index==None)):
28  data = data[pose_index]
29  elif self.model_name is not None:
30  try:
31  index = data.name.index(model_name)
32  except ValueError:
33  rospy.logwarn_throttle(10.0, 'Model state {} not found'.format(model_name))
34  return
35  data = data.pose[index]
36  elif ( (self.input_msg_type == 'Pose') or
37  (self.input_msg_type == 'Imu')):
38  pass
39  elif self.input_msg_type == 'Odometry':
40  data = data.pose.pose
41  else:
42  rospy.logerr("Don't know what to do with message type %s"%
43  self.input_msg_type)
44  sys.exit()
45  q = (data.orientation.x,
46  data.orientation.y,
47  data.orientation.z,
48  data.orientation.w)
49  euler = tf.transformations.euler_from_quaternion(q)
50  self.pubmsg.x = euler[0]
51  self.pubmsg.y = euler[1]
52  self.pubmsg.z = euler[2]
53  rospy.logdebug("publishing rpy: %.2f, %.2f, %.2f"
54  %(euler[0],euler[1],euler[2]))
55  self.pub.publish(self.pubmsg)
56 
57 if __name__ == '__main__':
58 
59  rospy.init_node('quat2rpy', anonymous=True)
60 
61  # ROS Parameters
62  in_topic = 'in_topic'
63  out_topic = 'out_topic'
64  pose_index = rospy.get_param('~pose_index',None)
65  model_name = rospy.get_param('~model_name',None)
66  inmsgtype = rospy.get_param('~input_msg_type','Pose')
67 
68 
69  # Initiate node object
70  node=Node(pose_index, model_name, input_msg_type=inmsgtype)
71  node.pubmsg = Vector3()
72 
73  # Setup publisher
74  node.pub = rospy.Publisher(out_topic,Vector3,queue_size=10)
75 
76  # Subscriber
77  if (not(model_name == None)):
78  inmsgtype = 'ModelStates[%s]'% model_name
79  rospy.Subscriber(in_topic,ModelStates,node.callback)
80  elif (not (pose_index == None)):
81  inmsgtype = 'PoseArray[%d]'%pose_index
82  # Setup subscriber
83  rospy.Subscriber(in_topic,PoseArray,node.callback)
84  else:
85  if inmsgtype == 'Pose':
86  # Setup subscriber
87  rospy.Subscriber(in_topic,Pose,node.callback)
88  elif inmsgtype == 'Imu':
89  rospy.Subscriber(in_topic,Imu,node.callback)
90  elif inmsgtype == 'Odometry':
91  rospy.Subscriber(in_topic,Odometry,node.callback)
92  else:
93  rospy.logerr("I don't know how to deal with message type <%s>"%
94  inmsgtype)
95  sys.exit()
96 
97 
98  rospy.loginfo("Subscribing to %s, looking for %s messages."%
99  (in_topic,inmsgtype))
100 
101  rospy.loginfo("Publishing to %s, sending Vector3 messages"%
102  (out_topic))
103 
104 
105 
106  try:
107  rospy.spin()
108  except rospy.ROSInterruptException:
109  pass
def __init__(self, pose_index=None, model_name=None, input_msg_type='Pose')
Definition: quat2rpy.py:17
def callback(self, data)
Definition: quat2rpy.py:25


vmrc_gazebo
Author(s): Brian Bingham , Carlos Aguero
autogenerated on Sun Feb 17 2019 03:14:16