0

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()

在上面的代码中,我想从函数中访问self.data定义。问题是我得到错误说没有属性。我该如何解决这个问题?imu_callbackget_observationImuDatadata

注意:我觉得这个问题与 python 类有关,与 Ros 和 rospy 无关。

4

1 回答 1

2

这里正在发生一些事情。一,评论中提到的,是你应该在里面初始化你的属性__init__self.data您看到的错误部分是由于 Python 以及尚未实际初始化的事实。

您遇到的第二个问题是您设置订阅者的位置。这也应该__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)
于 2021-11-05T12:40:34.137 回答