[Documentation] [TitleIndex] [WordIndex

什么是ROS?

ROS 是一个适用于机器人的开源的元操作系统。它提供了操作系统应有的服务,包括硬件抽象,底层设备控制,常用函数的实现,进程间消息传递,以及包管理。它也提供用于获取、编译、编写、和跨计算机运行代码所需的工具和库函数。在某些方面ROS相当于一种“机器人框架(robot frameworks)”类似的“机器人框架”有:PlayerYARPOrocosCARMENOrcaMOOSMicrosoft Robotics Studio

ROS 运行时的“蓝图”是一种基于ROS通信基础结构的松耦合点对点进程网络。ROS实现了几种不同的通信方式,包括基于同步RPC样式通信的服务(services)机制,基于异步流媒体数据的话题(topics)机制以及用于数据存储的参数服务器(Parameter Server)。想更加深入的解释这些概念,请参见概念综述

ROS并不是一个实时的框架,但ROS可以嵌入实时程序。Willow Garage的PR2机器人使用了一种叫做pr2_etherCAT的系统来实时发送或接收ROS消息。ROS也可以与Orocos实时工具包无缝集成

目的

很多人都在问“ROS与其它机器人软件平台有什么不同?”这是一个很难解答的问题。因为ROS不是一个集成了大多数功能或特征的框架。事实上,ROS 的主要目标是为机器人研究和开发提供代码复用的支持。ROS是一个分布式的进程(也就是节点)框架,这些进程被封装在易于被分享和发布的程序包功能包集中。ROS也支持一种类似于代码储存库的联合系统,这个系统也可以实现工程的协作及发布。这个设计可以使一个工程的开发和实现从文件系统到用户接口完全独立决策(不受ROS限制)。同时,所有的工程都可以被ROS的基础工具整合在一起。

为了支持分享和协作的主要目的,ROS框架也有其它几个目标:

所以,“ROS与其它机器人软件平台有什么不同?”很难得到一个适用于所有情况的答案,但是,如果你选择使用其它机器人软件平台,我们希望你仍然可以使用到很多基于ROS发布的库函数。至于更多细节,这封Brian Gerkey(同时涉猎 Player 和 ROS)向ROS用户所写的关于ROS和Player区别的电子邮件(包括OpenCV 的集成)可以为我们提供一些比较:

这个问题的答案,和许多问题一样,视情况而定。特别是取悦于你想要干什么。Player非常适合简洁的非铰接的移动平台。它的设计为那些激光雷达的先锋提供了简单的传感器和电机操作方法。

然而,ROS是围绕着基于驱动传感器(倾斜式激光,盘式/斜试头部传感器,机械臂传感器)的复杂移动处理平台设计的。与Player相比,ROS可以更方便的借助分布式计算设备,而且我可以肯定,越高级的应用越适用于ROS而不是Player。换句话说,Player提供了更多的硬件驱动,而ROS提供了更多算法。

我认为,说ROS比Player更加灵活强大是公平的。但是,现实情况是,更加灵活强大意味着更加复杂。尽管我们很努力的使ROS更加简单易用,ROS仍然需要一个很长的学习过程。当然,熟悉Player会对学习ROS有很大帮助,因为它们很多基本的方面都是相似的。

关于你们针对OpenCV集成提出的问题,我想你们会发现ROS集成OpenCV的代码要比Player多一点。未来,当ROS和OpenCV团队明显重叠时,你们会发现这种差异将变得更大。

我发现ROS利用了大量的来自于Player工程的代码。ROS节点的代码重用了许多Player的驱动,而且Stage和Gazebo可在ROS社区中得到广泛的支持和良好的应用。

操作系统

ROS目前只能在基于Unix的平台上运行。ROS的软件主要在Ubuntu和Mac OS X 系统上测试,同时ROS社区仍持续支持Fedora,Gentoo,Arch Linux和其它Linux平台。

与此同时,Microsoft Windows端口的ROS已经实现,但并未完全开发完成。

发布

ROS核心系统及各种工具和库函数通常在ROS 发行版本中发布。ROS发行版本类似于Linux发行版本,并提供了一系列兼容此版本的可被使用或开发的软件。

贡献

ROS是开源项目,我们希望您可以考虑为ROS或兼容ROS的库函数做出贡献。请参考我们的贡献页面,了解如何参与ROS社区。

下一步

ROS 基本概念


2020-08-08 12:30