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的底层中间件自动进行,按照下述流程进行:
在该流程中,节点会定期发布自身的存在,这样就可以与新发现的实体建立连接
节点离线时,也会向其他节点进行通知。
节点只会同具有兼容的QoS3策略的节点建立连接。
以之前提到过的的talker-listener Demo4为例: 在一个终端中运行c++ talker节点将发布关于一个主题的消息,而在另一个终端中运行的Python listener节点将订阅关于同一主题的消息。
可以看到,这些节点自动发现彼此,并开始交换消息。