问题描述
我编写了一个名为 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 (将#修改为@)