【ROS工具学习】之topic_tools/throttle,改变节点发布频率

本文介绍了一种在ROS环境中利用topic_tools的throttle工具轻松调整传感器topic发布频率的方法。适用于多传感器融合实验场景,可有效减少数据处理压力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近老师想做一个实验,机器人上搭在Hokuyo单线激光雷达,Velodyne16线激光雷达,Kinect2,Bumblebee xb3等传感器,这些传感器做一些实验,因为传感器较多所以采集的数据量非常大,需要在采集的时候降低topic的发布频率,玩过ROS的人都知道,可以直接通过修改源代码发布消息的部分来改变topic的发布频率,但是传感器太多,而且要去仔细研究其源代码,所以比较麻烦,今天发现一神器:topic_tools下面有一个throttle工具可以直接从外部改变topic的发布频率,网址在下面,简单易懂,自己去看吧:
http://wiki.ros.org/topic_tools/throttle

这个工具主要用来限制最大发布频率或者带宽的。

1.限制发布频率
其命令格式如下:

rosrun topic_tools throttle messages <intopic> <msgs_per_sec> [outtopic]

例如,如果我想要让激光雷达的topic发布频率降低至1HZ,则在终端中输入如下命令:

rosrun topic_tools throttle messages base_scan 1.0

可见前面的rosrun topic_tools throttle messages 是指我使用的是throttle 下面的messages模式,其中 intopic是指你想要改变频率的那个topic msgs_per_sec是指你想要它发布的频率,而outtopic是指改变发布频率后的topic的名称,可以省略,如果省略则自动在原来topic的名字上后缀throttle

2.限制每秒发布的字节数
命令格式:

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

例如,我想要让雷达的带宽占用降至1KBps,则命令为:

rosrun topic_tools throttle bytes base_scan 1024 1.0

不要问我那个window是生么意思,我也不知道,如果你懂得话,麻烦告诉我下,嘿嘿。

备注:1.所谓的改变topic发布频率并不是说改变之后原来的topic就没了,或者直接在原来的topic上更改,而是更改了之后throttle再把其更改后的topic发布出来,原来的topic仍然存在,例如:原来/base_scan发布的频率是40.0,更改后这个topic发布的频率仍然是40.0,只是使用throttle后会重新生成一个topic,/base_scan_throttle,这个节点的发布频率为1.0
2.这个工具还有一些很有意思的参数,例如,~lazy等于True的话,只有当你订阅到throttle发出来的消息,它才会工作,否则它不工作。
3.我的测试发现它的频率控制其实精度很低,例如我想让它10HZ频率发布,实际才能达到8HZ,不知道我使用是不是有什么问题,如果你知道的话就告诉我吧~

src/exploration/mbplanner_ros/mbplanner/launch/mbplanner_m100_sim.launch文件内容如下 <launch> <!-- All settings --> <arg name="robot_name" default="m100"/> <arg name="gazebo_gui_en" default="false"/> <arg name="use_sim_time" default="true"/> <arg name="rviz_en" default="true" /> <arg name="launch_prefix" default=""/> <!-- gdb -ex run //args | xterm -e gdb -args--> <param name="use_sim_time" value="$(arg use_sim_time)"/> <!-- Config files --> <arg name="mbplanner_config_file" default="$(find mbplanner)/config/mbplanner_config.yaml"/> <arg name="global_planner_config_file" default="$(find global_planner)/config/global_planner_config.yaml"/> <arg name="voxblox_config_file" default="$(find mbplanner)/config/voxblox_sim_config.yaml"/> <arg name="octomap_config_file" default="$(find mbplanner)/config/octomap_sim_config.yaml"/> <arg name="map_config_file" default="$(arg voxblox_config_file)"/> <arg name="world_file" default="$(find planner_gazebo_sim)/worlds/pittsburgh_mine.world"/> <arg name="pci_file" default="$(find mbplanner)/config/planner_control_interface_sim_config.yaml"/> <node pkg="tf" type="static_transform_publisher" name="tf_53" args="0 0 0 0 0 0 world navigation 1" /> <node pkg="tf" type="static_transform_publisher" name="tf_1" args="0.0 0 0.12 0 -1.2 -0.0 $(arg robot_name)/vi_sensor/base_link fcu 1" /> <node pkg="tf" type="static_transform_publisher" name="tf_2" args="0.015 0.055 0.0065 -1.57 0.0 -1.57 $(arg robot_name)/vi_sensor/base_link $(arg robot_name)/vi_sensor/camera_depth_optical_center_link 1" /> <node pkg="tf" type="static_transform_publisher" name="tf_3" args="0.015 0.055 0.0065 -1.57 0.0 -1.57 $(arg robot_name)/vi_sensor/base_link $(arg robot_name)/vi_sensor/camera_left_link 1" /> <node pkg="tf" type="static_transform_publisher" name="tf_4" args="0.015 -0.055 0.0065 -1.57 0.0 -1.57 $(arg robot_name)/vi_sensor/base_link $(arg robot_name)/vi_sensor/camera_right_link 1" /> <node pkg="tf" type="static_transform_publisher" name="tf_5" args="0 0 0.05 0.0 0.0 0.0 $(arg robot_name)/base_link $(arg robot_name)/$(arg robot_name)/velodyne 1" /> <node pkg="tf" type="static_transform_publisher" name="tf_6" args="0.0 0 0.12 0.0 -1.2 -0.0 $(arg robot_name)/base_link $(arg robot_name)/vi_sensor/base_link 1" /> <!-- ROS Gazebo --> <env name="GAZEBO_MODEL_PATH" value="${GAZEBO_MODEL_PATH}:$(find planner_gazebo_sim)/models"/> <include file="$(find gazebo_ros)/launch/empty_world.launch"> <arg name="world_name" value="$(arg world_file)" /> <arg name="gui" value="$(arg gazebo_gui_en)" /> <arg name="use_sim_time" value="$(arg use_sim_time)"/> <arg name="paused" value="false" /> <arg name="verbose" value="false"/> </include> <group ns="$(arg robot_name)"> <node name="img_throttler" type="throttle" pkg="topic_tools" args="messages vi_sensor/camera_depth/depth/points 5 vi_sensor/camera_depth/depth/points_throttled" /> <node name="odo_throttler" type="throttle" pkg="topic_tools" args="messages ground_truth/odometry 100 ground_truth/odometry_throttled" /> <!-- MAV launch --> <include file="$(find rotors_gazebo)/launch/spawn_mav.launch"> <arg name="mav_name" value="$(arg robot_name)" /> <arg name="model" value="$(find rotors_description)/urdf/m100.gazebo" /> <arg name="enable_ground_truth" value="true" /> <arg name="x" value="0.0"/> <arg name="y" value="0.0"/> <arg name="z" value="1.5"/> </include> <!-- Position controller --> <node name="lee_position_controller_node" pkg="rotors_control" type="lee_position_controller_node" output="screen"> <rosparam command="load" file="$(find rotors_gazebo)/resource/lee_controller_$(arg robot_name).yaml" /> <rosparam command="load" file="$(find rotors_gazebo)/resource/$(arg robot_name).yaml" /> <remap from="odometry" to="odometry_sensor1/odometry" /> </node> </group> <arg name="odometry_topic" default="$(arg robot_name)/ground_truth/odometry_throttled"/> <node name="pose_throttler" type="throttle" pkg="topic_tools" args="messages $(arg robot_name)/ground_truth/pose_with_covariance 10 /msf_core/pose" /> <!-- Motion Primitive based planning --> <node pkg="mbplanner" type="mbplanner_node" name="mbplanner_node" output="screen"> <remap from="odometry" to="$(arg odometry_topic)" /> <remap from="pointcloud" to="/velodyne_points" /> <rosparam command="load" file="$(arg mbplanner_config_file)" /> <rosparam command="load" file="$(arg map_config_file)" /> </node> <!-- Global Planner --> <node pkg="global_planner" type="global_planner_node" name="global_planner_node" output="screen" launch-prefix="$(arg launch_prefix)"> <remap from="odometry" to="$(arg odometry_topic)" /> <!-- For Voxblox: --> <!-- Use tsdf map topics if tsdf is being used and commnet the esdf topic--> <remap from="global_planner_node/tsdf_map_in" to="mbplanner_node/tsdf_map_out"/> <!-- <remap from="global_planner_node/esdf_map_in" to="mbplanner_node/esdf_map_out"/> --> <!-- --> <!-- For Octomap: --> <remap from="input_octomap" to="mbplanner_node/octomap_binary"/> <!-- --> <rosparam command="load" file="$(arg global_planner_config_file)" /> <rosparam command="load" file="$(arg map_config_file)" /> </node> <node pkg="pci_mav" type="pci_mav_ros_node" name="pci_mav_ros_node" output="screen"> <remap from="command/trajectory" to="$(arg robot_name)/command/trajectory" /> <remap from="planner_server" to="mbplanner" /> <remap from="planner_homing_server" to="global_planner/homing" /> <remap from="mbplanner/global" to="global_planner/global" /> <remap from="odometry" to="$(arg odometry_topic)"/> <rosparam command="load" file="$(arg pci_file)" /> </node> <!-- <include file="$(find aerial_control_ui)/launch/m100_ui.launch"/> --> <group if="$(arg rviz_en)"> <node launch-prefix="nice" pkg="rviz" type="rviz" name="rviz" args="-d $(find mbplanner)/config/rviz/$(arg robot_name)_sim_mbplanner.rviz" /> </group> </launch>,帮我查看是否有目标位置相关的设置
07-12
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值