办公问答网

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 149|回复: 0

ROS知识点总结——publisher & subscriber

[复制链接]

4

主题

6

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2022-9-20 13:23:23 | 显示全部楼层 |阅读模式
ROS节点间可通过发布订阅topic来实现通信,这其中便涉及到publisher节点与subscriber节点的编写:
1、publisher模板:

#include "ros/ros.h"//ROS程序必备的头文件
#include "std_msgs/String.h"//传递的消息类型
#include "sstream"

int main(int argc, char **argv)   // 写ROS程序需要加argc,argv,因为init需要传这两个参数
{
  ros::init(argc, argv, "talker");// 初始化ros,向master注册一个叫“talker”的节点

  ros::NodeHandle n;              // 初始化一个句柄,就是将ROS实例化

  ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);
  //发布者注册一个叫“chatter”的话题,<消息类型>,1000是消息队列大小
  //消息队列相当于缓存消息,如果处理速度不够快的话消息会被保存在队列中

  ros::Rate loop_rate(10);        // 执行循环的速率,可以理解为发布消息的频率,单位是Hz

  int count = 0;
  while (ros::ok())               // ros::ok()函数用来判断master节点是否正常
  {
    std_msgs::String msg;//声明变量

    std::stringstream ss;
    ss << "hello world " << count;
    msg.data = ss.str();

    ROS_INFO("%s", msg.data.c_str());//ROS_INFO()可以在终端打印数据

    chatter_pub.publish(msg);    // 发布该消息

    ros::spinOnce();             // 动作执行一次
    //ros::spin()是循环执行,在没有while的时候使用

    loop_rate.sleep();          // 相当于delay函数,因为程序可能不需要0.1s,就是10Hz的频率就可以发送完成,所以sleep()函数可以让程序暂停一会,让消息的发送频率符合10Hz
  }
  return 0;
}

2、subscriber模板:

#include "ros/ros.h"
#include "std_msgs/String.h"//要和订阅的消息类型所匹配

void chatterCallback(const std_msgs::String::ConstPtr& msg) // 回调函数
{
  ROS_INFO("I heard: [%s]", msg->data.c_str());
}

int main(int argc, char **argv)
{
  ros::init(argc, argv, "listener"); //初始化ros,向master注册一个叫“listener”的节点

  ros::NodeHandle n;

  ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);
  //订阅者向master注册自己需要订阅的话题"chatter",消息队列大小是1000,chatterCallback是回调函数
  //回调函数的意义是,当订阅者从自己所订阅的话题上接收到消息,回调函数自动执行

  ros::spin();//因为不在while循环体中,所以它要不断执行,而不是用spinOnce(),只执行一次

  return 0;
}

主要参考:
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|办公问答网

GMT+8, 2025-3-15 19:16 , Processed in 0.102817 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc. Templated By 【未来科技 www.veikei.com】设计

快速回复 返回顶部 返回列表