Python 消息过滤器不';t调用回调函数

Python 消息过滤器不';t调用回调函数,python,ros,rospy,Python,Ros,Rospy,我正试图使用message_过滤器来订阅两个主题。这是我的密码 类同步\u侦听器: 定义初始化(自): self.image\u sub=message\u filters.Subscriber('camera/rgb/image\u color',image) self.info\u sub=消息过滤器.Subscriber('camera/projector/camera\u info',CameraInfo) self.ts=消息过滤器.时间同步器([self.image\u sub,se

我正试图使用message_过滤器来订阅两个主题。这是我的密码

类同步\u侦听器:
定义初始化(自):
self.image\u sub=message\u filters.Subscriber('camera/rgb/image\u color',image)
self.info\u sub=消息过滤器.Subscriber('camera/projector/camera\u info',CameraInfo)
self.ts=消息过滤器.时间同步器([self.image\u sub,self.info\u sub],10)
self.ts.registerCallback(self.callback)
def回调(自身、图像、摄像头信息):
打印(“完成”)
def主(args):
ls=sync_侦听器()
rospy.init_节点('sample_message_filters',anonymous=True)
尝试:
rospy.spin()
除键盘中断外:
打印(“关闭”)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
主(系统argv)

但它永远不会进入回调函数。它只是冻结在
rospy.spin()

而不是使用
时间同步器
我使用了
近似同步器
,它工作了。所以,我把代码改为-

class sync_listener:
    def __init__(self):
        self.image_sub = message_filters.Subscriber('camera/rgb/image_color', Image)
        self.info_sub = message_filters.Subscriber('camera/projector/camera_info', CameraInfo)
        self.ts = message_filters.ApproximateTimeSynchronizer([self.image_sub, self.info_sub], 1, 1) # Changed code
        self.ts.registerCallback(self.callback)

    def callback(self, image, camera_info):
        print("done")

def main(args):
    ls = sync_listener()
    rospy.init_node('sample_message_filters', anonymous=True)
    try:
        rospy.spin()
    except KeyboardInterrupt:
        print("Shutting down")

if __name__ == '__main__':
    main(sys.argv)

在找到这个解决方案之前,我只是使用全局变量访问第一个主题的消息,方法是将消息分配给回调中的全局变量,并在第二个主题的回调中使用它,这就是我如何处理这两个主题的方法。它不干净,但可以节省数小时的沮丧时间。

您是否确认您正在收听的消息实际上正在发布?可能是
rostopicecho
当您运行测试以确保它们按预期工作时,您对相邻终端感兴趣的那些。是的,我做了。我还分别订阅了
rgb
depth
图像主题,并在回调中订阅了
imshow
ed。它起作用了。我只是无法使用它们来过滤
消息。\u
。您发布的代码运行良好(至少在我的设备上)。对我来说,似乎没有在定义的主题中发布消息。你应该再次检查主题及其类型。你解决了这个问题吗?我面临着完全相同的问题;(@iamongtung,我已经发布了我的答案。如果有帮助,请告诉我。:)即使使用了“ApproximateMesynchronizer”,也不会调用回调函数。你能给我提点别的建议吗?我需要你。非常感谢。