首页 > 解决方案 > 订阅者 ROS 节点上的数学运算

问题描述

我正在从一个主题接收数据,我在一个单独的节点中订阅了这个主题我想对这些数据做一些数学运算,但我得到一个错误,这是代码

def __init__(self):

rospy.init_node('extreme_values', annonymous=True)
self.x= rospy.subscriber('x_values', float32, callback)
self.y= rospy.subscriber('y_values', float32, callback)
self.theta= rospy.subscriber('theta_values', float32, callback)

self.extreme = (self.x - self.y) + ((self.x * self.y) * cos(self.theta))

标签: pythonrosrospy

解决方案


你做错了什么,你可以尝试类似下面的东西,

import rospy 
from std_msgs.msg import Float32 

class Handler():
    def __init__(self):
        rospy.subscriber('x_values', Float32, self.callback_xvalues)
        rospy.subscriber('y_values', Float32, self.callback_yvalues)
        rospy.subscriber('theta_values', Float32, self.callback_zvalues)
         self.extreme_pub = rospy.publisher('extreme/results', Float32, queue_size = 10) 

        self.x = None
        self.y = None
        self.theta = None 

    def callback_xvalues(self, data):
        self.y = data
    
    def callback_yvalues(self, data):
        self.y = data

    def callback_zvalues(self, data):
        self.y = data
        if((self.x is not None) and (self.theta is not None)):
            self.extreme = (self.x - self.y) + ((self.x * self.y) * cos(self.theta))
            info = Float32()
            info.data = self.extreme
            self.extreme_pub.publish(info)


rospy.init_node('extreme_values', annonymous=True)

node_ = Handler()

rospy.subscriber不返回任何内容,但是当消息到达时触发相应的回调,即 callback_xvalues,因此您的逻辑应该在这些回调之一中实现,即 callback_zvalues。不要为不同的主题注册相同的回调,不推荐。让我知道你明白了


推荐阅读