|||
ROS 是什么?
ROS(robot operating system)是一个适用于机器人的开源的元级操作系统。ROS 的主要设计目标是为机器人研发过程中的代码复用提供支持。它提供了操作系统应有的服务,包括硬件抽象、底层设备控制、共用功能执行、进程间消息传递,以及包管理。
ROS 也提供用于获取、编译、编写和跨计算机运行代码所需的工具和库函数。ROS 是一个分布式的进程框架,这些进程被封装在易于被分享和发布的功能包(package) 中。ROS 也支持一种类似代码储存库的联合系统,这个系统也可以实现工程的协作及发布。这个设计可以使一个项目的开发实现了从文件系统到用户接口的完全独立决策。同时,所有项目都可以被ROS 的库和基础工具整合在一起。
ROS 相较于其他机器人操作系统主要有以下特点。
通道:ROS 提供了一种发布-订阅式的通信框架,用以简单、快速地构建分布式计算系统。
仿真和数据可视化工具:ROS 提供了大量的仿真和数据可视化工具组合,用以配置、启动、自检、调试、可视化、登录、测试、终止系统。
强大的库:ROS 提供了大量的库文件(如roscpp、rospy),实现了自主移动、操作物体、感知环境等功能。
生态系统:ROS 的支持与发展构成了一个强大的生态系统。官方网站(www.ros.org) 提供了各种支持文档,提供了一套“一站式”的方案,使用户得以搜索并学习全球开发者共享的开源程序包。
ROS 的历史
ROS 系统最早源于2007 年斯坦福大学人工智能实验室的STAIR 项目与机器人技术公司Willow Garage的个人机器人项目(personal robotics program) 之间的合作,2008 年之后由Willow Garage 公司推动其发展。目前,稳定版本有以下几种。
(1) ROS Kinetic Kame,2016 年5 月23 日发布(其Logo 见 图1)。
图1 ROS 版本Kinetic Kame
(2) ROS Jade Turtle,2015 年5 月23 日发布(其Logo 见 图2)。
图2 ROS 版本Jade Turtle
(3) ROS Indigo Igloo,2014 年7 月22 日发布(其Logo 见 图3)。
图3 ROS 版本Indigo Igloo
(4) ROS Hydro Medusa,2013 年9 月4 日发布(其Logo 见 图4)。
图4 ROS 版本Hydro Medusa
(5) ROS Groovy Galapagos,2012 年12 月31 日发布(其Logo 见 图5)。
图5 ROS 版本Groovy Galapagos
(6) ROS Fuerte Turtle,2012 年4 月23 日发布(其Logo 见 图6)。
图6 ROS 版本Fuerte Turtle
(7) ROS Electric Emys,2011 年8 月30 日发布(其Logo 见 图7)。
图7 ROS 版本Electric Emys
(8) ROS Diamondback,2011 年3 月2 日发布(其Logo 见 图8)。
图8 ROS 版本Diamondback
(9) ROS C Turtle,2010 年8 月2 日发布(其Logo 见 图9)。
图9 ROS 版本C Turtle
(10) ROS Box Turtle,2010 年3 月2 日发布(其Logo 见 图10)。
图10 ROS 版本Box Turtle
ROS 总体框架
根据ROS 系统代码的维护者和分布来标识,ROS 系统代码主要有两大部分。一部分是核心部分,也是主要部分,一般称为main。主要是由Willow Garage 公司和一些开发者来提供设计与维护。它们提供一些分布式计算的基本工具,以及整个ROS 系统核心部分的程序编写。这部分内容被存储在计算机的安装文件中。另一部分是全球范围的代码,被称为universe,由不同国家的ROS 社区组织开发和维护。其中包括各种库的代码,如OpenCV、PCL 等;库的上一层是从功能的角度提供的代码,如人脸识别等,它们调用各种库来实现这些功能;最上层的代码是应用级代码,叫作apps,可以让机器人完成某一种应用,如去拿啤酒,这个过程则调用不同功能的代码进行组合,如啤酒的识别、抓取啤酒等。这个过程一般需要用户下载相应的功能包,然后学习和使用。
不过,对于使用者来说,无论谁提供设计和维护的代码,用户都可以下载到自己的计算机上,然后进行下一步工作。还可以从另外的角度来理解ROS。ROS 系统有三级概念:文件系统级、计算图级、社区级。
文件系统级
ROS 文件系统级指的是可以在硬盘上面查看的ROS 源代码,包括如下几种形式。
(1) 功能包。功能包是ROS 中组织软件的主要形式,一个功能包可能包含ROS运行过程(如节点),一个ROS 依赖库、数据集、配置文件或者组织在一起的任何其他文件。功能包是ROS软件的元级组织形式,它可以包含任何内容:库、工具、可执行文件等。
(2) Manifest。Manifest 提供关于功能包的元数据(meta data),包括其许可信息和依赖信息,指定的编程语言信息(如编译标记)。它是功能包的一种描述。事实上,它最重要的功能是定义功能包之间的依赖关系。
(3) Message(msg) type。消息的描述,定义了ROS 中发送消息的数据结构,存储在目录 my_package/msg/MyMessageType.msg 下。
(4) Service(srv) type。服务的描述,定义了ROS 中需求和响应的数据结构,存储在目录 my_package/srv/MyServiceType.srv 下。
计算图级
计算图级(见 图11) 是ROS 处理数据的一种点对点的网络形式。程序运行时,所有进程及它们所进行的数据处理,将会通过一种点对点的网络形式表现出来。它们将通过节点、节点管理器、主题、服务等来进行表现。ROS 中基本的计算图级概念包括节点、节点管理器、参数服务器、消息、服务、主题和包。这些概念以各种形式提供数据。
图11 ROS 计算图级概念
一些基本的ROS 概念如下。
(1) 节点。ROS 节点是用ROS 客户端库(如roscpp、rospy) 写成的执行计算的过程。一个机器人控制系统由很多节点组成,以便在很精细的尺度上模块化。例如,可以通过一个节点进行人脸识别,一个节点执行导航,一个节点进行抓取。
(2) 节点管理器。节点之间通过节点管理器进行名称注册和查找。没有节点管理器,节点将不能互相通信或者进行消息交换。
ROS 节点管理器为节点保存主题和服务的注册信息。节点通过与节点管理器通信来报告其注册信息。当这些节点和节点管理器通信时,它们可以接收别的注册节点的信息,并保持通信正常。当这些注册信息改变时,节点管理器也会回调这些节点。节点可以与节点直接相连。节点管理器仅提供查找表信息,如DNS 域名服务器。订阅一个主题的节点将会请求与发布主题的节点进行连接,并确定在一种连接协议上进行连接。
(3) 参数服务器。参数服务器是节点管理器的一部分。
(4) 消息。一个消息是一个由类型域构成的简单的数据结构。消息可以包含任何嵌套的结构和阵列。节点之间通过消息来互相通信。
(5) 主题。消息通过主题进行传送。一个节点通过把消息发送到一个给定的主题来发布一个消息。主题是用于识别消息内容的名称。一个节点对某一类型的数据感兴趣,它只需要订阅相关的主题即可。一个主题可能同时有很多并发主题发布者和主题订阅者,一个节点可以发布和订阅多个主题。通常情况下,主题发布者和主题订阅者不知道对方的存在。当订阅者发现该信息是它所订阅的时,就可以在工作区接收到这个信息。
ROS 中有多个独立的节点,节点之间通过一个发布/订阅的消息系统与其他节点联系。如 图12所示,发布者和订阅者都可以是节点,当一个节点需要广播消息时,它就会发布消息到对应的主题。当一个节点想要接收信息时,它可以订阅所需要的主题。
图12 ROS 中发布者和订阅者的通信方式
(6) 服务。发布/订阅模式这种多对多的传输方式不同于请求/回复交互的方式,请求/回复交互的方式通过服务来进行。其中,服务被定义为一对消息结构:一个用于请求,一个用于回复。节点提供了某种名称的服务,客户通过发送请求信息并等待响应来使用服务。
图13 所示的服务是一个客户端节点发送“请求”的数据到一个服务器节点,并等待回复;服务器节点接收到“请求”后,发送一些称为“回复”的数据给客户端节点。“请求”和“回复”数据携带的特定内容由服务数据类型来决定,类似消息的消息类型,但是服务数据类型分别表示请求和回复。服务与消息的不同之处在于:服务是双向的一对一通信,而消息是单向的一对一或者一对多通信。
图13 ROS 中客户端和服务端的通信方式
(7) 消息记录包。消息记录包是一种用于保存和回放ROS 消息数据的格式,是用于检索机器人数据的重要机制。
社区级
ROS 社区采用软件仓库的模式来存放代码。这样可以最大限度地提高社区参与度,使所有感兴趣的开发者和用户都能存放、更新和维护ROS 代码。软件仓库中的功能包数量随着用户数量的增长也在不停增长。
发行版本。ROS 发行版本是可以用来安装的一系列带有版本号的功能包集合。ROS 发行版本类似于Linux 的发行版本。
软件版本仓库。ROS 软件版本仓库依赖一个软件版本仓库来组织和更新,用来发展和发布开发者和用户自己的机器人软件组件。
社区百科。ROS 社区百科 http://wiki.ros.org 是记录ROS 文档信息的主要论坛。任何开发者和用户可以使用账号注册,发布文档,提供修正或更新、编写教程等功能。
Bug Ticket System。用户可以提交ROS Bug 的系统。
邮件列表。ROS 邮件列表是社区主要的通信渠道,用于给用户发送ROS更新和提问的更新信息邮件。
ROS 答案。用于提问和回答问题,网址是 http://answers.ros.org/questions。
责任编辑:任静
北京:科学出版社,2017.6
ISBN:978-7-03-053057-8
自2010年开源机器人操作系统(ROS)发布第一个版本以来,截至本书成稿时已经发布了10个版本,ROS也已经成为机器人研发领域的通用性软件平台。ROS是建立在开源操作系统Ubuntu系统之上的开源机器人操作系统,其主要目标是为机器人研究和开发提供代码复用的支持。它提供了操作系统应有的服务,包括硬件抽象、底层设备控制、共用功能执行、进程间消息传递,以及包管理。ROS的官方网站也提供了各种支持文档,相关资源构成了一个强大的生态系统,使学习和使用ROS非常方便。《基于ROS的机器人理论与应用》通过介绍ROS并以实际机器人为平台,展示机器人主要功能模块涉及的相关理论和应用场景。
(本期责编:李文超)
一起阅读科学!
科学出版社│微信ID:sciencepress-cspm
专业品质 学术价值
原创好读 科学品味
点击文中书名、作者、封面可购买本书。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-17 00:17
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社