ROS2和DDS有什么区别?

Jam*_*Liu 8 robotics data-distribution-service ros2

ROS2是使用节点之间的发布者/订阅者消息传递的分布式架构

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

但是,DDS是一种用于通信的中间件,也支持发布者/订阅者.

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

Sto*_*ogy 6

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

使用 ROS2 是因为它添加了一个抽象,使 DDS 更易于使用。DDS 需要在 ROS2 的 RMW 包中进行大量设置和配置(分区、主题名称、发现模式、消息创建等)。这个包还负责在发布/接收(获取)消息时处理错误。

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

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


Ger*_*rdo 6

我同意ROS2提供了比DDS更高级别的抽象,尤其是对于某些类型的机器人应用。此外,ROS2还提供了专为机器人技术设计的现成数据类型和组件。因此,您将获得许多构建基块。这无疑使在该域中构建系统更加容易。

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

添加的层和某些DDS API未得到利用的事实也对性能产生负面影响。

从根本上说,DDS面向的应用程序范围要广得多,因此API,Qos,类型等对我而言需要更通用,更灵活。


lua*_*tor 5

为了补充一下Stoogy已经写的内容

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

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


小智 5

生态系统

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

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

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

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

更多技术

ROS和DDS之间的发布/订阅模型差异

DDS

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

是的,DDS有发布者和订阅者。而且,它具有参与者主题发布者订阅者,数据写入者和数据读取者,它们被称为DDS数据共享空间中的实体

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

  • 参加者

参与者控制整个实体的创建,删除,分组。它具有了解新实体加入或离开的能力。

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

  • 话题

主题就像拥有QoS信息的目标,数据写入器和数据读取器可以彼此链接。

  • 发布者和订阅者

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

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

  • DataWriter和DataReader

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

DDS主题命名:

取消链接其他发布/订阅模型,它们不大量使用slash /,而是面向对象的。

ROS2

命名空间和节点。

  • 命名空间

就像主题一样,但是有命名空间。

ROS2高度使用命名空间和斜杠 /。它具有以开头的命名空间/。例如,/turtle/cmd_velturtle是命名空间,cmd_vel是基础名称。

  • 节点

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

您可以为ROS2发布/订阅命名设计检查ros2主题和服务名称

结论

ROS2更侧重于机器人应用程序设计,从而消除了编写DDS复杂发布/订阅应用程序的难度。