ROS:什么是ROS2

ROS的问题

ROS的设计目标是简化机器人的开发,如何简化呢?ROS为此设计了一套通信机制(话题、服务、参数、动作)

通过这些通信机制,ROS实现了将机器人的各个组件连接起来,所有节点(即组件)的通信建立必须经过主节点Ros Master

在这里插入图片描述
一旦Ros Master主节点挂掉后,就会造成整个系统通信的异常,此时避障策略将会失效,如果机器人正在运行,碰到障碍物会径直装上去,机毁人亡!

除了不稳定这个问题,ROS还有很多其他地方存在着问题:

  • 通信基于TCP实现,实时性差、系统开销大
  • 对Python3支持不友好,需要重新编译
  • 消息机制不兼容
  • 没有加密机制、安全性不高

ROS与ROS2架构对比?

所以在ROS2中,首当其冲的将ROS的主节点干掉了,这里放一张网上流传最广的ROS/ROS2架构图

在这里插入图片描述

OS层

从原来的只支持linux平台变成了支持windows、mac甚至是嵌入式RTOS平台

中心层

那么中间层ROS2到底相对于ROS做了哪些优化呢?

  • 去中心化master:
    • ROS和ROS2中间件不同之处在于,ROS2取消了master节点。
    • 去中心化后,各个节点之间可以通过DDS的节点相互发现,各个节点都是平等的,且可以1对1、1对n、n对n进行互相通信。
  • 不造通信的轮子:
    • 通信直接更换为DDS进行实现
    • 采用DDS通信,使得ROS2的实时性、可靠性和连续性上都有了增强。

应用层

对于应用层来说ROS2也做了很大的改进,上面那张图没有体现出来。

ROS2进行改进有:

  • python2到pyhton3的支持
  • 编译系统的改进(catkin到ament)
  • C++标准更新到c++11
  • 可以使用相同 API 的进程间和进程内通信

ROS2系统架构

在这里插入图片描述

操作系统层

操作系统层比较好理解,ROS2本身就是基于Linux、Windows或者macOS系统建立的,驱动计算机硬件、底层网络通信等实现都是交由操作系统来实现的。

DDS实现层

DDS是什么?

DDS,全称 Data Distribution Service (数据分发服务)。是由对象管理组 (OMG) 于 2003 年发布并于 2007 年修订的开分布式系统标准。

通过类似于ROS中的话题发布和订阅形式来进行通信,同时提供了丰富的服务质量管理来保证可靠性、持久性、传输设置等。

一文读懂“数据分发服务DDS”(Data Distribution Service,RTPS,OMG)_DDS数据分发服务的博客-CSDN博客_corba dds

DDS实现层用来做什么

DDS实现层其实就是对不同常见的DDS接口进行再次的封装,让其保持统一性,为DDS抽象层提供统一的API。

抽象DDS层-RMW

这一层将DDS实现层进一步的封装,使得DDS更容易使用。原因在于DDS需要大量的设置和配置(分区,主题名称,发现模式,消息创建,…),这些设置都是在ROS2的抽象层中完成的。

ROS2客户端库 RCL

RCL(ROS Client Library)ROS客户端库,其实就是ROS的一种API,提供了对ROS话题、服务、参数、Action等接口。

ROS2客户端库

ROS的客户端库就是上面所说的RCL,不同的语言对应着不同的rcl,但基本功能都是相同的。

比如Python语言提供了rclpy来操作ROS2的节点话题服务等,而C++则使用rclcpp提供API操作ROS2的节点话题和服务等。

所以后面我们使用Python和C++来编写ROS2节点实现通讯等功能时,我们就会引入rclpy和rclcpp的库。
在这里插入图片描述
上面这张图时ROS2,API的实现层级,最新下面的是第三方的DDS,rmw(中间件接口)层是对各家DDS的抽象层,基于rmw实现了rclc,有了rclc,我们就可以实现各个语言的库,大家都知道C语言是各个语言的鼻祖(汇编除外)所以基于rclc,ROS2官方实现了rclpy和rclcpp.

基于rclpy和rclcpp我们就可以实现上层的应用了

应用层

应用层就是我们写代码以及ROS2开发的各种常用的机器人相关开发工具所在的层了。后面我们写的所有代码其实都是属于这一层的。

ROS2中间件DDS架构

中间件

中间件是什么

中间件就是介于某两个或者多个节点中间的组件。干嘛用的呢?

就是提供多个节点中间通信用的。

ROS中间件VS ROS2中间件

在这里插入图片描述

  • ROS1中间件:
    • ROS1的中间件是ROS组织自己基于TCP/UDP机制建立的,为了维护该部分ROS1组织花费了大量的精力,但是依然存在很多问题。
  • ROS2中间件:
    • ROS2采用了第三方的DDS作为中间件,将DDS服务接口进行了一层抽象,保证了上层应用层调用接口的统一性。
    • 基于DDS的互相发现协议,ROS2终于干掉了ROS1中的Master节点。

DDS和ROS2架构

ROS2为每家DDS供应商都开发了对应的DDS_Interface即DDS接口层,然后通过DDS Abstract抽象层来统一DDS的API。
在这里插入图片描述

在这里插入图片描述

DDS的优势与劣势

优势:

  • 发布/订阅模型:简单解耦,可以轻松实现系统解耦
  • 性能:在发布/订阅模式中,与请求/回复模式相比,延迟更低,吞吐量更高。
  • 远程参与者的自动发现:此机制是 DDS 的主要功能之一。通信是匿名的、解耦的,开发者不必担心远程参与者的本地化
  • 丰富的 Qos 参数集,允许调整通信的各个方面:可靠性、持久性、冗余、寿命、传输设置、资源…
  • 实时发布订阅协议 ( RTPS ):该协议几乎可以通过任何传输实现,允许在 UDP、TCP、共享内存和用户传输中使用 DDS,并实现不同 DDS 实现之间的真正互操作性。

劣势:

  • API复杂,DDS 的灵活性是以复杂性为代价的
  • 系统开销相对较大
  • 社区支持问题,但ROS2近两年来使用DDS后社区表现还是不错的。

ROS2使用DDS的几个理由

  • DDS已经应用在军事、潜艇各个领域,稳定性实时性经过实际检验。
  • 使用DDS需要维护的代码要少得多,可以让ROS2开发人员腾出手专注机器人开发。
  • DDS有定义好的行为和规范并且有完善的文档。
  • DDS提供了推荐的用例和软件API,有较好的语言支持。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值