Python 消息过滤器不';t调用回调函数
我正试图使用message_过滤器来订阅两个主题。这是我的密码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
类同步\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”,也不会调用回调函数。你能给我提点别的建议吗?我需要你。非常感谢。