论文阅读模块将分享点云处理,SLAM,三维视觉,高精地图相关的文章。
前言
2017年机器人开源操作系统软件ROS 2终于推出首个正式版,新版本命名为“Ardent Apalone”,代号“ardent”。
ROS2是新的ROS版本,相比较ROS1更加接近工业化场景,更加稳定,功能更加丰富。我们在安装学习之前先了解一下ROS2的基础结构。
ROS和ROS2架构区别
架构图(ROS2中没有了master中心节点了)
ROS的数据发布与订阅
ROS2的数据发布与订阅
ROS2与DDS的关系
ROS2是建立在以DDS/RTPS为中间件的基础之上的,DDS/RTPS提供了发现(discovery)、序列化(serialization)以及数据传递(transportation)的功能。
什么是DDS(Data Distribution Service)
DDS(Data Distribution Service)是一种工业标准,它由各种不同的vendors实现。DDS是一种端对端的中间件,它可以提供ROS系统中的一些相关特性,比如说分布式发现(distributed discovery),非ROS1中的集中式发现方法,以及在不同的质量服务选项(“Quality of Service” options)中控制数据传输。
为了在ROS2中使用一个DDS/RTPS实现,ROS2中设计了ROS Middleware interface(或简称RMW) 的软件包,它可以实现在使用DDS/RTPS API或工具时对ROS中间件接口的抽象,使用RMW来支持DDS的过程需要做很多实现和维护性工作,首先实现对一部分DDS的支持可以保证ROS2的框架代码不再需要尝试其他特殊的实现,同时用户也希望能将DDS与他们的应用工程分离开来。
DDS基于Domain ID在一个物理网络内切分为若干逻辑网络,在同一个域(domain)中的ROS2节点可以被自由发现并通信,在不同域中则不能互通,所有的ROS2节点默认使用domain ID 0,为避免消息混淆,同网络内运行ROS2的不同组的设备应该使用不同的domain ID,ROS_DOMAIN_ID有两种(short version / long version),正常使用推荐short version,在[0, 101]之间进行选择即可,long version则可以在[0, 232]之间进行选择。
DDS优点:
(1)DDS(Data Distribution Service)是基于以数据为核心的设计思想提出的,定义了描述网络环境下数据内容/交互行为和服务质量要求的标准技术。
(2)DDS (数据分发服务) 工业级别中间件,通信节点动态发现,用shared memory 方式使得通信效率变高。
(3)DDS 使所有节点的通信拓扑结构都依赖于P2P 自我发现模式,无master 中心节点。
(4)在该模型下分布式节点在网络上以发布或订阅的方式传输数据,节点可以是发布者或订阅者,或者既是发布者又是订阅者。
(5)网络中的数据对象用主题((Topic)做标识,分布式节点在全局数据空间中发布或订阅感兴趣的主题信息。
(6)各个节点在逻辑上无主从关系,点与点之间都是对等关系.通信方式可以是点对点、点对多、多对多等,在QoS的控制下建立连接,自动发现和配置网络参数。
DDS 缺点:
DDS 本身的资源消耗。
DDS 接口复杂。
DDS组成模型
(1)DDS内所有的成员都是Entity,DDS中的任两个Entity(实体角色)通信都必须在同一个Domain 内进行交互,即他们初始化时DomainID是同一个,并且不同Domain的DomainID必须唯一,Domain内的DomainParticipant是服务的入口点,任何DDS应用都需首先获取DomainParticipant,然后通过Domain Participant获取其他服务,如Publisher、Subscriber、Topic等。
(2)服务质量策略(QoS),DDS规范定义了丰富的服务质量策略(Quality of Services Policies),QoS是一种网络传输策略,应用程序指定所需要的网络传输质量行为,QoS服务实现这种行为要求,尽可能地满足客户对通信质量的需求,DDS定义QoS策略使其对复杂网络环境的适应性和鲁棒性大大增强,优化网络传输质量。
ROS2与ROS1的比较
ROS2中模块与ROS的区别
参与者(Domain Participant):一个参与者Participant就是一个容器,对应于一个使用DDS的用户,任何DDS的用户都必须通过Participant来访问全局数据空间。
发布者(Publisher):数据发布的执行者,支持多种数据类型的发布,可以与多个数据写入器(DataWriter)相联,发布一种或多种主题(Topic)的消息。
订阅者(Subscriber):数据订阅的执行者,支持多种数据类型的订阅,可以与多个数据读取器(DataReader)相联,订阅一种或多种主题(Topic)的消息。
数据写入器(DataWriter):应用向发布者更新数据的对象,每个数据写入器对应一个特定的Topic,类似于ROS1中的一个消息发布者。
数据读取器(DataReader):应用从订阅者读取数据的对象,每个数据读取器对应一个特定的Topic,类似于ROS1中的一个消息订阅者。
主题(Topic):这个和ROS1中的Topic概念一致,一个Topic包含一个名称和一种数据结构。
QoS Policy:Quality of Service,质量服务原则,是负责数据质量的。QoS是DDS中非常重要的一环,控制了各方面与底层的通讯机制,主要从时间限制、可靠性、持续性、历史记录几个方面,满足用户针对不同场景的数据应用需求。
ROS的问题
那么ROS2相比较ROS1具有哪些优势?
ROS2对系统平台的延伸
ROS 1主要构建于Linux系统之上,主要支持Ubuntu。而ROS 2采用全新的架构,底层基于DDS(Data Distribution Service)通信机制,支持实时性、嵌入式、分布式、多操作系统。ROS 2支持的系统包括Linux、windows、Mac、RTOS,甚至是单片机等没有操作系统的裸机。
编译系统
ROS编译系统从初期使用的rosbuild,到groovy版本之后的catkin,再到ROS2中的ament,ROS2新的编译系统ament是一种元编译系统,用来构建组成应用程序的多个独立功能包,它并不是一个全新的东西,是catkin编译系统进一步演化的版本。在ROS 2中,只支持隔离的构建,即每个包都是独立构建的,安装空间可以是隔离的或合并的。
其他比较
总结
实时性增强:发布的数据在结束前完成更新。
持续性增强:ROS1尽管存在数据队列的概念,但是还有很大的局限,订阅者无法接收到加入网络之前的数据;DDS可以为ROS提供数据历史的服务,就算新加入的节点,也可以获取发布的所有历史数据。
可靠性增强:通过DDS配置可靠性原则,用户可以根据需求选择性能模式(BEST_EFFORT)或者稳定模式(RELIABLE)。
参考文献
https://cloud.tencent.com/developer/article/1386970
https://www.guyuehome.com/35448