ROS2和DDS有什么区别?

What's the difference between ROS2 and DDS?

ROS2 是一种在节点之间使用 publisher/subscriber 消息传递的分布式架构。

ROS2 在其消息传递层采用了不同的方法,现在采用称为数据分布式服务 (DDS) 的行业标准。

但是,DDS是一个通信的中间件,也支持publisher/subscriber。

那么,我们可以直接使用DDS,为什么要使用ROS2呢?

确实,ROS2是基于DDS进行通信的。 (https://github.com/ros2/ros2/wiki/DDS-and-ROS-middleware-implementations)

之所以使用 ROS2,是因为它添加了一个抽象,使 DDS 更易于使用。 DDS 需要大量设置和配置(分区、主题名称、发现模式、消息创建等),这些在 ROS2 的 RMW 包中完成。当消息 published/received (taken).

时,这个包还负责处理错误

您可以直接使用DDS(如果您正确配置您的发布者和订阅者您也可以与ROS2发布者和订阅者通信)但是您必须创建消息(.idl),调用生成器以获取相应的结构和源文件、创建域、分配主题、配置 datawriters/datareader..(查看一些示例 https://github.com/rticommunity/rticonnextdds-examples/tree/master/examples/listeners/c

所以 ROS2 让您的生活更轻松。另外,消息上方还有很多包可以使用。

补充一点 :

ROS 不仅仅是通信层。它提供,例如

  • 许多用于机器人技术中常见任务的包,从基本的东西(例如在不同坐标系之间转换点)到高级应用程序(例如生成环境地图并使用它来导航机器人通过它而不会撞到障碍物)。
  • 构建系统(ROS 1 的 catkin,ROS 2 的 colcon),用于轻松构建这些包并指定它们之间的依赖关系。
  • 一个启动系统,可以轻松 运行 一个由多个相互依赖的应用程序组成的复杂系统,并提供一种轻松更改参数的方法。
  • 集成物理模拟以及可视化和监控工具

我同意 ROS2 提供比 DDS 更高级别的抽象,尤其是对于某些类型的机器人应用程序。此外,ROS2 还提供专为机器人技术设计的现成数据类型和组件。所以你得到了很多积木。这无疑使在该领域构建系统变得更加容易。

也就是说,您需要注意使用 ROS2 而不是原生 DDS 也会产生成本。 ROS2 使事情变得简单的一种方法是预先选择 DDS 支持的 Qos 和信息交换模式的子集。因此使用 ROS2 无法访问某些 DDS 功能和 Qos。有很多与发布-订阅通信相关的事情,您可以使用 DDS 完成,但不能使用 ROS2 API over DDS。还有很多数据类型可以使用 DDS IDL 定义,但不能使用 ROS2 IDL 描述。因此,您还限制了可以发送和接收的数据类型、类型演变和兼容性规则等。对于某些系统,这些限制可能很重要。这些功能被添加到 DDS 是有原因的...

性能也受到添加层的负面影响以及某些 DDS API 未被利用的事实。

从根本上说,DDS 的目标应用范围要广泛得多,因此 APIs、QoS、类型等对我来说需要更通用和更灵活。

生态系统

DDS是OMG提出的通信标准。它的目标市场更为普遍,如军事、空中交通管制、自动驾驶汽车、医疗设备……很少有供应商提供企业版和开源版本,但只有少数人或市场可以决定他们未来的工作或设计。

任何想要在其产品中采用 DDS 的人都需要从头开始。

ROS2 更像是一个生态系统。 ROS2 的领导者 - OSRF 为那些想要创建他们的机器人应用程序的人提供了一个生态系统、文档和友好的框架。

任何人都可以将自己的想法提交给核心设计,或者为社区做出自己的贡献。

更多技术

Pub/SubROS和DDS的模型区别

DDS

参与者、主题、发布者、订阅者、数据读取者和数据写入者

是的,DDS 有发布者和订阅者。而且,它有participant, topic, publisher, subscriber, datawriterdatareader,它们在DDS的data shared space中被称为一个entity ].

每个实体拥有不同的 QoS 属性并影响实体如何管理数据交付或数据生命周期。

  • 参与者

参与者控制整个实体的创建、删除、分组。它有能力知道新实体加入或离开。

不同的参与者由域ID(整数)标识。

  • 主题

Topic 就像一个拥有 QoS 信息的目标,datawriter 和 datareader 可以互相link。

  • 发布者和订阅者

发布者和订阅者控制其拥有的 datareaderdatawriter 的数据传输和数据可用性。

发布者只能有多个数据写入器,订阅者只能有多个数据读取器。

  • DataWriter 和 DataReader

DataWriter 是数据提供者,DataReader 是数据消费者。他们需要对其目标主题具有相同的 QoS。

DDS 主题命名:

Unlink other pub/sub model,他们不大量使用slash /,相反,他们是面向对象的。

ROS2

命名 space 和节点。

  • 命名space

与题目相似,但有命名space。

ROS2 高度使用命名 space 和 slash /。它的命名 space 以 / 开头。例如,/turtle/cmd_vel,turtle 是命名 space,cmd_vel 是它的基本名称。

  • 节点

只是提供或使用数据的基本元素。

ROS2pub/sub命名设计可以查看ros2 topic and service names

结论

ROS2更专注于机器人应用程序设计,消除了编写DDS复杂pub/sub应用程序的难度。