import rospy
from sensor_msgs.msg import Imu
class ImuData:
def __init__(self):
#self.data = None
pass
def get_observation(self):
rospy.Subscriber('/imu', Imu, self.imu_callback)
imuData = self.data
print(imuData)
def imu_callback(self, msg):
self.data = msg.orientation
print(self.data)
if __name__ == '__main__':
rospy.init_node('gett_imu', anonymous= True)
idd = ImuData()
idd.get_observation()
在上面的代码中,我想从get_observation
函数访问imu_callback
中定义的self.data
。问题是我得到了一个错误,说ImuData
没有属性data
。我该如何解决此问题?
注意:我觉得这个问题与python类有关,而与Ros和rospy无关。
这里发生了一些事情。评论中提到的一点是,您应该在__init__
中初始化属性。您看到的错误部分是因为Python和self.data
实际上还没有初始化。
第二个问题是在哪里设置订阅者。这也应该在__init__
中进行,并且只能进行一次。传感器将以相当恒定的速率发布,因此实际接收有关该主题的任何数据都需要时间。此外,如果您计划多次调用get_observation
,您将创建一个新的订阅,但这是您不想要的。
以以下代码为固定示例:
def __init__(self):
rospy.Subscriber('/imu', Imu, self.imu_callback)
self.data = None
def get_observation(self):
imuData = self.data
print(imuData)