0

我编写了一个名为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

当我将打印行放在回调中时,它实际上能够打印正确的值,所以我想知道为什么这些值会在回调之外丢失。我也尝试在回调中分配一个全局变量,但仍然没有用。

4

0 回答 0