标签:
ROS系统的架构主要被设计和划分成三部分,没一部分都代表一个层级的概念:
第一级是文件系统级。你将会使用这一组概念来理解ROS的内部构成,文件夹结构,以及工作所需要的核心文件。
第二级是计算图级,体现的是进程和系统之间的通信。你将会看到ROS各个概念和功能,包括建立系统,处理各类进程,与多台计算机通信等。
第三级是开源社区级。这个层级是非常重要的,因为开源社区的大力支持才使得ROS在快速的发展。
1、理解ROS文件系统级别
刚接触ROS,里面涉及了很多的陌生的概念,但当你理解了这些概念之后,就会轻车熟路,倍感亲切了。ROS的文件系统结构如下图所示:
功能包(Package):功能包是ROS中软件组织的基本形式。一个功能包具有最小的结构和最少的内容,用于创建ROS程序。它可以包含ROS运行的进程(节点),配置文件等。
功能包清单(Manifest):功能包清单提供关于功能包,许可信息,依赖关系,编译标志等的信息。功能包清单是一个manifests.xml文件,通过这个文件能够实现功能包的管理。
功能包集(Stack):如果你将几个具有某些功能的功能包组织在一起,那么你将会获得一个功能包集。在ROS系统中,存在大量的不同用途的功能包集例如导航功能包集。
功能包集清单(Stack manifest):功能包清单(stack.xml)提供了一个关于功能包集的清单,包括开源代码的许可证信息,与其他功能包集的依赖关系等。
消息类型(Message/msg type):消息是一个进程发送到其他进程的信息。ROS系统有许多已经定义好的标准消息,你也可以自定义消息,消息存储在对应功能包的msg文件夹下。消息类型的说明存储在mypackage/msg/MyMessageType.msg中,也就是对应功能包的msg文件夹下。
服务类型(Service/srv type):对服务类型进行描述说明的文件,在ROS系统中服务的请求和相应的数据结构,这些描述说明存储在mypackage/srv/MyServiceType.srv中,也就是对应功能能包的srv文件夹下。
下面是一个功能包的文件结构示例图:
2、理解计算图级
ROS会创建一个链接到所有进程的网络。在系统中的任何节点都可以访问此网络,并通过该网络与其他节点交互,获取其他就节点发布的信息,并将自身数据发布到网络上。
在该层级最基本的概念包括有节点,节点管理器,参数服务器,消息,服务,主题和消息记录包。这些概念都以不同的方式向计算图级提供数据。
节点(Node):节点是主要的计算执行进程。一个功能包可以有多个节点功能,就是说可以有多个main入口。如果你想要有一个可以与其他节点进行交互的进程,那么需要创建一个节点,并将节点链接到ROS网络。通常情况下,系统包含能够实现不同功能的多个节点,为了减少系统的风险,最好每个节点的功能都是功能较为单一的,而不是在系统中创建一个保罗万象的大节点。就诶点能够使用如roscpp(C++)或rospy(python)的ros客户端库进行编写程序。
节点管理器(Master):节点管理器用于节点的名称注册和查找等。如果你的整个ROS系统中没有节点管理,就不会有节点,服务,消息之间的通信。需要注意的是,由于ROS本身是一个分布式网络系统,你可以在一台计算机上运行节点管理器,在其他计算机上运行由该管理器管理的节点。
参数服务器(Parameter Server):参数服务器能够使数据通过关键词存储在一个系统的核心位置。通过使用参数,就能在运行时配置节点或者改变节点的工作任务。
消息(Message):节点通过消息完成彼此的沟通。消息包含一个节点发送到其他节点的数据信息。ROS中包含多种标准类型的消息,例如整型,字节等,同时你也可以基于标准消息开发自定义类型的消息。
主题(Topic):主题是由ROS网络对消息进行陆游和消息管理的数据总线。每条消息都发布到相应的主题。当一个节点发送数据时,我们就说该节点正在向主题发布消息。节点可以通过订阅某个主题,接收来自其他节点的消息。一个节点可以订阅一个主题,而并不需要该节点同时发布该主题。这就保证了消息的发布者和订阅者之间的相互解偶,完全无需知晓对方的存在。主题的名称必须是独一无二的,否则同名主题之间的消息路由就出现错误。
服务(Service):在发布主题时,正在发送的数据能够以多对多的方式交互。但当你需要从某个节点获得一个请求或应答时,就不能通过主题来实现了,在这种情况下,就需要用到服务了,服务能够允许我们直接与某个节点进行交互。此外,服务必须有一个唯一的名称。当一个节点提供某个服务时,所有节点都可以通过使用ROS客户端库所编写的代码与它通信。
消息记录包(Bag):消息记录包是一种用于保存和回放ROS消息数据的文件格式。消息记录包是一种用于存储数据的重要机制。他能够获取并记录各种难以收集的传感器数据。我们可以通过消息记录包反复获取实验数据,进行必要的开发和算法测试。在使用复杂机器人进行实验工作时,需要经常使用消息记录包。
3、开源社区级
标签:
原文地址:http://www.cnblogs.com/cv-pr/p/4837240.html