ROS 2 概念速览

  • 官方文档
  • 图(Graph)的概念
  • 节点(Node)
  • 客户端库(Client Libraries)
  • 发现机制(Discovery)
  • 参考

ROS2的核心概念主要有:

  • 节点
  • 客户端库
  • 发现机制

官方文档

Quick overview of ROS 2 Concepts1

图(Graph)的概念

ROS 2是一个基于匿名的发布订阅机制的中间件,允许不同的ROS进程间进行消息传递。
任何ROS 2系统的核心都是ROS图(Graph),它包含:

  • 节点Nodes:

    • 一个使用ROS与其他节点进行通信的实体
    • 节点间通过topic, service,action或parameter进行数据传输
    • 一个可执行程序可以包括一个或多个节点
  • 消息Message:
    • 当发布或订阅一个主题topic时使用到的ROS数据类型
  • 主题Topic:
    • 节点可以向主题发布消息
    • 节点可以订阅主题接收消息
  • 发现Discovery:
    • 节点之间决定如何相互通信的过程

节点(Node)

  • 节点是ROS图的参与者
  • 使用ROS客户端库与其他节点通信
  • 发布主题
  • 订阅主题
  • 使用服务(Service)
  • 使用操作(Action)
  • 节点独立的可配置参数
  • 节点间的连接通过分布式发现过程加以建立
  • 节点部署
    • 同进程
    • 不同进程
    • 不同主机

客户端库(Client Libraries)

ROS客户端库允许用不同编程语言编写的节点进行通信。
有一个核心ROS客户端库,实现了不同语言的ROS API所需的通用功能。
这使得面向不同语言的库可以更易于编写,并保持一致性。

ROS2官方团队维护了C++和Python两种语言的客户端库(rclcpp/rclpy)。
此外,ROS社区开发了其他客户端库包括:2

  • JVM and Android
  • Objective C and iOS
  • C#
  • Swift
  • Node.js
  • Ada
  • _.NET Core, UWP and C#
  • Rust

发现机制(Discovery)

节点发现通过ROS2的底层中间件自动进行,按照下述流程进行:

Created with Raphaël 2.3.0节点启动向相同ROS domain的节点告知自己的存在(拥有相同的ROS_DOMAIN_ID)收到通告的节点回复自己的信息建立连接节点间得以通信广播周期到?yes

在该流程中,节点会定期发布自身的存在,这样就可以与新发现的实体建立连接
节点离线时,也会向其他节点进行通知。
节点只会同具有兼容的QoS3策略的节点建立连接。

以之前提到过的的talker-listener Demo4为例: 在一个终端中运行c++ talker节点将发布关于一个主题的消息,而在另一个终端中运行的Python listener节点将订阅关于同一主题的消息。
可以看到,这些节点自动发现彼此,并开始交换消息。

参考


  1. Quick overview of ROS 2 Concepts ↩︎

  2. About ROS 2 client libraries ↩︎

  3. Quality of Service ↩︎

  4. talker-listener Demo ↩︎

ROS2学习(四).ROS 2 核心概念相关推荐

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

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

  2. 【ROS入门-3】嘴对嘴讲解ROS的核心概念——节点与节点管理器

    文章目录 前言 ROS系列文章 ROS的通信机制 节点(Node) 节点管理器(Master) 简单运行 引用说明 参考 前言 我要给大家来介绍一下ROS当中一些核心的概念,帮助大家去在后面的ROS学 ...

  3. 区块链学习 | 区块链的核心概念

    想要学习区块链的相关知识,区块链的核心概念--区块.哈希算法.公钥和私钥.时间戳等是必须要弄懂的.区块链由多个相连的区块构成,所以我们先从了解区块的概念开始! 一.区块 区块的结构图 先看上面的区块的 ...

  4. Spark学习之路---Spark核心概念

    Spark核心概念简介 一个Spark应用都由驱动器程序发起集群上的各种并发操作,一个驱动器程序一般包含多个执行器节点,驱动器程序通过一个SaprkContext对象访问saprk.RDD(弹性分布式 ...

  5. ArcGIS开发基础教程(四):核心概念之图层和数据(下)

    核心概念之图层和数据(下) 外部数据源图层介绍 外部数据源的数据和文件是由Layer类的不同子类支持的.包括用于处理外部文件(如CSV或GeoJSON文件)或加载外部地图(如GeoQ,高德,Bing ...

  6. NIO学习–核心概念与基本读写

    转载自 NIO学习–核心概念与基本读写 这两天花了时间学习了java的nio,看的书是Ron Hitchens著的 <Java NIO>,总的来说,这本书真的写的非常好,而且整本书将jav ...

  7. Maven学习总结(四)——Maven核心概念

    2019独角兽企业重金招聘Python工程师标准>>> Maven学习总结(四)--Maven核心概念 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平 ...

  8. 学习 JavaScript (四)核心概念:操作符

    JavaScript 的核心概念主要由语法.变量.数据类型.操作符.语句.函数组成,前面三个上一篇文章已经讲解完了.后面三个内容超级多,这篇文章主要讲解的是操作符. 操作符 什么叫做操作符? 这是一种 ...

  9. ROS2学习(十六).ROS概念 - 构建系统

    关于ROS 2的构建系统 `ament_package`包 **package.xml** **ament package** `ament_cmake`代码库 `ament_lint`代码库 构建工 ...

最新文章

  1. 看大神如何使用vue导出pdf
  2. sqlplus执行mysql_在SQLPLUS启动和停止Oracle数据库
  3. 15行代码AC——习题5-5 复合词(Compound Words, UVa 10391)——解题报告
  4. 手机号段对应地区编码_漫画:“哈夫曼编码” 是什么鬼?
  5. 判断设备是否是iphone5 及对iphone5 屏幕的适应
  6. 嵌入式计算机的发展阶段,嵌入式发展经历了哪四个阶段?
  7. 戳破“砖家”假面:唯快不破的时代,为什么这件事一定要慢慢做?
  8. 机器学习速成课程 | 练习 | Google Development——编程练习:提高神经网络的性能
  9. 《引爆点》读书笔记(一)
  10. 在SpringMVC中使用拦截器(interceptor)拦截CSRF***
  11. SCDN博客的转载方法
  12. ReportMachine终于有更新了。
  13. 查看文件夹和文件大小
  14. 安卓苹果一键秒改运动步数方法
  15. 南丁格尔图文字颜色跟随
  16. GDAL 地图切片层级计算公式
  17. 稳压二极管、肖特基二极管、静电保护二极管、TVS管
  18. 基于bibtex的文献管理(详细)
  19. 如何解决SQL Server 2008 无法连接到(local)(服务器名称)
  20. uniapp如何使用微信开发者工具调试

热门文章

  1. 笔记本电脑清洁小记(附螺丝滑丝处理,常见意外情况)
  2. matlab 维纳滤波恢复运动模糊,运动模糊恢复专题
  3. springboot配置连接rds_java – 在AWS-EC2上运行的SpringBoot应用程序无法连接到MySQL AWS-RDS数据库...
  4. 反序列化工具_JBOSS反序列化漏洞
  5. 像素纵横比基础知识(正方形像素,非正方形像素)
  6. PHP爬虫音乐,PHPCrawl爬虫库实现抓取酷狗歌单
  7. Spring中注解大全和应用
  8. Rocketmq源码分析(一)整体架构
  9. mysql 必知必会 笔记
  10. Android NFC读取电子标签