最近写了节点来订阅ros_client_ros,但是发现在launch文件修改update_frequency不起作用,然而我又需要通过串口给下位机发送数据,频率一快,串口直接堵死了。怎么调都frequency都没用,对于我这种ros新手很无奈呀,只有下位机开发经验的我,第一反映是在订阅节点搞个定时器,这样就可以规律的发送数据了,但是具体了解到rostopic的通信后,望而却步,还好无意中看到了这位兄台的博文ROS改变发布者频率豁然开朗,官方参考请看这里,咋们先用roswiki上的talker和listener实验测试一番: 1、roscore 启动ros; 2、rosrun topic_tools throttle messages command 10.0 这里的command是我的话题,后面的数字10是我需要改变的频率; 3,运行talker节点,然后rostopic list /command /command_throttle /rosout /rosout_agg 发现多了一个command_throttle的topic,echo一下/command和/command_throttle 可以发现左图为连续的发送 右图为不间断的发送,更直观点咋们利用rostopic hz命令获取topic的频率,如下图所示,左图为command_throttle的发布频率,右边为command的发布频率 4、我们将talker的发送频率改为ros::Rate loop_rate(100);在roboware studio里添加一个cpp文件-listenner2.cpp,复制listenner的内容,将订阅的command主题换成/command_throttle,用roboware studio的好处是自动帮你添加依赖,在回调函数里添加个变量,每次进入回调函数里,变量加1,然后在打印出来,最后点击小石头编译一下。 5、最后我们运行listener以及listener2,验证发布频率(看进入多少次回调函数),如下图所示: 左图为listenner2,右图为listenner,其中real_count为进入回调函数的次数,发现左图大概是右图的1/10,验证成功! 6、但是发现,每次重新启动,/command_throttle主题便会消失,需要重新敲入rosrun topic_tools throttle messages command 10.0
rosrun topic_tools throttle messages command 10.0