Ros message_filters (消息滤波器)介绍与使用-待完善

     本文对ros message_filters 滤波器进行了基本介绍,包括message_filters包的功能,通用使用方法,以及Subscriber 滤波的使用方法。

1.Ros  message_filters 总览:

     message filters 即包含一系列滤波器,这些滤波器只有在输入数据满足一定条件才进行输出。如:当从不同传感器获取数据时,使用时间同步滤波器,可以获得不同传感器数据在同一时间戳下的数据。

2.Filter Pattern(滤波方法)

     在message filters 中所有的滤波算法都采用同样的方式对输入、输出进行连接。滤波器输入可以通过滤波器构造函数或者通过构造函数connectInput() 方法,输出通过注册回调函数registerCallback()方法。

    因为每个滤波器的输入,输出数据类型都是固定,所以在滤波器互相连接时要注意输入输出数据类型,是否可以直接连接。如给定两个滤波器FooFilter、BarFilter。FooFilter 的输出类型与BarFilter 输入类型相同,因此使用时可以对他们进行连接。

滤波器连接方式示例代码
示例1:
FooFilter foo;
BarFilter bar(foo);
示例2:
FooFilter foo;
BarFilter bar;
bar.connectInput(foo);

2.1 registerCallback()(注册回调函数)

    使用registerCallback()方法我们可以注册多个回调函数,并且以注册时的顺序被调用。registerCallback() 返回message_filters::Connection 对象,可以调用该对象的disconnect() 方法断开连接。

3. Subscriber

    订阅者滤波器提供其他滤波器的输入源,内部实现只是对ros 订阅者的一个封装,且subscriber 滤波器不能连接其他滤波器的输出。订阅者滤波器采用订阅主题的方式获取输入。

3.1 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);//同时设置输入输出

4.总结

    message_filters 包中有丰富的滤波器,本文只列举了Subscriber的使用作为示例,其他的使用方法及功能可以参考ros wiki。后续如果有时间,本文也会继续完善文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值