赞
踩
本文对ros message_filters 滤波器进行了基本介绍,包括message_filters包的功能,通用使用方法,以及Subscriber 滤波的使用方法。
message filters 即包含一系列滤波器,这些滤波器只有在输入数据满足一定条件才进行输出。如:当从不同传感器获取数据时,使用时间同步滤波器,可以获得不同传感器数据在同一时间戳下的数据。
在message filters 中所有的滤波算法都采用同样的方式对输入、输出进行连接。滤波器输入可以通过滤波器构造函数或者通过构造函数connectInput() 方法,输出通过注册回调函数registerCallback()方法。
因为每个滤波器的输入,输出数据类型都是固定,所以在滤波器互相连接时要注意输入输出数据类型,是否可以直接连接。如给定两个滤波器FooFilter、BarFilter。FooFilter 的输出类型与BarFilter 输入类型相同,因此使用时可以对他们进行连接。
- 滤波器连接方式示例代码
- 示例1:
- FooFilter foo;
- BarFilter bar(foo);
- 示例2:
- FooFilter foo;
- BarFilter bar;
- bar.connectInput(foo);
使用registerCallback()方法我们可以注册多个回调函数,并且以注册时的顺序被调用。registerCallback() 返回message_filters::Connection 对象,可以调用该对象的disconnect() 方法断开连接。
订阅者滤波器提供其他滤波器的输入源,内部实现只是对ros 订阅者的一个封装,且subscriber 滤波器不能连接其他滤波器的输出。订阅者滤波器采用订阅主题的方式获取输入。
subscriber 没有输入连接,输出采用回调函数方式。
C++: void callback(const boost::shared_ptr<M const>&) Python: callback(msg)
示例代码如下:
- 示例1:
- message_filters::Subscriber<std_msgs::UInt32> sub(nh, "my_topic", 1);//获取输入
- sub.registerCallback(myCallback);//设置输出
- 示例2:
- ros::Subscriber sub = nh.subscribe("my_topic", 1, myCallback);//同时设置输入输出
message_filters 包中有丰富的滤波器,本文只列举了Subscriber的使用作为示例,其他的使用方法及功能可以参考ros wiki。后续如果有时间,本文也会继续完善文档。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。