我编写了一个名为translater的节点,除了将一种消息类型转换为另一种消息类型外,它基本上不做任何事情。
它订阅主题pose_before并发布到另一个主题pose_after。
主题pose_before是消息类型“PoseWithCovarianceStamped”,pose_after是“TransformStamped”。
问题是pose_after中的所有值在发布时都保持为0,但是当我尝试在回调中打印值时,它们确实响应正确。
#!/usr/bin/env python
import rospy
from geometry_msgs.msg import PoseWithCovarianceStamped
from geometry_msgs.msg import TransformStamped
def callback(data):
TransformStamped().transform.translation.x = data.pose.pose.position.x
TransformStamped().transform.translation.y = data.pose.pose.position.y
TransformStamped().transform.translation.z = data.pose.pose.position.z
TransformStamped().transform.rotation.x = data.pose.pose.orientation.x
TransformStamped().transform.rotation.y = data.pose.pose.orientation.y
TransformStamped().transform.rotation.z = data.pose.pose.orientation.z
TransformStamped().transform.rotation.w = data.pose.pose.orientation.w
def listener():
pub = rospy.Publisher('pose_after', TransformStamped, queue_size=40)
pose_after = TransformStamped()
rospy.init_node('translater', anonymous=True)
rospy.loginfo("Publishing pose_after")
rospy.Subscriber('pose_before', PoseWithCovarianceStamped, callback)
rate = rospy.Rate(40)
pose_after.header.stamp = rospy.Time.now()
pose_after.child_frame_id = 'base_footprint'
print(pose_after.transform.translation.x) # this prints (0,0)
while not rospy.is_shutdown():
pub.publish(pose_after)
rate.sleep()
if __name__ == '__main__':
try:
listener()
except rospy.ROSInterruptException:
pass
当我将打印行放在回调中时,它实际上能够打印正确的值,所以我想知道为什么这些值会在回调之外丢失。我也尝试在回调中分配一个全局变量,但仍然没有用。