【ROS 最简单教程 009/300】ROS 话题通信 -- 发布方实现简单示例

在这里插入图片描述

ROS 通信机制:ROS是进程(也称为 Nodes)的分布式框架。 这些进程甚至还可分布于不同主机协同工作,所以结点之间如何通信非常重要!

⭐ 基本通信机制一:话题通信(发布订阅模式) 【用于不断更新的、少逻辑处理的数据传输场景】 👉话题通信理论图解必懂 指路
  • ROS Master 负责保管 Talker 📢和 Listener 注册的信息,并匹配话题相同的 Talker📢 与 Listener 👂
  • 帮助 Talker 📢与 Listener 👂 建立连接
  • 连接建立后,Talker 📢 可以发布消息,发布的消息会被 Listener 👂订阅

实例化发布者对象:ros::Publisher 名称 = nh.advertise<泛型>(参数1, 参数2);

ros::Publisher pub = nh.advertise<std_msgs::String>("chatter",10);
  • 名称:发布者对象名称,如 pub
  • 泛型: 发布的消息类型,如 std_msgs::String
  • 参数1: 要发布到的话题,如 "chatter"
  • 参数2: 队列中最大保存的消息数,如 10
    • 超出此阀值时,先进的先销毁 (时间早的先销毁)
⭐ 完整发布方代码,包含详细注释,来啦 ~

不清楚如何配置、执行代码的友友建议先看下 👉快速体验 指路

/*
    消息发布方: 循环发布信息: Hello!
*/

#include "ros/ros.h"  // ---------------------------- step 1: 包含头文件 
#include "std_msgs/String.h"  //普通文本类型的消息

int main(int argc, char  *argv[])
{   
    ros::init(argc,argv,"talker");  // -------------- step 2: 初始化 ROS 节点
    
    ros::NodeHandle nh;  // ------------------------- step 3: 实例化 ROS 句柄

    // ---------------------------------------------- step 4: 实例化 发布者 对象
    ros::Publisher pub = nh.advertise<std_msgs::String>("chatter",10);
    ros::Rate r(1);  //发布频率

    // ---------------------------------------------- step 5: 组织被发布的数据,并编写逻辑发布数据
    std_msgs::String msg;  //消息
    while (ros::ok())  //节点不死
    {
        msg.data = "Hello!";  // 组织被发布的数据
        
        pub.publish(msg);  //发布
        ROS_INFO("pub: %s",msg.data.c_str());

        r.sleep();  // 自动休眠 休眠时间 = 1/发布频率
        ros::spinOnce();
    }

    return 0;
}
⭐ 验证发布是否正常
  • 运行发布方节点后,可以用 rostopic 命令快速验证 or 运行订阅方来验证
    1. 在新的终端利用 rostopic echo 话题名称 快速验证
      $ rostopic echo /chatter 
      
      # 执行后,可以看到以下输出
      
      data: "Hello!"
      ---
      data: "Hello!"
      ---
      data: "Hello!"
      
  1. 运行订阅方来验证,代码参照 👉订阅方实现简单示例 指路
    • 【松耦合】可混用 C++ / python,用任一版本的订阅方均可正常运行

希望对你有帮助呀!!💜💜 如操作遇到任何问题,欢迎大家留言互助 ~ 一起加油叭 💦
欢迎关注、订阅专栏 【ROS 学习笔记】谢谢你的支持!


另外,使用ROS需要 C++ 或者Python的编程经验,我的博客主页也有相关的教程发布,需要的友友自取!
参考资料ROS理论与实践在线文档B站视频教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值