二 ROS通信机制-话题通信(发布订阅模式)

2023-05-16

二 ROS通信机制-话题通信[发布订阅模式]

    • ROS 中的基本通信机制
    • 2.1话题通信(发布订阅模式)
      • 2.1.1概念
      • 2.1.2作用
      • 2.1.3 理论模型
      • 2.1.4 话题通信应用时需要关注的地方:
    • 3 简单实现
      • 3.1ROS工作空间建立:
      • 3.2 服务端实现

ROS 中的基本通信机制

  • 话题通信(发布订阅模式):

  • 服务通信(请求响应模式)

  • 参数服务器(参数共享模式)

2.1话题通信(发布订阅模式)

话题通信是ROS中使用频率最高的一种通信模式,话题通信是基于发布订阅模式的,也即:一个节点发布消息,另一个节点订阅该消息。话题通信的应用场景也极其广泛,比如下面一个常见场景:
在上述场景中,就不止一次使用到了话题通信。
以激光雷达信息的采集处理为例,在 ROS 中有一个节点需要时时的发布当前雷达采集到的数据,导航模块中也有节点会订阅并解析雷达数据。

以运动消息的发布为例,导航模块会根据传感器采集的数据时时的计算出运动控制信息并发布给底盘,底盘也可以有一个节点订阅运动信息并最终转换成控制电机的脉冲信号。

在这里插入图片描述
以此类推,像雷达、摄像头、GPS… 等等一些传感器数据的采集,也都是使用了话题通信,换言之,话题通信适用于不断更新的数据传输相关的应用场景

2.1.1概念

以发布订阅的方式实现不同节点之间数据交互的通信模式。

2.1.2作用

用于不断更新的、少逻辑处理的数据传输场景。

2.1.3 理论模型

该模型中涉及到三个角色:1.ROS Master (管理者) 2.Talker (发布者) 3.Listener (订阅者)
在这里插入图片描述
该模型大致意思是这样的:
在这里插入图片描述
注意1:上述实现流程中,前五步使用的 RPC协议(联系方式),最后两步使用的是 TCP 协议

注意2: Talker 与 Listener 的启动无先后顺序要求(第0步和第1步无先后顺序)

注意3: Talker 与 Listener 都可以有多个

注意4: Talker 与 Listener 连接建立后,不再需要 ROS Master。也即,即便关闭ROS Master,Talker 与 Listern 照常通信。
注意5: 该模型的实现流程已经封装好了,基本使用的时候都是调用。但也需要明白基本原理

2.1.4 话题通信应用时需要关注的地方:

  1. 关注话题设置
  2. 关注发布者和订阅者的实现
  3. 关注消息的载体

3 简单实现

3.1ROS工作空间建立:

//建立工作空间
mkdir -p demo_ws/src
//进入demo_ws编译
cd demo_ws -> caktin_make
//进入src目录创建功能包
cd src -> catkin_create_pkg 包名 roscpp rospy std_msgs

3.2 服务端实现

在 包名的路径下面还会有src目录,在里面创建一个cpp文件

/*
发布者实现流程:
1.包含头文件
2.初始化ROS节点
3.创建节点句柄
4.创建发布者对象
5.编写发布者逻辑并发布数据
*/
#include"ros/ros.h"
#include "std_msgs/String.h"
int main(int argc, char *argv[])
{
	//2.初始化ROS节点 定义节点名称”hzh“
    ros::init(argc, argv, "hzh" );
    //3.创建节点句柄
    ros::NodeHandle nh;
    //4.创建发布者对象
    ros::Publisher pub = nh.advertise<std_msgs::String>("fang",10);
    //5.编写发布者逻辑并发布数据
    //创建被发布的消息
    std_msgs::String msg;
    //编写循环,循环发布数据
    while (ros::ok())
    {
        msg.data = "hello";
        pub.publish(msg);

    }
    
    return 0;
}

2.写完后修改功能包里面的CMakeList.txt文件
在这里插入图片描述
第二个红括号是src下面你写的cpp文件名称,前一个是映射名称,自己定义。尽量和后面cpp文件一样
在这里插入图片描述
改成你写的映射名称

3.编译
如果是用VS code写的快捷键 ctrl+shift+b直接编译,否则在命令行里进入工作空间catkin_make

4.执行
启动roscore

cd demo_ws
source ./devel/setup.bash
rosrun 功能包 cpp文件
//回车后没反应就是对的

5.接受

cd demo_ws
//fang是话题名称
rostopic echo fang

运行结果应该就是下面这样
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

二 ROS通信机制-话题通信(发布订阅模式) 的相关文章

  • ROS基础

    一 ROS的核心概念 节点 xff1a 节点管理器 xff1a 话题 xff1a 消息 xff1a 服务 xff1a 参数 xff1a 二 命令行工具的使用 命令行工具都是以ros开头的 常用命令 rostopicrosserviceros
  • Linux下编译Opencv和contrib

    1 安装准备 1 1 安装依赖项 sudo apt get install cmake sudo apt get install build essential libgtk2 0 dev libavcodec dev libavforma
  • YOLOv5和YOLOv7环境(GPU)搭建测试成功

    本来是用doc写的 xff0c 直接复制到这里很多图片加载缓慢 xff0c 我直接把doc上传到资源里面了 xff0c 0积分下载 xff1a 10条消息 YOLOv5和YOLOv7开发环境搭建和demo运行 Python文档类资源 CSD
  • 单片机通信总述——理论部分(CAN、串口、SPI、I2C等)

    一 基础概念 1 1 通信方法 并行通信 xff1a 传输原理 xff1a 数据各个位同时传输 xff1b 优点 xff1a 速度快 xff1b 缺点 xff1a 占用引脚资源多 是指使用 8 16 32 及 64 根或更多的数据线 有多少
  • Ubuntu系统搭建

    一 创建环境常见问题 1 1 windows11下打开虚拟机蓝屏问题 参考这篇文章 xff0c 控制面板 xff0c 启用和关闭windows功能 xff08 对话框 xff09 113条消息 VMware安装Ubuntu开启蓝屏解决方案
  • J-Link工具查看单片机内存等信息

    1 打开下图应用 2 输入 connect xff08 连接开发板 xff09 AC78013FDLA xff08 你的单片机型号 xff09 SWD xff08 仿真器接口 xff09 1000HZ xff08 接口速度 xff09 连接
  • Qt调用ffmpeg动态库和静态库及编译ffmpeg的方法

    一 编译 二 引入ffmpeg库文件 1 Qt工程下创建lib文件夹 xff0c lib文件夹下再创建ffmepg文件夹 2 将编译好的ffmpeg里面的include 和lib文件夹粘贴到如下文件夹下 xff08 3 xff09 在 pr
  • autoware花屏重影问题

    autoware 安装 花屏 重影问题 最近尝试下autoware来做建图 xff0c 无奈各类安装太过麻烦 xff0c 这里给几个小问题做下纪律 1 xff0c 安装过程 xff0c 走的官网那个 xff0c 事实证明官网教程最全面 xf
  • linux---select,poll,epoll的原理以及优缺点

    多路转接IO xff08 也叫IO多路复用 xff09 是一种处理高并发的IO事件监控 xff0c 同时对大量的描述符进行时间监控 xff0c 监控是否具备IO条件 就绪 xff1a 包括了读就绪事件 xff08 就是有数据到来的时候 xf
  • DTAM实现

    DTAM实现 这里是实现github上DTAM的一次记录 xff0c 主要是有些步骤的记录 需要下载的源码 xff08 可以多试试几个 xff0c 按照实现可能性排序 xff09 xff1a https github com Teddybe
  • jetson镜像克隆到固态再扩容简单方法

    jetson克隆方法很多 xff0c 我是自己把之前的sd镜像克隆做成img镜像了 然后烧写后之前是64g的后续烧写都是64g的不能把新的储存设备占满 这里有一个扩容和移植到固态的方法 主要分三步 xff1a 镜像克隆和烧录到sd卡使用固态
  • Orb_slam3 ROS ,D435i使用,ubuntu编译小记

    C 43 43 版本编译 先官网下载代码 xff0c 并下载安装官网所述安装包 git clone https github com UZ SLAMLab ORB SLAM3 git ORB SLAM3 下载完编译c 43 43 版本 cd
  • d455双目相机联合IMU标定

    感谢这两位博主的优秀文章 xff1a RealSense D455的标定并运行VINS FUSION Z Jin16的博客 CSDN博客 d455 标定 Realsense D435I标定 小岛 神酱的博客 CSDN博客 d435i参数 主
  • gitee发布示例

    简易的命令行入门教程 Git 全局设置 git config global user name 34 bnb 34 git config global user email 34 2207201665 64 qq com 34 创建 git
  • linux终端快捷指令创建

    使用这个打开gedit bashrc xff0c 把下面的按照下面的格式书写 xff1a alias lt 想要的快捷键 gt 61 操作指令 示例 xff1a alias sd 61 39 source devel setup sh 39
  • 使用vscode做得基础配置自动保存格式化

    vscode默认启用了根据文件类型自动设置tabsize的选项 34 editor detectIndentation 34 false 重新设定tabsize 34 editor tabSize 34 2 每次保存的时候自动格式化 34
  • OOQP 使用教程 c++

    最近学习了一下OOQP的使用在这里记录一下 在matlab代码中是quadprog xff0c 而这次使用OOQP也主要是为了计算二次规划问题 安装OOQP 首先是安装问题 xff0c 不得不说 xff0c 当时安装也花了不少时间 xff0
  • 物联网工程 | CAN(Controller Area Network)控制器局域网络答疑

    文章目录 概述一 CAN的物理设备二 CAN的物理传输三 CAN的多设备连接四 CAN编程 概述 本节以问答方式讲述CAN相关的一些疑点问题 一 CAN的物理设备 问 xff1a CAN需要什么样的物理设备支持才能算一个CAN网络 系统 x
  • 【无标题】

    前言 对于喜欢逛CSDN的人来说 xff0c 看别人的博客确实能够对自己有不小的提高 xff0c 有时候看到特别好的博客想转载下载 xff0c 但是不能一个字一个字的敲了 xff0c 这时候我们就想快速转载别人的博客 xff0c 把别人的博
  • VSCode中针对C语言的代码格式化配置

    默认格式化工具 打开设置 Ctrl 43 xff0c 选择 用户 配置 xff0c 找到 文本编辑器 Default Formatter xff1a 安装了C C 43 43 插件后 xff0c 即可选择 xff1a C C 43 43 m

随机推荐

  • 总结的常用的前端开发中的常见套路之购物车页面

    1 商品的全选和全不选 获取页面中全选框所在的input xff0c 绑定其变change事件获取全选框的状态遍历获取商品对应的CheckBox xff0c 设置其选中状态和全选的保持一致同时 xff0c 当全选框状态发生变化时 xff0c
  • restframework权限,认证,限流配置

    认证Authentication DRF框架的默认全局认证方案如下 REST FRAMEWORK 61 39 DEFAULT AUTHENTICATION CLASSES 39 39 rest framework authenticatio
  • seek()方法的使用

    seek xff08 xff09 方法的使用 seek 方法用于移动文件读取指针到指定位置 file seek 方法标准格式是 xff1a file seek offset whence offset xff1a 开始的偏移量 xff0c
  • 为什么QQ用的是UDP协议而不是TCP协议?

    QQ既有UDP也有TCP xff01 不管UDP还是TCP xff0c 最终登陆成功之后 xff0c QQ都会有一个TCP连接来保持在线状态 这个TCP连接的远程端口一般是80 xff0c 采用UDP方式登陆的时候 xff0c 端口是800
  • 五分钟读懂TCP 协议——TCP协议简介

    TCP 是互联网核心协议之一 xff0c 本文介绍它的基础知识 一 TCP 协议的作用 互联网由一整套协议构成 TCP 只是其中的一层 xff0c 有着自己的分工 xff08 图片说明 xff1a TCP 是以太网协议和 IP 协议的上层协
  • JSON模块基本使用

    usr bin python3 coding utf 8 import json json loads 把json字符串转成 python 对象 json string 61 39 39 39 34 a 34 34 x 34 34 b 34
  • c语言中return的各种用法 建议收藏

    按初学的理解 xff0c return的任务就是返回对应的参数 xff0c 在外层函数中对这个参数做进一步处理 实际上return的用法不只这些 为调用的函数返回参数值 此类应用最为普遍 xff0c 通常是在一个具有返回值的函数中 xff0
  • chatgpt的原理 第一部分

    前言 这两天 xff0c ChatGPT模型真可谓称得上是狂拽酷炫D炸天的存在了 一度登上了CSDN热搜 xff0c 这对科技类话题是非常难的存在 不光是做人工智能 机器学习的人关注 xff0c 而是大量的各行各业从业人员都来关注这个模型
  • 自学5个月Java找到了9K的工作,我的方式值得大家借鉴 第一部分

    我是去年9月22日才正式学习Java的 xff0c 因为在国营单位工作了4年 xff0c 在天津一个月工资只有5000块 xff0c 而且看不到任何晋升的希望 xff0c 如果想要往上走 xff0c 那背后就一定要有关系才行 而且国营单位的
  • 自学5个月Java找到了9K的工作,我的方式值得大家借鉴 第二部分

    我的学习心得 xff0c 我认为能不能自学成功的要素有两点 第一点就是自身的问题 xff0c 虽然想要转行学习Java的人很多 xff0c 但是非常强烈的想要转行学好的人是小部分 而大部分人只是抱着试试的心态来学习Java xff0c 这是
  • 深入理解任务堆栈以及堆栈溢出

    前言 xff1a 在多任务操作系统中创建任务时 xff0c 都需要指定该任务的堆栈大小 xff0c 那么这个堆栈的作用时什么呢 xff1f 什么情况下需要用到堆栈 xff0c 以及大小不够时会产生什么异常呢 xff1f 1 任务状态 简单分
  • 计算机网络的166个概念你知道几个 第四部分

    HTML xff1a HTML 称为超文本标记语言 xff0c 是一种标识性的语言 它包括一系列标签 xff0e 通过这些标签可以将网络上的文档格式统一 xff0c 使分散的 Internet 资源连接为一个逻辑整体 HTML 文本是由 H
  • 15000 字的 SQL 语句大全 第一部分

    一 基础 1 说明 xff1a 创建数据库CREATE DATABASE database name 2 说明 xff1a 删除数据库drop database dbname 3 说明 xff1a 备份sql server 创建 备份数据的
  • 毕业设计源码基于springboot的旧物置换系统的实现

    摘 要 随着时代在一步一步在进步 xff0c 旧物也成人们的烦恼 xff0c 许多平台网站都在推广自已的产品像天猫 咸鱼 京东 所以开发出一套关于旧物置换网站成为必需 旧物置换网站主要是借助计算机 xff0c 通过对用户进行管理 为减少管理
  • 毕业设计源码基于Spring Boot的论坛管理系统的实现

    摘要 xff1a 在社会快速发展的影响下 xff0c 论坛管理系统 继续发展 xff0c 使 论坛管理系统 的管理和运营比过去十年更加 信息化 依照这一现实为基础 xff0c 设计一个快捷而又方便的网上 论坛管理系统 是一项十分重要并且有价
  • 毕业设计源码基于Spring Boot的旅游管理系统的实现

    摘 要 社会的发展和科学技术的进步 xff0c 互联网技术越来越受欢迎 网络计算机的 交易 方式逐渐受到广大人民群众的喜爱 xff0c 也逐渐进入了每个 用户 的使用 互联网具有便利性 xff0c 速度快 xff0c 效率高 xff0c 成
  • 轮询、中断和DMA三种方式的原理和联系

    CPU控制外部设备的方式 xff1a 中断 轮询 DMA 轮询中断DMA 由于外部设备的速度差异 xff0c CPU可以使用不同的方式控制外部设备的访问 常见的方式轮询 中断和DMA 轮询 轮询最简单 xff0c CPU通过不断地查询某个外
  • OpenMV识别色块与STM2F4通过串口通信

    花了三天时间学习了一下OpenMV的简单使用 xff0c 在这写个博客记录一下 xff0c 并且上传自己的代码 xff0c 以方便交流学习 第一次发帖 xff0c 不周之处见谅 首先概括一下我实现的功能 xff1a OpenMV识别红色色块
  • c++语言简单提问

    1 定义一个空的类型 xff0c 里面没有任何成员变量和成员函数 对该类型求sizeof xff0c 得到的结果是 1 2 为什么不是0 空类型的实例中不包含任何信息 xff0c 本来求sizeof应该是0 xff0c 但是当我们声名该类型
  • 二 ROS通信机制-话题通信(发布订阅模式)

    二 ROS通信机制 话题通信 发布订阅模式 ROS 中的基本通信机制2 1话题通信 发布订阅模式 2 1 1概念2 1 2作用2 1 3 理论模型2 1 4 话题通信应用时需要关注的地方 xff1a 3 简单实现3 1ROS工作空间建立 x