写在前面
已经录制好数据集,但是想要更改话题发布的频率,也就是类似于“抽帧” 的方式,ROS中提供了一个功能包:topic_tools/throttle
. ROS-wiki 网站介绍topic_tools/throttle 介绍也很清晰,使用方法也很简单。这里主要对原链接做一个翻译。
一、介绍
throttle
是一个能够以最大带宽或者最大消息频率来重新发布输入的话题数据到另外一个话题。这对于具有带宽限制的用途(比如通过无线链路链接)是非常有用的。它能够在任意的 message 类型下进行工作。
二、使用方法
2.1 参数
~wall_clock
(bool, default: False)
如果为True,则根据墙上的时钟时间(wall clock time)执行所有速率测量,无论模拟/日志时间是否有效。
(New in ros_comm 1.5.3)
~unreliable
(bool, default: False)
如果为True,则倾向于通过输入数据的不可靠连接。
(原文: If True, prefer to negotiate an unreliable connection for the inbound data.)
(New in ros_comm 1.5.3)
~lazy
(bool, default: False)
如果为True,只有至少有一个订阅者订阅了输出话题,当前节点才会订阅到输入话题上(有订阅输出话题,这个节点才会工作)。
(New in ros_comm 1.5.3)
2.2 控制发布频率
功能:控制 输入话题intopic按照 最大频率的限制
输出到outtopic。
命令格式:
throttle messages <intopic> <msgs_per_sec> [outtopic]
参数解释:
intopic: 订阅的输入话题
msgs_per_sec: 每秒允许通过的最大messages数。
outtopic: 发布的输出话题 (default: intopic_throttle)
举例说明:
将激光雷达数据 /laser_scan
限制到最大 1hz,并发布到 /laser_scan_low_freq
rosrun topic_tools throttle messages /laser_scan 1.0 /laser_scan_low_freq
launch 文件写法:
<node pkg="topic_tools" type="throttle" name="camera_throttle" args="messages /laser_scan 5.0 /laser_scan_low_freq" output="screen" respawn="true"/>
2.3 控制发布带宽
功能:控制 输入话题intopic按照最大带宽的限制
输出到outtopic。
命令格式:
throttle bytes <intopic> <bytes_per_sec> <window> [outtopic]
参数解释:
intopic: 订阅的输入话题
bytes_per_sec: 每秒允许通过的最大字节数数。
window: 采样窗口, 单位s。 (原文: Window (in seconds) over which to sample)
outtopic: 发布的输出话题 (default: intopic_throttle)
举例说明:
将激光雷达数据 /laser_scan
带宽限制到最大 1KBps,并发布到 /laser_scan_low_bandwidth
rosrun topic_tools throttle bytes /laser_scan 1024 1.0 /laser_scan_low_bandwidth
launch 文件写法:
<node pkg="topic_tools" type="throttle" name="camera_throttle" args="bytes /laser_scan 1024 1.0 /laser_scan_low_bandwidth" output="screen" respawn="true"/>
参考链接
[1] ROS wiki. topic_tools/throttle [EB/OL]. http://wiki.ros.org/topic_tools/throttle, 2019-06-11/2023-01-11.