ROS2放弃指南1:ros2入门

参考链接:古月居博客:ROS2探索总结(二) link

参考链接: ROS2官方教程:ROS2中不同的DDS/RTPS vendors link.

ROS1

ros1是一个通信机制+开发工具+应用功能+生态系统。
ROS1:没有构建多机器人系统的标准方法。无法跨平台跨系统使用,缺少实时性方面的设计,需要良好的网络环境保证数据的完整性,缺乏产品化,无法胜任完整产品周期下项目管理。
ROS1的通讯系统使用的是TCPROS和UDPROS,而ROS2使用的是DDS的通讯系统。

ROS2版本

版本发布时间支持平台
Humble Hawksbill2022.05未知
Galactic Geochelone2021.05ubuntu20.04;win10(vs2019)
Foxy Fitzroy2020.06ubuntu20.04;win10(vs2019);macos 10.14
Eloquent Elusor2019.11ubuntu18.04;win10(vs2019);macos 10.14
Dashing Diademata2019.5ubuntu18.04;win10(vs2019);macos 10.12
Crystal Clemmys2018.12ubuntu18.04;win10;macos 10.12
Bouncy Bolson2018.7ubuntu16.04;ubuntu18.04;win10(vs2017);macos 10.12
Ardent Apalone2017.12ubuntu16.04;win10;macos 10.12

我的电脑系统是18.04的,所以我选择安装 Eloquent

ROS2新特性

Zeroconf: 零配置网络服务规范, 用于自动生成可用IP地址的网络技术,不需要额外的手动配置和专属的配置服务器。
Protocol Buffers: Google公司开发的一种数据描述语言,类似于XML能够将结构化数据序列化,可用于数据存储、通信协议等方面, 它不依赖于语言和平台并且可扩展性极强。
ZeroMQ (and the other MQs): 一个简单好用的传输层,像框架一样的一个socket library,他使得Socket编程更加简单、简洁和性能更高。
Redis: 一个高性能的key-value数据库。
**WebSockets:**HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术。
DDS (Data Distribution Service): 新一代分布式实时通信中间件技术规范,DDS采用发布/订阅体系架构,强调以数据为中心,提供丰富的QoS服务质量策略,能保障数据进行实时、高效、灵活地分发,可满足各种分布式实时通信应用需求。
在这里插入图片描述

ROS1跟ROS2的联系

在这里插入图片描述
如果项目对实时性要求较高,可以用ROS2。例如SLAM项目,因为ros2就是用来处理ros1实时性差的问题,但要看是否有能力从0造轮子。
如果已经有ros1的学习经历建议还是用ros1,因为ros1的软件包比较丰富。

DDS

在这里插入图片描述

  1. 参与者(Domain Participant): 一个参与者Participant就是一个容器,对应于一个使用DDS的用户,任何DDS的用户都必须通过Participant来访问全局数据空间。
  2. 发布者(Publisher): 数据发布的执行者,支持多种数据类型的发布,可以与多个数据写入器(DataWriter)相联,发布一种或多种主题(Topic)的消息。
  3. 订阅者(Subscriber): 数据订阅的执行者,支持多种数据类型的订阅,可以与多个数据读取器(DataReader)相联,订阅一种或多种主题(Topic)的消息。
  4. 数据写入器(DataWriter): 应用向发布者更新数据的对象,每个数据写入器对应一个特定的Topic,类似于ROS1中的一个消息发布者。
  5. 数据读取器(DataReader): 应用从订阅者读取数据的对象,每个数据读取器对应一个特定的Topic,类似于ROS1中的一个消息订阅者。
  6. 主题(Topic): 这个和ROS1中的Topic概念一致,一个Topic包含一个名称和一种数据结构。
  7. QoS Policy: Quality of Service,质量服务原则,这个模块在ROS1中可从没见过,看名称就猜测应该是负责数据质量的。QoS是DDS中非常重要的一环,控制了各方面与底层的通讯机制,主要从时间限制、可靠性、持续性、历史记录几个方面,满足用户针对不同场景的数据应用需求,可以参考下边的图片和表格,看一下这几个原则可以哪些配置。

从上边DDS的几个重要概念中,我们就可以看到ROS2相比于ROS1,在以下方面有所提升:
实时性增强: 数据必须在deadline之前完成更新。
持续性增强: ROS1尽管存在数据队列的概念,但是还有很大的局限,订阅者无法接收到加入网络之前的数据;DDS可以为ROS提供数据历史的服务,就算新加入的节点,也可以获取发布的所有历史数据。
可靠性增强: 通过DDS配置可靠性原则,用户可以根据需求选择性能模式(BEST_EFFORT)或者稳定模式(RELIABLE)。
在这里插入图片描述ros2使用的时候,会调用第二层ROS的相关库,同时也会使用第三层的ROS middleware interface抽象层,这个抽象层可以帮我们很好的兼容不同品牌的DDS,这样我们在编程的时候,无需关心DDS是那个厂家的,直接使用ROS提供的抽象接口就可以了。同时这些厂家的DDS,也会给我们提供可以直接调用的接口,从用户代码里可以直接调用DDS,跳过中间两层,这样效率更高,但是对DDS的熟悉程度要更高。
在这里插入图片描述
在这里插入图片描述在这里插入图片描述DEADLINE:周期时间点
HISTORY:可以保证得到历史数据
RELIABILITY:可靠性。性能最强和可靠性最强:TCP和UDP类似
DURABILITY:可持续性。
在这里插入图片描述在这里插入图片描述在这里插入图片描述

ROS2中不同的DDS/RTPS vendors

ROS2是建立在以DDS/RTPS为中间件的基础之上的,DDS/RTPS提供了发现(discovery)、序列化(serialization)以及数据传递(transportation)的功能。DDS是一种端对端的中间件,它可以提供ROS系统中的一些相关特性,比如说分布式发现(distributed discovery),非ROS1中的集中式发现方法,以及在不同的质量服务选项(“Quality of Service” options)中控制数据传输。

DDS(Data Distribution Service) 是一种工业标准,它由各种不同的vendors实现,比如RTI公司实现的Connext或者是ADLink公司的OpenSplice。
RTPS(Real Time Publish Subscribe protocol) 是一种使用DDS作为网络通信的协议,没有完全实现全部的DDS API,但已经可以为ROS2提供充足的功能性,比如eProsima实现的Fast RTPS。
ROS2支持多种不同的DDS/RTPS实现, 这是由于当它选择一个vendor(供应商)来使用时,并不是完全一致的(one size fits all)。当选择一个中间件实现时,有多种因素需要考虑,比如说后备考虑如license,或者技术考虑如平台兼容性或计算规模。vendors可能专注于不同的需求而提供多于一种的DDS或RTPS实现,比如说,RTI就有多种不同的Connext实现,它们的目的各不相同,比如有些是针对特定处理器平台的,有些是满足不同应用的安全性验证的(当前阶段,ROS2仅支持标准桌面版本)。

为了在ROS2中使用一个DDS/RTPS实现,我们设计了ROS Middleware interface(或简称RMW) 的软件包,它可以实现在使用DDS/RTPS API或工具时对ROS中间件接口的抽象。使用RMW来支持DDS的过程需要做很多实现和维护性工作,但是首先实现对一部分DDS的支持可以保证ROS2的框架代码不再需要尝试其他特殊的实现方法,同时用户也希望能将DDS与他们的应用工程分离开来。

支持的RMW实现

产品名称协议RMW实现当前状态
eProsima Fast RTPSApache 2rmw_fastrtps_cpp完全支持,默认RMW
Eclipse Cyclone DDSEclipse公共许可证v2.0rmw_cyclonedds_cpp完全支持,包括二进制包,与Eloquent的二进制发行版打包在一起。
RTI Connext商业授权、研究授权rmw_connext_cpp完全支持,包括二进制包,但Connext需要单独安装
RTI Connext(dynamic implementation)商业授权、研究授权rmw_connext_dynamic_cpp支持暂停,alpha 8版之前完全支持
PrismTech OpenspliceLGPL(only v6.4)、商业授权rmw_opensplice_cpp部分支持,包括二进制包,但是OpenSplice需要单独安装
OSRF FreeRTPSApache 2-部分支持,开发暂停

QoS策略

  • 历史记录(History)
    • 保留近期记录:仅仅保存最大N个样本数据,通过配置队列深度选项来指定最大数据限制。
    • 保留所有记录:存储所有的样本数据,但受限于底层中间件的配置资源限制。
  • 深度(Depth)
    • 队列深度:仅仅当历史记录选择为"保留最近记录"时,配合指定最大数据限制。
  • 可靠性(Reliability)
    • 尽力的(Best effort):尝试传输样本,但如果网络不稳定可能会丢失数据。
    • 可靠的(Reliable):保证样本的可靠传输,可能会尝试多次重传。
  • 持续性(Durability)
    • 局部瞬态(Transient local):发布者负责对晚到连接(late-joining)的订阅者保留样本数据。
    • 易变态(Volatile):不尝试保留样本数据。
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值