当前位置:   article > 正文

ros spinonce机制_std_msgs::int32

std_msgs::int32

创建pub

  1. #include "ros/ros.h" //包含了使用ROS节点的必要文件
  2. #include "std_msgs/Int32.h" //包含了使用的数据类型
  3. #include <sstream>
  4. int main(int argc, char **argv)
  5. {
  6. ros::init(argc, argv, "node_a"); //初始化ROS,节点名命名为node_a,节点名必须保持唯一
  7. ros::NodeHandle n; //实例化节点, 节点进程句柄
  8. ros::Publisher pub = n.advertise<std_msgs::Int32>("str_message", 1000); //告诉系统要发布话题了,话题名为“str_message”,类型为std_msgs::String,缓冲队列为1000
  9. ros::Rate loop_rate(2); //设置发送数据的频率为10Hz
  10. int count=0;
  11. //ros::ok()返回false会停止运行,进程终止。
  12. while(ros::ok())
  13. {
  14. std_msgs::Int32 msg;
  15. msg.data = count;
  16. count++;
  17. ROS_INFO("node_a is publishing %d", msg.data);
  18. pub.publish(msg); //向话题“str_message”发布消息
  19. ros::spinOnce(); //不是必须,若程序中订阅话题则必须,否则回掉函数不起作用。
  20. loop_rate.sleep(); //按前面设置的10Hz频率将程序挂起
  21. }
  22. return 0;
  23. }

创建sub

  1. #include "ros/ros.h"
  2. #include "std_msgs/Int32.h"
  3. //话题回调函数
  4. void chatterCallback(const std_msgs::Int32::ConstPtr& msg)
  5. {
  6. ROS_INFO("node_b is receiving [%d]", msg->data);
  7. }
  8. int main(int argc, char **argv)
  9. {
  10. ros::init(argc, argv, "node_b"); //初始化ROS,节点命名为node_b,节点名必须唯一。
  11. ros::NodeHandle n; //节点句柄实例化
  12. ros::Subscriber sub = n.subscribe("str_message", 1000, chatterCallback); //向话题“str_message”订阅,一旦发布节点(node_a)在该话题上发布消息,本节点就会调用chatterCallbck函数。
  13. ros::Rate loop_rate(1);
  14. while(ros::ok())
  15. {
  16. ros::spinOnce(); //不是必须,若程序中订阅话题则必须,否则回掉函数不起作用。
  17. loop_rate.sleep(); //按前面设置的10Hz频率将程序挂起
  18. }
  19. return 0;
  20. }

上面发布话题是订阅话题发送速度两倍,结果如下:

 可以看到数据全部接收并打印,ros回调函数是由spinonce触发,触发后会将消息队列中的全部数据处理完成后,进行sleep

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/49926
推荐阅读
相关标签
  

闽ICP备14008679号