ROS 无法发布到不同的消息类型

问题描述

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

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)