机器人操作系统(ROS)课件3.ROS的概述_第1页
机器人操作系统(ROS)课件3.ROS的概述_第2页
机器人操作系统(ROS)课件3.ROS的概述_第3页
机器人操作系统(ROS)课件3.ROS的概述_第4页
机器人操作系统(ROS)课件3.ROS的概述_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

机器人操作系统(ROS)机器人操作系统(ROS)ROS概述3机器人操作系统(ROS)3.ROS的概述在这一章,我们将深入探讨ROS的架构和一些重要概念。ROS是两个程序或者进程间通信的框架,是一个优秀的机器人分布式框架。ROS系统的架构主要被设计和划分为三部分,每一部分代表一个层级的概念: 文件系统级(Thefilesystemlevel)

计算图级(Thecomputationgraphlevel)

开源社区级(Thecommunitylevel)机器人操作系统(ROS)3.1ROS文件系统级如果你是刚刚接手ROS方面的开发或项目,你肯定会觉得ROS中的各种概念非常奇怪,但是当你对ROS的使用熟练之后,你就觉得这些概念很好理解了。与其他操作系统相似,一个ROS程序的不同组件要被放在不同的文件夹下,这些文件夹是根据不同的功能来对文件进行组织的,如图3-1所示:机器人操作系统(ROS)3.1ROS文件系统级功能包(Package):功能包是ROS中软件组织的基本形式。它可以包含ROS运行的进程(节点)、配置文件等。功能包清单(PackageManifest):功能包清单提供关于功能包、许可信息、依赖关系、编译标志等的信息。一个包的清单一个名为package.xml的文件管理。元功能包(Metapackage):将几个具有某些功能的功能包组织在一起,就获得了一个元功能包。例如一个ROS导航的元功能包中会包含建模、定位、导航等功能包。消息类型(Message):消息是一个节点发送到其他节点的信息。ROS系统有很多的标准消息类型。消息类型的说明存储在对应功能包的msg文件夹下。服务类型(Service):服务描述说明存储在对应功能包的src文件夹下,定义了在ROS中由每个进程提供的关于服务请求和响应的数据结构。机器人操作系统(ROS)3.1.1工作空间工作空间就是一个包含功能包、可编辑源文件或编译包的文件夹。当想同时编译不同的功能包时非常有用,并且可以用来保存本地开发包,一般包含src、bulid和devel这三个文件夹。开发过程中只需要更改src文件夹里的文件,build和devel无需手动创建,编译功能包时会自动生成。源文件空间(src文件夹):在源文件空间放置了功能包等。编译空间(build文件夹):build文件夹存放CMake和catkin的缓存信息、配置和其他中间文件。开发空间(devel文件夹):devel文件夹用来保存编译后的程序。典型的ROS程序包结构机器人操作系统(ROS)3.1.2功能包功能包是ROS中软件组织的基本形式,一个功能包具有用于创建ROS程序的最小结构和最少内容,它可以包含ROS运行的进程(节点)、配置文件等。一个功能包中主要包含这几个文件:CMakeLists.txt功能包配置文件:用于这个功能包cmake编译时的配置文件。package.xml功能包清单文件:用xml的标签格式标记这个功能包的各类相关信息,比如包的名称、依赖关系等。主要作用是为了更容易的安装和分发功能包。include<package_name>功能包头文件目录:你可以把你的功能包程序包含的*.h头文件放在这里,include下之所以还要加一级路径<package_name>是为了更好的区分自己定义的头文件和系统标准头文件,<package_name>用实际功能包的名称替代。不过这个文件夹不是必要项,比如有些程序没有头文件的情况。msg非标准消息定义目录:消息是ROS中一个进程(节点)发送到其他进程(节点)的信息,消息类型是消息的数据结构,ROS系统提供了很多标准类型的消息可以直接使用,如果你要使用一些非标准类型的消息,就需要自己来定义该类型的消息,并把定义的文件放在这里。不过这个文件夹不是必要项,比如程序中只使用标准类型的消息的情况。机器人操作系统(ROS)3.1.2功能包srv服务类型定义目录:服务是ROS中进程(节点)间的请求/响应通信过程,服务类型是服务请求/响应的数据结构,服务类型的定义放在这里。如果要调用此服务,你需要使用该功能包名称和服务名称。不过这个文件夹不是必要项,比如程序中不使用服务的情况。scripts可执行脚本文件存放目录:这里用于存放bash、Python或其他脚本的可执行文件。不过这个文件夹不是必要项,比如程序中不使用可执行脚本的情况。launch文件目录:这里用于存放*.launch文件,*.launch文件用于启动ROS功能包中的一个或多个节点,在含有多个节点启动的大型项目中很有用。不过这个文件夹不是必要项,节点也可以不通过launch文件启动。src功能包中节点源文件存放目录:一个功能包中可以有多个进程(节点)程序来完成不同的功能,每个进程(节点)程序都是可以单独运行的,这里用于存放这些进程(节点)程序的源文件,你可以在这里再创建文件夹和文件来按你的需求组织源文件,源文件可以用c++、Python等来书写。机器人操作系统(ROS)3.1.2功能包为了创建、修改、使用功能包,ROS给我们提供了一些实用的工具,常用的有下面这些工具。rospack:用于获取信息或在系统中查找工作空间。catkin_create_pkg:用于在工作空间的src源空间下创建一个新的功能包。catkin_make:用于编译工作空间中的功能包。rosdep:用于安装功能包的系统依赖项。rqt_dep:用于查看功能包的依赖关系图。关于这些工具命令的具体使用方法,会在后面的章节中结合实例进行具体的讲解。这里只是先介绍给大家,让大家有个概念上的了解,感兴趣的朋友也可以自己上网了解这些命令的具体用法。机器人操作系统(ROS)3.1.3元功能包MetaPackage是Linux的一个文件管理系统的概念。是ROS中的一个虚包,里面没有实质性的内容,但是它依赖了其他的软件包,通过这种方法可以把其他包组合起来,构成一个逻辑上独立的功能包,类似功能包集合的概念。元功能包与功能包的package.xml有些许不同,需包含引用标签:<export><metapackage/></export>此外,元功能包还不需要<build_depend>标签声明编译过程依赖的其他功能包,只需要使用<run_depend>标签声明功能包运行时依赖的其他功能包。机器人操作系统(ROS)3.2计算图级ROS会创建一个连接到所有进程的网络。在系统中的任何节点都可以访问此网络,并通过该网络与其他节点交互,获取其他节点发布的信息,并且将自身数据发布到网络上。以下是一些与ROS计算图级有关的术语:ROS节点(node):使用ROSAPI进行运算的进程。ROS节点管理器(master):连接ROS节点的媒介程序。ROS参数服务器(parameterserver):通常与ROSMaster一起运行的一个程序。使用者可以在此服务器上存储不同的参数,所有的节点都可以访问它,但使用者也可以设置参数的保密性。如果某个参数是公共的,那么所有节点都可以访问,但如果某个参数具有私有属性,那么只有特定的节点才可以访问这个参数。机器人操作系统(ROS)3.2计算图级ROS话题(topics):ROS节点可以通过话题发送或接收信息。一个节点可以发布或者接收任意数量的话题。ROS消息(message):消息基本上都是通过话题传送。ROS含有许多内建的消息类型,当然使用者也可以定义他们自己的消息类型。ROS服务(service):比起ROS的话题(Topics),ROS服务(Service)则有着请求/应答的机制。服务是一种根据客户节点的请求进行服务响应的功能。能够处理服务请求的节点被称为服务节点,而请求服务的节点被称为客户节点。ROS数据记录包(bags):一种可用于保存和查看ROS话题历史记录的有效方式,可用于在机器人中记录数据以便离线处理。计算图级机器人操作系统(ROS)3.2.1节点节点是主要的计算执行进程。系统包含能够实现不同功能的多个节点。你最好让众多节点都具有单一的功能而不是在系统中创建一个包罗万象的大节点。节点需要使用如roscpp或rospy的ROS客户端库进行编写。ROS有另一种类型的节点,动态加载接节点nodelet。nodelet可以在单个进程中运行多个,其中每个nodelet为一个线程(轻量级进程)。nodelet可以减少ros节点之间的消息传输,将多个算法的nodelet跑到一个进程中,这样就无需数据传输,这是因为进程内部内存是共享的,数据传输的取地址即可,从而实现的零拷贝(zerocopy)。这样节点通信效率更高。例如nodelet对于摄像头和3D传感器这类大数据传输量的设备特别有用。ROS提供了处理节点的工具,用于节点信息、状态、可用性等的查询操作,例如可以用下面的命令对正在运行的节点进行操作。rosnodeinfo<node_name>:用于输出当前节点信息。rosnodekill<node_name>:用于杀死正在运行节点进程来结束节点的运行。rosnodelist:用于列出当前活动的节点。rosnodemachine<hostname>:用于列出指定计算机上运行的节点。rosnodeping<node_name>:用于测试节点间的网络连通性。rosnodecleanup:用于将无法访问节点的注册信息清除。机器人操作系统(ROS)3.2.2消息节点通过消息(message)完成彼此的沟通。消息包含一个节点发送给其他节点的信息数据。关于消息类型的知识在前面已经讲述了,这里不再赘述。ROS提供了获取消息相关信息的命令工具,以下列举出一些常用的命令。rosmsgshow<message_type>:用于显示一条消息的字段。rosmsglist:用于列出所有消息。rosmsgpackage<package_name>:用于列出功能包的所有消息。rosmsgpackages:用于列出所有具有该消息的功能包。rosmsgusers<message_type>:用于搜索使用该消息类型的代码文件。rosmsgmd5<message_type>:用于显示一条消息的MD5求和结果。机器人操作系统(ROS)3.2.3话题每个消息都必须发布到相应的话题(topic),通过话题来实现在ROS计算图网络中的路由转发。当一个节点发送数据时,我们就说该节点正在向话题发布消息;节点可以通过订阅某个话题,接收来自其他节点的消息。通过话题进行消息路由不需要节点之间直接连接,这就意味着发布者节点和订阅者节点之间不需要知道彼此是否存在,这样就保证了发布者节点与订阅者节点之间的解耦合。同一个话题可以有多个订阅者也可以有多个发布者,不过要注意必须使用不同的节点发布同一个话题。每个话题都是强类型的,不管是发布消息到话题还是从话题中订阅消息,发布者和订阅者定义的消息类型必须与话题的消息类型相匹配。ROS提供了操作话题的命令工具,以下列举出一些常用的命令。rostopicbw</topic_name>:用于显示话题所使用的带宽。rostopicecho</topic_name>:用于将话题中的消息数据输出到屏幕。rostopicfind<message_type>:用于按照消息类型查找话题。rostopichz</topic_name>:用于显示话题的发布频率。rostopicinfo</topic_name>:用于输出活动话题、发布的话题、话题订阅者和服务的信息。rostopiclist:用于列出当前活动话题的列表。rostopicpub</topic_name><message_type><args>:用于通过命令行将数据发布到话题。rostopictype</topic_name>:用于输出话题中发布的消息类型。机器人操作系统(ROS)3.2.4服务在一些特殊的场合,节点间需要点对点的高效率通信并及时获取应答,这个时候就需要用服务的方式进行交互。提供服务的节点叫服务端,向服务端发起请求并等待响应的节点叫客户端,客户端发起一次请求并得到服务端的一次响应,这样就完成了一次服务通信过程。服务通信过程中服务的数据类型需要用户自己定义,与消息不同,节点并不提供标准服务类型。服务类型的定义文件都是以*.srv为扩展名,并且被放在功能包的srv/文件夹下。ROS提供了操作服务的命令工具,以下列举出一些常用的命令。rosservicecall</service_name><args>:用于通过命令行参数调用服务。rosservicefind<service_type>:用于根据服务类型查询服务。rosserviceinfo</service_name>:用于输出服务信息。rosservicelist:用于列出活动服务清单。rosservicetype</service_name>:用于输出服务类型。rosserviceuri</service_name>:用于输出服务的ROSRPCURI。机器人操作系统(ROS)3.2.5节点管理器节点管理器(master)用于节点的名称注册和查找等,也负责设置节点间的通信。如果在你的整个ROS系统中没有节点管理器,就不会有节点、消息、服务之间的通信。由于ROS本身就是一个分布式的网络系统,所以你可以在某台计算机上运行节点管理器,在这台计算机和其他台计算机上运行节点。ROS中提供了跟节点管理器相关的命令行工具,就是roscore。roscore:用于启动节点管理器,这个命令会加载ROS节点管理器和其他ROS核心组件。机器人操作系统(ROS)3.2.6参数服务器参数服务器(parameterserver)能够使数据通过关键词存储在一个系统的核心位置。通过使用参数,就能够在节点运行时动态配置节点或改变节点的工作任务。参数服务器是可通过网络访问的共享的多变量字典,节点使用此服务器来存储和检索运行时的参数。ROS中关于参数服务器的命令行工具,以下列举出一些常用的命令。rosparamlist:用于列出参数服务器中的所有参数。rosparamget<parameter_name>:用于获取参数服务器中的参数值。rosparamset<parameter_name><value>:用于设置参数服务器中参数的值。rosparamdelete<parameter_name>:用于将参数从参数服务器中删除。rosparamdump<file>:用于将参数服务器的参数保存到一个文件。rosparamload<file>:用于从文件将参数加载到参数服务器。机器人操作系统(ROS)3.2.7消息记录包消息记录包(bag)是一种用于保存和回放ROS消息数据的文件格式。消息记录包是一种用于存储数据的重要机制,它可以帮助记录一些难以收集的传感器数据,然后通过反复回放数据进行算法的性能开发和测试。ROS创建的消息记录包文件以*.bag为扩展名,通过播放、停止、后退操作该文件,可以像实时会话一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论