我们在使用ros过程中,经常要对某个或多个topic进行下采样后重发,用于ros数据采集。
非同步下采样重发
rosrun topic_tools throttle messages /rgb_n_f/img/compressed 5 /rgb_n_f/img_throttle/compressed
throttle工具能实现单个topic的制定频率的重发,但是对于多个传感器的下采样就无能为力了,只能运行多个throttle实例导致多传感器同步问题
同步下采样重发
基于上述多传感器下采样不同步的问题,我们自然想到同步接收多个传感器的数据,然后下采样后逐个转发。需要用到的关键代码为:
message_filters.ApproximateTimeSynchronizer
具体代码如下
#!/usr/bin/env python
import rospy
import message_filters
from rostopic import get_topic_class
global syn_cnt
syn_cnt=0
def callback(*msgs):
global syn_cnt
global down_rate
if syn_cnt%down_rat