ROS 与 ROS2 的区别

本文介绍了ROS,从其起源、架构、ROS1.0与ROS2.0的对比,强调了ROS在机器人开发中的代码复用和分布式通信优势。ROS2.0引入了DDS,提升性能并有望成为未来发展趋势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ROS 是一个广泛使用的机器人操作系统框架,可以在不同的机器人系统中实现底代码复用,使开发人员专注于机器人应用功能的实现。


一、ROS 起源

ROS 起源于 2007 年,是斯坦福大学人工智能实验室与机器人技术公司 Willow Garage 的合作项目。2008 年之后,由 Willow Garage 公司进行推广,该项目研发的机器人 PR2 就是在 ROS 框架的基础上实现的。2010 年,Willow Garage 公司开源了 ROS,其很快在机器人研究领域引起了越来越多的关注。


ROS 的主要目标是为机器人研究和开发提供代码复用的支持和服务,包括硬件抽象、底层设备控制、常用函数调用、进程间消息传递,以及包(Package)管理,并提供跨计算机、分布运行代码所需的工具和库函数。ROS 是一个分布式的进程 (也就是“节点”) 框架,这些进程被封装在易于分享和发布的程序包和功能包中。


为支持机器人项目的开发和实现,ROS 支持一种类似于代码存储库的联合系统,这个系统可以实现各个工程项目的协作及发布,从文件系统到用户接口完全独立(不受ROS限制),所有的工程项目都可以被 ROS 的基础工具整合在一起。

二、ROS架构

ROS 架构共分为三层: OS 层(OS Layer)、中间件层(Middleware Layer)和应用层(Application Layer)。


1. OS 层

ROS 不能直接运行在计算机硬件之上,需要依托操作系统。在 OS 层,可以直接使用 ROS 官方支持度最好的 Ubuntu 操作系统(Linux),也可以使用 Mac、WindowS、RTOS 等操作系统。


2. 中间件层

Linux 是一个通用系统,并没有针对机器人开发提供特殊的中间件,所以 ROS 设计了中间件层,其中最为重要的是基于 TCPROS/UDPROS 的通信系统。ROS的通信系统基于TCP/UDP 网络,并进行了再次封装,即得到 TCPROS/UDPROS。ROS 通信系统使用发布订阅、客户端/服务器等模型,可以实现多种通信机制的数据传输。

除 TCPROS/UDPROS 的通信机制外,ROS 还提供一种进程内的通信方法--Nodelet,其可以为多进程通信提供一种更优化的数据传输方式,适合对数据传输实时性方面有较高要求的应用。
在通信系统的基础上,ROS提供了大量机器人开发相关的库,如数据类型定义、坐标变换、运动控制等,可以提供给应用层使用。


3. 应用层

在应用层,节点(Node)管理器 Master 组件负责管理整个系统的运行。ROS 开源社区内共享了大量的机器人应用功能包,这些功能包内的模块以节点为单位运行,以 ROS 标准的输入/输出作为接口,只需要了解接口规则即可实现复用,极大地提高了开发效率。随着机器人技术的快速发展,ROS 得到了极大的推广和应用。尽管 ROS 还存在不少的局限性,但是 ROS开源社区内的功能包数量逐年呈指数级上涨,不少开发者和研究机构还针对 ROS 的局限性进行了改良,为机器人开发者带来了巨大的便利。

为提高 ROS 整体性能,在 ROS Con 2014 上,正式发布了新一代 ROS 架构(Next-generation ROS: Building on DDS), 2015年8月,ROS2.0 的 Alpba 版本发布,经过一年多的测试与优化,2016年12月19日,ROS2.0的 Beta 版本正式发布。众多新技术和新概念被应用到了新一代的 ROS 2.0之中,提升了架构的整体性能,增强了 ROS 各方面的综合能力。

 

三、ROS 2.0 与 ROS 1.0的系统架构对比

(1) ROS1.0主要构建于 Linux 系统之上,ROS2.0支持的操作系统包括 Linux、Windows、Mac、RTOS,甚至支持没有操作系统的裸机。

(2) ROS 1.0的通信基于 TCPROS/UDPROS,强依赖于 Master 节点的处理,而 ROS 2.0 取消了 Master,通信是基于数据分发服务(Data Distribution Service,DDS)的,同时 ROS 2.0 内部提供了 DDS 的抽象层实现,用户可以不用关注底层的 DDS 使用了哪个API。ROS 中最重要的一个概念是“节点”,这种基于发布/订阅模型的节点,可以让开发者并行开发低耦合的功能模块,并且便于进行二次复用。ROS 2.0 采用的 DDS,提升了发布/订阅模型的性能。

(3) 在 ROS1.0 中,Nodelet 和 TCPROS/UDPROS 是并列的层次,也是负责通信的,Nodels可为同一个进程中的多个节点提供一种更优化的数据传输方式。ROS2.0中仍保留了这种数据传输方式,改名叫 Intra-process,同样也独立于 DDS。

ROS 2.0与ROS 1.0架构的不同主要是由数据分发服务引起的。DDS 是对象管理组织(Obiect Management Group,OMG)在 2004年正式发布的一个专门为实时系统设计的数据分发/订阅标准,最早应用于美国海军,解决舰船复杂网络环境中大量软件升级的容性问题。目前 DDS 已经成为美国国防部的强制标准,已广泛应用于国防、民航、工业控制等领域,成为分布式实时系统中数据发布/订阅的标准解决方案。DDS 是以数据为核心的发布/订阅模型,这种模型创建了一个“全局数据空间”(GlobaData Space)的概念,所有独立的应用都可以访问该空间。在DDS中,每个发布者或者订阅者都成为参与者(Participant),类似于 ROS 节点的概念。每个参与者都可以使用某种定义好的数据类型来读/写全局数据空间。

ROS 2.0还在不断发展中,在学术界和工业界未得到大范围的使用,但有着更强性能的ROS 2.0 将成为未来的发展趋势。


                        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值