ROS是什么

来源:互联网 发布:vc 进行可视化编程 编辑:程序博客网 时间:2024/04/27 12:26


我们都知道 ROS的一些基本性能:机器人操作系统(Robot OperatingSystem),一个开源的元级操作系统(后操作系统),一些包,软件工具的集合,一个分布式的可跨进程,跨机器进行通讯的体系架构,能够提供工具对系统进行实时性的数据分析,编程语言独立(c++, python, lisp, java等等),跨平台等等.

 提供类似于操作系统的服务,包括硬件抽象描述、底层驱动程序管理、共用功能的执行、程序间消息传递、程序发行包管理,它也提供一些工具和库用于获取、建立、编写和执行多机融合的程序。

 

可是需要注意的是:它即不是一个真正的操作系统,也不是一种编程语言,更不是一个编程开发环境。所以不要说我用ros开发了一个什么什么功能的软件…… Willow Garage 那些牛人们会哭的……

 

ROS系统根据代码的维护者和分布来标识的话,主要有两大部分,一部分是核心部分,也是主要部分,一般称为main。 主要是 Willow Garage 公司 和一些开发者来设计提供与维护。他们提供一些分布式计算的基本工具,以及整个ros系统核心部分的程序编写。这个一般我们下载安装后,就会在我们的电脑上。

另外一部份就是全球范围的代码。由不同国家的ros社区组织开发和维护。一种是各种库的代码,如opencv,pcl,tf等等;在库的上一层,是capability,从功能的角度提供的代码,如face recognition,beer identification,delivery,grasp等等,它们调用各种库来实现这些功能;最上层的代码是应用级的代码,叫做apps,可以让机器人完成某一种应用,如去拿啤酒,而这个过程则调用不同功能的代码进行组合,如啤酒的识别,抓取啤酒等等。这个一般需要我们将相应的package下载下来,然后可以学习和使用。

 

 

此图摘之Jonatha Bohren 的 ROS Crash-Course, Part I

Introduction to ROS distribution, buildsystem and infrastructure



不过,对于使用者来说,无论是谁提供和维护的代码,我们都可以下载到自己的电脑上,来进行下一步的工作。

然后我们从另外的角度来理解ROS。一般来说,ROS系统有三级概念:文件系统级、计算图级、社区级。

FilesystemLevel :*

文件系统级概念:我们在硬盘上面ROS 源代码的组织方式。会通过功能包(package) manifest, package stack等方式来进行组织。

  • Packages:ROS的基本组织,可以包含任意格式文件。一个Package 可以包含ROS执行时处理的文件(nodes),一个ROS的依赖库,一个数据集合,配置文件或一些有用的文件在一起。
  • Manifests:Manifests (manifest.xml) 提供关于Package元数据,包括它的许可信息和Package之间依赖关系,以及语言特性信息像编译标志(编译优化参数)。
  • Stacks: Stacks 是Packages的集合,它提供一个完整的功能,像“navigation stack” Stack与版本号关联,同时也是如何发行ROS软件方式的关键。
  • Manifest Stack Manifests: Stack manifests (stack.xml) 提供关于Stack元数据,包括它的许可信息和Stack之间依赖关系。
  • Message (msg) types: 信息描述, 位置在路径:my_package/msg/MyMessageType.msg, 定义数据类型在ROS的 messages ROS里面。
  • Service (srv) types: 服务描述,位置在路径:my_package/srv/MyServiceType.srv, 定义这个请求和相应的数据结构 在ROS services 里面。

计算图级:程序运行时,所有进程及它们所进行的数据处理,将会通过一种点对点的网络形式表现出来。将通过节点,节点管理器,topic, service等来进行表现。

Computation Graph Level就是用ROS的P2P(peer-to-peer网络传输协议)网络集中处理所有的数据。基本的ComputationGraph的概念包括Node, Master, Parameter Sever,messages, services, topics,和bags, 以上所有的这些都以不同的方式给Graph传输数据。

  • Nodes: Nodes 是一系列运行中的程序。ROS被设计成在一定颗粒度下的模块化系统。一个机器人控制系统通常包含许多Nodes。比如一个Node控制激光雷达,一个Node控制车轮马达,一个Node处理定位,一个Node执行路径规划,另外一个提供图形化界面等等。一个ROS节点是由Libraries ROS client library写成的, 例如 roscpp 和 rospy.
  • Master: ROS Master 提供了登记列表和对其他计算Graph的查找。没有Master,节点将无法找到其他节点,交换消息或调用服务。
  • Server Parameter Server: 参数服务器使数据按照钥匙的方式存储。目前,参数服务器是主持的组成部分。
  • Messages:节点之间通过messages来传递消息。一个message是一个简单的数据结构,包含一些归类定义的区。支持标准的原始数据类型(整数、浮点数、布尔数,等)和原始数组类型。message可以包含任意的嵌套结构和数组(很类似于C语言的结构structs)
  • Topics: Messages以一种发布/订阅的方式传递。一个node可以在一个给定的topic中发布消息。Topic是一个name被用于描述消息内容。一个node针对某个topic关注与订阅特定类型的数据。可能同时有多个node发布或者订阅同一个topic的消息;也可能有一个topic同时发布或订阅多个topic。总体上,发布者和订阅者不了解彼此的存在。主要的概念在于将信息的发布者和需求者解耦、分离。逻辑上,topic可以看作是一个严格规范化的消息bus。每个bus有一个名字,每个node都可以连接到bus发送和接受符合标准类型的消息。
  • Services:发布/订阅模型是很灵活的通讯模式,但是多对多,单向传输对于分布式系统中经常需要的“请求/回应”式的交互来说并不合适。因此,“请求/回应” 是通过services来实现的。这种通讯的定义是一种成对的消息:一个用于请求,一个用于回应。假设一个节点提供了一个服务提供下一个name和客户使用服务发送请求消息并等待答复。ROS的客户库通常以一种远程调用的方式提供这样的交互。
  • Bags: Bags是一种格式,用于存储和播放ROS消息。对于储存数据来说Bags是一种很重要的机制。例如传感器数据很难收集但却是开发与测试中必须的。

社区级:ROS在网络上进行代码发布的一种表现形式。因为ROS为了最大限度地提高社区参与,是它能够快速的发展,设计者们不再是由少部分人来存放,更新和维护ROS代码,而采用联合仓库的模式来处理。每个研究所和组织会以Repositories 仓库为单位来发布他们的代码。这样就鼓励世界各地的开发者和用户,提供和维护自己的ROS仓库代码,而且他们对代码具有直接的所有权和控制权。

Repositories的数目,从2007年11月的1个到2008年11月的4个,到2009年11月的16个,2010年11月的52个,到2011年7月的79个,到现在institutions 的 repositories 达到90个,personal的达到14个,singleserving的达到15个。

•发行版 Distributions:ROS的发行版是一系列可安装的包的集合。 (相当于Linux发行版)。 可参加 http://blog.csdn.net/lynnandwei/article/details/6881235
•软件仓库Repositories:不同的机构可以以仓库为单位开发和发布自己的ROS软件组件。
•ROS的Wiki:ROS维基是记录有关ROS的信息(此信息大部分来自于此)的主要论坛。
•bug ticket system
•邮件列表:ROS用户邮件列表。
•博客


 

 *此处翻译转载于 http://zh.wikipedia.org/wiki/ROS

原创粉丝点击