ROS2是使用节点之间的发布者/订阅者消息传递的分布式体系结构。
ROS2在其消息传递层采用了不同的方法,现在采用了称为数据分布式服务(DDS)的行业标准。
但是,DDS是用于通信的中间件,也支持发布者/订阅者。
那么,我们可以直接使用DDS,为什么要使用ROS2?
答案 0 :(得分:4)
我同意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,类型等需要更加通用和灵活。
答案 1 :(得分:3)
实际上,ROS2基于DDS进行通信。 (https://github.com/ros2/ros2/wiki/DDS-and-ROS-middleware-implementations)
使用ROS2是因为它添加了一个抽象,使DDS易于使用。 DDS需要大量的设置和配置(分区,主题名称,发现模式,消息创建等),这是通过ROS2的RMW软件包完成的。此包还负责处理发布/接收(接收)消息时的错误。
您可以直接使用DDS(如果您正确配置了发布者和订阅者,还可以与ROS2发布者和订阅者进行通信),但是必须创建消息(.idl),调用生成器以获取相应的结构和源文件,创建域,分配主题,配置数据写入器/数据读取器等(请看一些示例https://github.com/rticommunity/rticonnextdds-examples/tree/master/examples/listeners/c)
因此ROS2使您的生活更轻松。另外,在消息上方可以使用很多软件包。
答案 2 :(得分:3)
要补充一下Stoogy已经写的内容:
ROS不仅仅是通信层。例如,它提供了
答案 3 :(得分:3)
DDS是OMG提出的一种通信标准。它的目标市场更为广泛,如军事,空中交通管制,自动驾驶汽车,医疗设备等。也很少有供应商提供企业版和开源版本,但只有很少的人或市场可以决定他们的未来工作或设计。
任何想要在其产品中采用DDS的人都需要从头开始。
ROS2更像一个生态系统。 ROS2的领导者-OSRF为想要创建机器人应用程序的人提供了一个生态系统,文档和友好的框架。
任何人都可以将其思想提交给核心设计或为社区做出自己的贡献。
参与者,主题,发布者,订阅者,数据读取者和数据写入者
是的,DDS具有发布者和订阅者。此外,它还具有参与者,主题,发布者,订阅者,数据作者和< em> datareader ,它们在DDS的数据共享空间中称为实体。
每个实体拥有不同的QoS属性,并影响实体管理数据传递或数据生命周期的方式。
参与者控制整个实体的创建,删除,分组。它具有了解新实体加入或离开的能力。
不同的参与者由域ID(整数)标识。
主题就像拥有QoS信息的目标,数据写入器和数据读取器可以彼此链接。
发布者和订阅者控制其拥有的 datareader 和 datawriter 的数据传递和数据可用性。
发布者只能有多个数据写入器,而订阅者只能有多个数据读取器。
DataWriter是数据提供者,DataReader是数据使用者。他们需要具有与其目标主题相同的QoS。
DDS主题命名:
取消链接其他发布/订阅模型,它们不大量使用斜杠 /
,而是面向对象的。
命名空间和节点。
类似于主题,但具有命名空间。
ROS2高度使用命名空间和斜杠 /
。它的命名空间以/
开头。例如,/turtle/cmd_vel
,turtle是命名空间,cmd_vel是它的基本名称。
仅是提供或使用数据的基本元素。
您可以检查ros2 topic and service names的ROS2发布/订阅命名设计。
ROS2更加专注于机器人应用程序设计,从而消除了编写DDS复杂发布/订阅应用程序的困难。