zoukankan      html  css  js  c++  java
  • ROS2与FastRTPSROS2与FastRTPS

     

    第一讲:学习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

  • 相关阅读:
    51nod——T1267 4个数和为0
    cf220B莫队
    cf220b
    poj1436水平可见线
    poj2528贴海报,,
    poj3468
    hdu1698
    ural1989 单点更新+字符串hash
    cf Queries on a String
    hdu4605
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/15796279.html
Copyright © 2011-2022 走看看