本文首先简单的介绍ROS是什么和核心概念,然后主要介绍ROS的通信机制。

1、ROS是什么

ROS(机器人操作系统,Robot Operating System),是专为机器人软件开发所设计出来的一套电脑操作系统架构。它是一个开源的元级操作系统(后操作系统),提供类似于操作系统的服务,包括硬件抽象描述、底层驱动程序管理、共用功能的执行、程序间消息传递、程序发行包管理,它也提供一些工具和库用于获取、建立、编写和执行多机融合的程序。

ROS21讲——ROS的构成

ROS的以下特性使得我们可以使用ROS高效、便捷地搭建出机器人原型机:

  • ROS采用了一种松耦合分布式的通信框架机制
  • ROS提供了丰富的功能包和测试、仿真等工具
  • ROS使用广泛,文档丰富
ROS中的Gazebo仿真工具

2、ROS核心概念

下面我们来看一下ROS最核心的概念:节点(Node)和节点管理器(ROS Master)。

每个节点是一个执行具体某项任务的、独立运行的可执行文件(例如采集图像节点、图像处理节点),节点名称不可重复。不同的节点甚至可以使用不同的编程语言,以及运行在不同的主机上。

ROS启动于节点管理器,管理器用于管理ROS中的不同节点,为节点提供命名和注册服务,辅助不同节点之间相互查找和通信,如下图所示。通过这种方式,我们就不必指定“发送传感器数据到IP为127.0.0.1的主机”,只需要告诉Node1发送消息到Node2,十分便捷。节点管理器还提供了参数服务器,节点使用该服务器存储和检索运行时的参数。

3、通信机制

那么节点之间是如何通信的呢?主要有话题通信和服务通信两种方式,我们以下图为例详细介绍。

(1)话题通信

此时我们有一台搭载了相机的机器人,我们希望机器人能够获取并处理相机采集的图像数据,同时可以在笔记本上看到这些图像。因此,我们定义了三个节点:相机节点(Camera Node)、图像处理节点(Image Processing Node)和图像显示节点(Image Display Node)。所有的节点都注册在节点管理器(ROS Master)中,管理器可以视为一个查询表,各个节点能查到消息要发送到其他的哪个节点。

ROS Master中注册了三个节点

完成注册后,Camera Node声明它发布(Publish)了一个叫做/image_data的话题(Topic)。Image Processing Node和Image Display Node声明它们订阅(Subscribe)了这个Topic。话题中数据为Message,具有一定类型和数据结构(ROS中提供了标准数据类型,用户也可自己定义),当Camera Node接收到相机发动的数据后,就立即将数据发送到另外两个节点上。

相机节点发布了数据,图像采集节点和图像显示节点订阅了数据

可以看出以下几点:

  • 话题通信是一种异步通信,即数据的传输是单向的,只出不进。
  • 同一个话题的订阅者或发布者可以不唯一。

(2)服务通信

话题通信的数据传输是单向的,订阅端(Image Processing Node)被动接收发布端(Camera Node)的数据?这时候有人就问了,如果Image Processing Node想主动接收数据怎么办。ROS中提供了另一种通信方式:服务通信。服务通信由请求方(Client)和应答方(Server)组成。

Camera Node可以在ROS Master上注册一个特定的服务(Service)。客户端(Camera Node)发动请求数据,请求方(Image Processing Node)发送一个request,等待应答方(Camera Node)处理后,反馈回一个reply。

以上就是ROS的通信机制。

谈谈ROS的通信机制相关推荐

  1. 【ROS入门-4】嘴对嘴讲解ROS的核心概念——ROS话题通信机制

    文章目录 前言 ROS系列文章 ROS的通信机制 话题(topic) 发布者 订阅者 消息(Message) 用C++来写话题通信的代码 发布者 订阅者 使用rqt_graph 源码附录 引用说明 参 ...

  2. ROS服务通信机制原理及示例代码

    ROS服务通信:节点间直接通信并获得应答.服务需要用户自己开发,可在功能包下创建srv文件夹并编写源代码,服务类型是功能包名称和.srv文件名称的组合,比如python中引入srv类型为,from g ...

  3. ROS自主导航学习———ROS通信机制

    前言 前面ROS很多都忘记了 ,现在来重新回顾一下内容 ROS 中的基本通信机制主要有如下三种实现策略: 话题通信(发布订阅模式) 服务通信(请求响应模式) 参数服务器(参数共享模式) Action通 ...

  4. ROS通信机制一---话题通信

    文章目录 总述 1. 话题通信模型 2. 话题通信基本实现示例 2.1 发布者 2.1.1 创建发布者topic_pub.cpp文件 2.1.2 修改CMakeLists.txt文件 2.1.3 编译 ...

  5. ROS通信机制——发布/订阅者模型

    目录 发布/订阅者模型 (一)发布者 (二)订阅者 (三)综合 参考资料 ROS (Robot Operating System),即机器人操作系统,是为了加快机器人的开发效率,提高机器人软件代码的复 ...

  6. 理解同步和异步通信:以ROS的3中典型通信机制为例

    文章目录 一.ROS中的几种通信机制 二.不同通信机制的特点 2.1 话题消息通信 2.2 服务消息通信 2.3 动作消息通信 3. 同步和异步 一.ROS中的几种通信机制 在ROS中,不同的进程可以 ...

  7. Chapter2 ROS通信机制----基础篇(Ⅰ)vs配置及通信基础

    目录 一.复习及launch 1.1 深入理解配置信息(非常重要) 1.2 launch文件演示 二.ROS通信机制-----基础 2.1 本节导论 2.2 话题通信 2.2.1 话题通信概述 2.2 ...

  8. ROS通信机制(一) —— 话题(topic)与msg文件

    文章目录 简述 特点 相关常用命令 通信模型 核心元素 通信过程 代码示例(发布者和订阅者) 发布者(talker.cpp) 订阅者(listener.cpp) 配置 CMakeLists.txt 编 ...

  9. ROS 通信机制(已整理)

    文章目录 节点与节点管理器 ROS通信机制 1. 话题通信 1.1 基本话题通信 1.1.1 C++实现 发布方 demo01_pub.cpp 订阅方 demo01_sub.cpp 1.1.2 Pyt ...

最新文章

  1. VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
  2. 64位Linux下JVM内存调设遇到GC问题的备忘
  3. 技术实践:大规模知识图谱预训练及电商应用
  4. failed to find romfile efi-virtio.rom
  5. 用html制作简单日历,用javascript实现一个简单的日历
  6. 使用dict和set
  7. java 标识符命名规则_java语言基础之标识符和命名规则详解
  8. python经典程序实例_Python入门经典实例(一)
  9. STM32使用PWM输入模式测试频率和占空比
  10. 学习AJAX,解析XMLHttpRequest对象
  11. VB实际读写INI文件
  12. springboot整合mysql
  13. SEO利器 - 网页内容监控之百度自动推送
  14. 红米K40使用半个月,谈谈上手体验,“优缺点”非常明显!
  15. 16年“折腾史” | 盘点联想手机成与败
  16. 电脑有网,microsoft edge浏览器无法上网
  17. C++ 静态函数与虚函数的区别
  18. 投资理财学习笔记二,1.4做个有钱人之富人思维
  19. 一晚迎来十三年里最大单日涨幅,告别2021,中概股终于触底?
  20. 山月大佬做了个极客时间返现平台及技术栈介绍

热门文章

  1. Oracle数据库之rownum,ORACLE数据库中Rownum用法详解
  2. 黑色高端壁纸小程序,界面简洁高端,主要有壁纸专辑,头像,电脑平板壁纸,手机壁纸
  3. linux部署pinpoint2.4.0
  4. Android UI优化—从Android渲染原理理解UI卡顿
  5. ripro9.1(9.2)最新修正升级完美版,无加密无后门无需扩展
  6. 微软输入法打印动态数字日期
  7. 形容计算机专业的诗句,形容信息技术的诗句
  8. 这家素食店的牙签能吃——天厨妙香
  9. 三维人脸有关技术的往昔与展望
  10. 配置计算机的三个档次,高端电脑配置是什么样?朋友十万预算组装三台电脑,我该怎么写?...