我在ROS melodic中安装了Ubuntu 18.04版本。我在后台运行一个rosbag来模拟rostopics消息中的摄像头。我在rosparams中设置了摄像机名称,并反复遍历以捕获每个摄像机主题。我正在使用message_filter ApproximateTimeSynchronizer获取时间同步数据,如官方文档过滤器中所提到的
但是,在大多数情况下,对ApproximateTimeSynchronizer的回调函数没有被调用/有延迟。下面给出了我使用的代码片段:
我在这里做错什么了?
def camera_callback(*args):pass #其他逻辑出现在rospy.init_node('my_listener',anonymous=True) camera_object_data = [] camera_name in rospy.get_param(‘/my/rospy.get_param’):rospy.init_node‘/{}/hd/camera’..format(Camera_name),( camera_object_data.append(message_filters.Subscriber( '/{}/hd/image_color_rect'.format(camera_name),Image)( camera_object_data.append(message_filters.Subscriber( '/{}/qhd/image_depth_rect'.format(camera_name),Image)( camera_object_data.append(message_filters.Subscriber(‘/{}/qhd/point’..format(Camera_name),( message_filters.ApproximateTimeSynchronizer(topic_list,10,1,allow_headerless=True) ts.registerCallback(camera_callback) rospy.spin()
发布于 2019-09-04 17:03:17
看你的代码,这似乎是正确的。但是,可能存在错误的时间戳问题,因此这个同步器也是如此,关于算法假设,请参阅过滤器/接近时间。
我的建议是编写一个相应的节点,同时发布这四个msg的空版本。如果它在这个完美的场景中仍然不能工作,那么上面的代码就有一个问题。如果它工作得很好,那么您需要注意标题。
如果您将它作为一个包文件,您也可以使用逐步遍历命令行上的msg并观察时间戳。(也可以步进巨蟒)。
$ rosbag play --pause recorded1.bag # step through msgs by pressing 's'在带有小有效负载的时间干扰消息中,我刚刚编写了一个节点来侦听所有这些消息,并根据在其中任何一个上找到的最新时间重新发布它们(用于同步登录到csv)。这并不是最优的,但它应该揭示问题的所在。
https://stackoverflow.com/questions/57743078
复制相似问题