message_filters не вызывает функцию обратного вызова - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь использовать message_filters для подписки на две темы.Вот мой код

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.TimeSynchronizer([self.image_sub, self.info_sub], 10)
        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)

Но он никогда не переходит к функции обратного вызова.Он просто замерзает на rospy.spin().

1 Ответ

0 голосов
/ 01 марта 2019

Вместо использования TimeSynchronizer я использовал ApproximateTimeSynchronizer, и это сработало.Итак, я изменил код на -

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)

Прежде чем найти это решение, я просто использовал глобальные переменные для доступа к сообщению первой темы, назначив сообщение глобальной переменной в обратном вызове и использовал его дляобратный вызов второго, и вот как я смог работать с обоими.Это не чисто, но экономит часы разочарования.

...