Python类中无法访问回调函数定义的self.data属性该如何解决?
问题原因
- 你注释了
__init__方法中self.data = None的初始化语句,类实例创建时没有预先定义data属性,只要imu_callback还没被触发过,访问self.data就会直接抛出属性不存在的错误。 - 回调函数是异步执行的,你在
get_observation里刚完成订阅器注册就立刻读取self.data,此时还没有IMU消息进来触发回调,self.data自然还没被赋值。
解决方法
首先恢复__init__中的self.data初始化,保证实例创建后就存在该属性:
def __init__(self): self.data = None
如果需要在get_observation中获取到有效的IMU数据,需要增加等待逻辑,等self.data被回调赋值后再读取,修改后的完整代码如下:
import rospy from sensor_msgs.msg import Imu class ImuData: def __init__(self): self.data = None def get_observation(self): rospy.Subscriber('/imu', Imu, self.imu_callback) # 等待回调完成首次赋值 while self.data is None and not rospy.is_shutdown(): rospy.sleep(0.01) 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()
内容的提问来源于stack exchange,提问作者Monojit Sarkar
相关产品推荐
相关产品推荐

