简介

ROS(Robot Operating System) 是软件库和工具的集合,用来构建机器人应用程序。

ROS2 是一个中间层,它通过匿名的发布/订阅机制在不同的 ROS 进程中传递消息。

ROS2 图

图是 ROS2 系统的核心概念,一张图是由许多节点构成,节点和节点之间有通信构成连线。

ROS2 图的四个概念:

  • 节点(Node):一个通过 ROS 和其它节点通信的实体
  • 消息(Message):发布或者订阅主题用的 ROS 数据类型
  • 主题(Topics):节点能够发布消息到一个主题,也能够订阅一个主题,从该主题接收消息
  • 发现(Discovery):节点能够自动的发现彼此,不需要有链接

节点

ROS 节点用 ROS 客户端库和其他的节点通讯。节点能够发布和/订阅一个主题,节点也能够提供/使用服务(Services)和行为(Actions)每个节点都有相关联的配置参数。

节点与节点之间通过分布式的发现进程建立链接,两个节点可以在同一进程,不同进程甚至不同主机上。

客户端库

ROS 客户端库能够允许用不同的语言写节点。ROS2 有一个用 c 实现的核心库,实现了一些核心的通用的功能。有这个库就不需要每种语言都开发一套同样的功能。

ROS不同语言的客户端库

节点发现

节点的发现过程是自动的,它的过程如下:

  1. 当一个节点启动的时候,它向同一个 ROS 域 (由 ROS_DOMAIN_ID 环境变量设置)其它节点播报其存在。其它的节点响应播报,响应中携带自己的信息,这样节点和节点之间就能建立连接。
  2. 节点会定期的发布广播,防止有些节点错过信息。
  3. 节点结束时也会广播下线的消息,方便与节点断开连接。

当前节点只和有兼容服务质量的其它节点连接。

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