前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ROS2入门之基本介绍

ROS2入门之基本介绍

作者头像
点云PCL博主
发布2022-04-06 13:07:27
2.5K0
发布2022-04-06 13:07:27
举报
文章被收录于专栏:点云PCL

论文阅读模块将分享点云处理,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的问题

  • ROS1节点间的数据传递通过内存复制,大量 的系统资源浪费在通讯上,实时性也得到保障,
  • ROS1通过一个核心的master节点管理所有节点间的通信,这就导致如果master节点 奔溃将会导致整个系统运行错误。

那么ROS2相比较ROS1具有哪些优势?

  • 系统通信新能的提升:ROS2引入数据分发服务(DDS)通信协议,可以通过零拷贝的方式传递消息,节省了CPU和内存资源,增加通信的实时性。
  • 资源管理和安全:ROS2 为托管启动,用户可以指定节点的启动顺序。
  • 系统可靠性提升:ROS2可以去除ROS1中的中心节点管理器,改进对master节点的高度依赖的缺点。

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中,只支持隔离的构建,即每个包都是独立构建的,安装空间可以是隔离的或合并的。

其他比较

  • ROS 2广泛使用C ++ 11。而ROS 1的核心主要使用C ++ 03,在其API并没有使用C++ 11功能。
  • ROS 2的Python版本至少为3.5,ROS 1的Python版本为2.7。
  • 使用了新的编译系统Ament(ROS为Catkin)。
  • ROS1可以通过rosbridge和ROS 2通信。

总结

实时性增强:发布的数据在结束前完成更新。

持续性增强:ROS1尽管存在数据队列的概念,但是还有很大的局限,订阅者无法接收到加入网络之前的数据;DDS可以为ROS提供数据历史的服务,就算新加入的节点,也可以获取发布的所有历史数据。

可靠性增强:通过DDS配置可靠性原则,用户可以根据需求选择性能模式(BEST_EFFORT)或者稳定模式(RELIABLE)。

参考文献

https://cloud.tencent.com/developer/article/1386970

https://www.guyuehome.com/35448

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 点云PCL 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档