ROS2总体架构

ROS2框架

从系统架构上, ROS2可以划分为三层:应用层(Application Layer)、中间层(Middleware Layer)、操作系统层(OS Layer)。

应用层是指开发者构建的应用程序,应用程序中是以功能包为核心的,在功能包中可以包含源码、数据定义、接口等内容;中间层主要由数据分发服务DDS与ROS2封装的关于机器人开发的中间件组成,DDS是一种去中心化的数据通讯方式,它引入了服务质量管理 (Quality of Service)机制,借助该机制可以保证在某些较差网络环境下也可以具备良好的通讯效果,ROS2中间件则主要由客户端库、DDS抽象层(RMW层)与进程内通讯API构成;操作系统层,ROS2依赖于传统意义的操作系统,目前ROS2可以运行在Linux、Windows、MacOS或RTOS上。

ROS2框架概览简化版

ROS2和ROS1的区别

ROS1和ROS2的系统架构可以划分为三层,分别是应用层,中间层,系统层,其中中间层是ROS和ROS2的主要差别。

具体区别如下图所示:

ROS2和ROS1的区别主要包括以下方面:

  1. 进程管理:在ROS1中,需要开启中央节点管理器Master,统一管理所有节点。如果Master节点出现故障,将严重影响ROS系统功能;在ROS2中,系统引入节点自发现机制,可有效提高系统鲁棒性。
  2. 进程间通信:ROS1基于TCP和UDP协议自己开发了TCPROS和UDPROS自定义传输协议、序列化格式以及自定义的集中发现机制;而ROS 2有一个抽象的中间件接口,通过该接口提供序列化、传输和发现功能,目前该接口的所有实现都是基于DDS标准的,这使得ROS 2能够提供各种可以改善不同网络上通信质量的服务质量(QoS)策略。
  3. 进程内通信:如果是在进程内需要进行大量数据的通信,ROS1 和ROS2都提供了基于共享内存的通信方法,分别是Nodelet和 Intra-process模块。
  4. 跨平台:ROS1主要安装在Linux上;ROS2可跨平台,如Linux、windows、MacOS、RTOS。
  5. 编程语言:ROS 1的核心是面向C++03的,而未在其API中使用C++11特性;ROS 2广泛使用C++11标准,并部分使用了C++14,将来,只要所有主要平台都支持,ROS 2可能会开始使用C++17标准。ROS 1面向的是 Python 2;而ROS 2至少需要 Python 3.5版。
  6. 构建系统:ROS1使用catkin_make,每个ROS软件包都是一个CMake项目;ROS2使用colcon,可以轻松支持其他构建系统,目前除了CMake项目之外,ROS 2还支持纯Python软件包的构建。
  7. 消息和服务:ROS 1中,.msg和.srv文件可以具有相同名称,但生成的代码会发生冲突,服务的请求和响应部分也是如此;而在ROS 2中,生成的代码会使用单独的命名空间来保证不会发生冲突。ROS1中持续时间(Duration)和时间(Time)类型是在客户端库roscpp和rospy中分别定义,导致它们在C++(sec, nsec)和Python(secs, nsecs)中是不同的;在ROS 2中,持续时间和时间类型被定义为消息,因此它们在不同编程语言中都是一致的。ROS1中不支持动态尺寸数组和字符串;ROS2中定义的数组和字符串支持设置最大值上限。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值