throttle
转播 (relay)话题, 限制最大发布频率或者带宽。使用格式: rosrun topic_tools throttle messages <intopic> <msgs_per_sec> [outtopic]
messages是当前使用的是throttle的messages模式,限制发布频率. intopic是指你想要改变频率的那个topic, msgs_per_sec是指你想要它发布的频率,而outtopic是指改变发布频率后的topic的名称,可以省略,如果省略则自动在原来topic的名字上后缀throttle
另外还有bytes模式, 用以限制带宽: rosrun topic_tools throttle bytes <intopic> <bytes_per_sec> <window> [outtopic]
例如,让雷达的带宽占用降至1KBps,则命令为:1
rosrun topic_tools throttle bytes base_scan 1024 1.0
改变topic发布频率并不是说原来的topic就没了,或者直接在原来的topic上更改, 而是把其更改后的topic发布出来,原来的topic仍然存在
有三个参数,需要注意的是~lazy
,如果它等于True的话,只有当你订阅到throttle发出来的消息,它才会工作,这显然是ros::publish
函数的lazy模式了
最大的问题是 频率控制的精度低,我要求4Hz,实际却在3.6Hz左右,所以实际要设置的大一些
transform
订阅一个topic或topic field,并在应用给定的Python表达式后将传入的数据发布到另一个topic。它可以处理任何消息类型,主要用于简单的消息转换,例如计算向量或四元数的范数, 甚至将四元数转换为欧拉角。
transform <input> <output_topic> <output_type> [<expression>] [--import <module> [<module> ...]]
- input:要订阅的传入topic(或topic field)
- output_topic:要发布的输出topic
- expression:转换输入消息的Python表达式,在变量m中给出。默认表达式是m,它将输入(可以是topic field)转发到output_topic
- import :要在表达式中导入和使用的Python模块的列表。默认导入numpy模块
1 | # 计算IMU给出的方向四元数的范数 |
mux: multiplex between multiple topics
relay: republish data on one topic to another.
relay_field: allow to republish data in a different message type
drop: relay a topic, dropping X out of every Y message.
mux
topic_tools-mux
可以用于多地图实时切换,参考MUX的使用