ros2核心概念
简介
ROS(Robot Operating System) 是软件库和工具的集合,用来构建机器人应用程序。
ROS2 是一个中间层,它通过匿名的发布/订阅机制在不同的 ROS 进程中传递消息。
ROS2 图
图是 ROS2 系统的核心概念,一张图是由许多节点构成,节点和节点之间有通信构成连线。
ROS2 图的四个概念:
- 节点(Node):一个通过 ROS 和其它节点通信的实体
- 消息(Message):发布或者订阅主题用的 ROS 数据类型
- 主题(Topics):节点能够发布消息到一个主题,也能够订阅一个主题,从该主题接收消息
- 发现(Discovery):节点能够自动的发现彼此,不需要有链接
节点
ROS 节点用 ROS 客户端库和其他的节点通讯。节点能够发布和/订阅一个主题,节点也能够提供/使用服务(Services)和行为(Actions)每个节点都有相关联的配置参数。
节点与节点之间通过分布式的发现进程建立链接,两个节点可以在同一进程,不同进程甚至不同主机上。
客户端库
ROS 客户端库能够允许用不同的语言写节点。ROS2 有一个用 c 实现的核心库,实现了一些核心的通用的功能。有这个库就不需要每种语言都开发一套同样的功能。
节点发现
节点的发现过程是自动的,它的过程如下:
- 当一个节点启动的时候,它向同一个 ROS 域 (由 ROS_DOMAIN_ID 环境变量设置)其它节点播报其存在。其它的节点响应播报,响应中携带自己的信息,这样节点和节点之间就能建立连接。
- 节点会定期的发布广播,防止有些节点错过信息。
- 节点结束时也会广播下线的消息,方便与节点断开连接。
当前节点只和有兼容服务质量的其它节点连接。
ROS 实现
ROS2 建立在 DDS/RTPS 之上。
为什么使用 DDS/RTPS : https://design.ros2.org/articles/ros_on_dds.html
DDS
DDS(Data Distribution Service ) 是一种中间层协议及 API 标准,用来处理以数据为中心的对象之间的通讯。
DDS 的概念:https://www.dds-foundation.org/what-is-dds-3/
其它相关文章:https://www.dds-foundation.org/
RTPS
RTPS(Real Time Publish Subscribe Protocol) 是一种在不可靠传输层(UDP)下尽力进行可靠传输的发布-订阅通信协议。
DDS 使用 RTPS 作为它的数据互操作协议。
RTPS 的概念:https://www.eprosima.com/index.php/resources-all/rtps