ROS2与Fast-RTPS

第一讲:学习ROS 2之前不得不了解的DDS

原文链接:http://www.brixbot.com/ros2/fast_rtps-01-introduce_dds/

对ROS 2有所了解的人都知道,ROS 2相对于ROS 1最主要的一个变化就是DDS的引入。ROS 2的官方wiki上已经给出了引入DDS的原因和动机,总结起来有以下几点:

  • 使用第三方成熟的DDS作为ROS底层通讯和相关核心功能的框架可以极大减轻ROS 2的开发工作量。简单来说就是可以偷懒了。
  • DDS也是采用布订/阅机制进行网络通讯,这样就和ROS 1的通讯机制一样了。可以维持通讯架构不发生大的变化
  • ROS 1有个老祖宗roscore,这玩意管理着整个ROS网络的节点。但这老家伙时不时就抽风,导致ROS不稳定
  • 基于DDS的发布订/阅机制,新的节点可以被同一个DDS网络中的其它节点发现。也就是去中心化。
  • 然后就是DDS的一些特性可以自己拿来用比如高实时性、序列化支持、QoS等等

ROS和DDS

那么现在回到DDS是什么这个问题。要准确说出DDS是什么,估计得写一大篇,而且大部分和我们要说的ROS 2没什么关系。那么我来简化一下DDS的概念:DDS就是一个库(一个框架或者一个中间件都行),方便程序使用发布/订阅机制进行消息通讯。好吧,其实这样解释DDS只是片面的描述了DDS的部分功能。但这样理解对我们学习ROS 2足以。

咳咳,其实DDS并不是个库,而是一种国际标准。不同的公司都可以按照这个标准开发出符合DDS标准的库。但我们就用DDS来特指符合DDS标准的库。

下面来看看ROS 2和DDS的Layout图,同样是针对DDS作出简化。根据上面所讲的,Layout很自然就是下面这种:

这样的架构会让ROS 2紧密依赖于某个DDS库,万一这个DDS库翘辫子了,ROS 2就麻烦了。所以ROS 2最终和DDS相关的Layout是这样的:

也就是说ROS 2通过抽象出DDS接口,让ROS 2可以使用不同公司开发的DDS库。上图中eProsima Fast RTPS 就是一种DDS的实现。好吧,其实这样说不太准确。不过这样理解比较简单。

Fast RTPS

Fast RTPS是什么东东?Fast RTPS是eProsima公司对RTPS标准的一个实现,也就是库。

那RTPS是什么东东?RTPS是DDS标准中的一个子集。英文名字是Real Time Publish Subscribe,是DDS标准中的通讯协议部分。其实ROS 2用到的DDS就是这个部分,所以Fast RTPS足够支持ROS 2的需求。

简单来说Fast RTPS就是ROS 2中用来订阅发布消息的组件(前提是你的ROS 2选择它作为DDS实现)。

好了,让我们快快过过Fast RTPS的特点:

  • 开源,这个我最喜欢
  • 高性能,官网自夸。不过事实上也应该这样
  • 实时性高,不然怎能能叫Real Time Publish Subscribe。当然这里的实时不是毫秒级的实时。你就当消息能尽快发出去就得了。
  • 多平台支持:Windows、Linux、Android、iOS,Mac OS。这个是个超级亮点!
  • 支持最新RTPS协议版本
  • 使用简单。也应该简单,因为RTPS就不是一个什么复杂的协议。

其实,Fast RTPS是个好东西,这个库不仅仅可以用在ROS中,你自己的其它需要使用消息发布/订阅机制的地方都可以使用。比如你的一个树莓派用于机器视觉,一个树莓派用于机器人的主控,这两个树莓派就可以用Fast RTPS进行通讯。同一个电脑中的不同进程也可以用它来实现进程间通信。

好了,既然Fast RTPS是个好东西,本系列的后续文章就会详细介绍Fast RTPS。

本讲总结

通过本讲你应该了解到Fast RTPS是一个消息发布订阅的库。除了ROS 2使用它,你也可以在你自己的程序中使用。

参考:

eProsima Fast RTPS官网

DDS and ROS middleware implementations

ROS on DDS

猜你喜欢

转载自blog.csdn.net/fang_chuan/article/details/82152514