学习ROS topic_tools/throttle并发布指定名字的话题

最近开始学习ORB-SLAM3,按照官方文档运行EuRoc的rosbag测试时,发现rosbag里的话题名(/cam0/image_raw和/cam1/image_raw)和ORB-SLAM3源码中订阅话题(/camera/left/image_raw和/camera/right/image_raw)不一样,出于不想改源码的懒惰,发现了一个ROS提供的工具topic_tools/throttle,可以运行该节点来发布一个符合需要话题名的新话题,并限制最大发布频率或最大带宽,主要是为了起到限制资源即节流(throttle)的作用,ROS文档见https://wiki.ros.org/topic_tools/throttle,topic_tools/throttle是可以针对任何消息类型工作的。

throttle有throttle message和throttle bytes两种模式,实际我要使用到的是前者。

(1)throttle message (rate)

其命令格式为

throttle messages <intopic> <msgs_per_sec> [outtopic]

作用:将<intopic>上的消息节流到指定的频率 

参数说明:

intopic: 订阅的话题,即想做节流或改名的话题

msgs_per_sec: 每秒允许通过(let through)的最大消息数

outtopic: throttle节点发布的话题名,若缺省该参数,发布话题默认为intopic_throttle

例如,限制占用带宽的激光雷达话题(base_scan)到1Hz

 rosrun topic_tools throttle messages base_scan 1.0

       我需要使用到的是该模式,在使用中注意到这个msgs_per_sec参数表示的是每秒允许通过的最大消息数,所以只想给话题改个名并保证和原话题同频率的话,该参数需要设置的偏大一些,不然改名后话题的发布频率会下降很多。比如我本次使用中,rosbag中原话题/cam0/image_raw频率为20Hz,所以我在运行throttle节点时会将频率设为40或者50,这样更名后话题的发布频率也没有下降。

rosrun topic_tools throttle messages /cam0/image_raw 40 /camera/left/image_raw

(2)throttle bytes (bandwidth) 

其命令格式为

rosrun topic_tools throttle bytes <intopic> <bytes_per_sec> <window> [outtopic]

作用:给<intopic>上的消息限制在某一个最大带宽(bytes_per_sec)

参数说明:

intopic: 订阅的话题,即想做节流或改名的话题

bytes_per_sec: 每秒允许通过(let through)的最大字节数(bytes)

window: 每秒采样窗口

outtopic: throttle节点发布的话题名,若缺省该参数,发布话题默认为intopic_throttle

例如,限制占用带宽的激光雷达话题(base_scan)到1Kbps

rosrun topic_tools throttle bytes base_scan 1024 1.0

       在我对该模式实际测试中发现,发布后话题的频率不完全等于而是小于等于widow的倒数,当然不超过原频率。例如,我使用的rosbag中原话题/cam0/image_raw频率为20Hz,bytes_per_sec设为1024,window设为1,/cam0/image_raw_throttle的发布频率是略小于1的0.96多;window设为0.1,发布频率在7.5-7.6Hz的样子;window设为0.01,发布频率就是原频率20Hz了。此外,我没有太多确认带宽的参数的影响。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值