首页
学习
活动
专区
工具
TVP
发布

ROS的重要概念

开篇

为了开发与ROS有关的机器人程序,必须要了解ROS的重要概念。首先让我们来看一下ROS中使用的术语,接下来我们来看看ROS的重要概念:消息通信、消息文件、名称(name)、坐标变换(TF)、客户端库、不同设备之间的通信、文件系统和构建系统。

ROS术语

本篇文章总结了常用的ROS术语,并对重点术语做了深入的分析。大家把这个作为ROS术语词典。大部分应该为初次遇到的术语。如果有不明白的术语,可以先略过,可以通过后面的系列文章中的例子和练习中掌握到。

1、ROS

ROS是一个用于开发机器人程序的、类似操作系统的机器人软件平台。ROS提供开发机器人应用程序时候所需要的硬件抽象、子设备控制,以及机器人工程中广泛使用的传感、识别、绘图、运动规划等功能。此外ROS还能提供进程之间的消息解析、功能包管理、库和丰富的开发调试工具。

2、主节点(master)

主节点(master)负责节点到节点之间的连接和通信,类似于名称服务器(NameServer)。roscore是它的运行命令,当运行主节点时,可以注册每个节点的名字,并根据需要或取消相关信息。没有主节点,就不能在节点之间建立访问和消息交流(如话题和服务)

主节点使用XML远程过程调用(如XMLRPC、XML-Remote Procedure Call)与节点进行通信。XMLRPC是一种基于HTTP的协议,主节点不与连接到主节点的节点保持连接。换句话说,节点只有在需要注册自己的信息或者向其他节点发送请求消息的时候才能够访问主节点并获取信息。通常情况下,不检查彼此的连接状态。由于这些特点,ROS可用于非常大而复杂的环境。XMLRPC也非常轻便,支持多种编程语言,使其非常适合支持各种硬件和语言的ROS。

当启动ROS时,主节点将获取用户设置的ROS_MASTER_URI变量列出的URI地址和端口。除非另外设置,默认情况下,URI地址使用当前的本地IP,端口使用11311。

3、节点(node)

节点是在ROS中运行的最小处理单元。可以把它看成是一个可执行程序。在ROS中,建议为一个目的创建一个节点,设计时注重重用性。例如在移动机器人的情况下,为了驱动机器人,将每个程序细分化。也就是说,使用传感器驱动、传感器数据转换、障碍物判断、电机驱动、编码器输入和导航多个细分节点。

节点在运行的同时,向主节点注册节点的名称,并且还注册发布者(publisher)、订阅者(subscriber)、服务服务器(service server)、服务客户端(service client)的名称,且也注册消息形式、URI地址和端口。基于这些信息每个节点可以使用话题和服务于其它节点交换消息。

节点使用XMLRPC于主节点进行通信,并使用TCP/IP通信系列的XMLRPC或者TCPROS进行节点之间的通信。

节点之间的连接请求和响应使用XMLRPC(节点与主节点通信),而消息通信使用TCPROS,因为它是节点与节点之间的直接通信,与主节点无关。

URI地址和端口则使用存储与运行当前节点的计算机上的名为ROS_HOSTNAME的环境变量作为URI地址,并将端口设置为任意的固定值。

4、功能包(package)

功能包是构成ROS的基本单元。ROS应用程序已功能包为单位开发的。功能包包括至少一个以上的节点或者拥有用于运行其他功能节点的配置文件。它还包括功能包所需要的其他文件,如用于运行各种进程的ROS依赖库、数据集、配置文件等。目前官方注册的R功能包的数量为(截至2017.7):ROS_Indigo约2500个,ROS_Kinect约为1600个。

5、元功能包(metapackage)

元功能包是一个具有共同目的的功能包的集合。例如,导航元功能包包含AMCL、DWA(动态窗口避障)、EKF、map_server(地图服务器,常用于保存构建好的地图)等10多个功能包。

6、消息(message)

节点间通信是通过消息进行发送和接收数据。消息是诸如integer、floating、point和boolean等类型的变量。其实,我们还可以使用诸如消息里包括消息的简单数据结构或列举消息的消息数组的结构。使用消息的通信方法包括TCPROS、UDPROS等,根据情况使用单向消息发送/接收方式的话题(topic)和双向消息请求(request)/响应(response)方式的服务

7、话题(topic)

话题就是“故事”。在发布者节点关于故事向主节点注册之后,它以消息形式发布该故事的广告、希望接受该故事的订阅者节点获得在主节点中这个话题注册的那个发布者节点的信息。基于这个信息,订阅者节点直接连接到发布者节点,用话题发送和接收消息。

8、发布与发布者(publish、publisher)

发布publish是指以话题内容相对应的额消息形式发送数据。为了执行发布,发布者publisher节点在主节点上注册自己的话题等多种信息,并向希望订阅的订阅者节点发送消息。发布者在节点中声明自己是执行发布的个体。单个节点可以成为多个发布者。

9、订阅与订阅者(subscribe、subscriber)

订阅者是以与话题内容对应的消息形式接收数据。为了执行订阅,订阅者几点在主节点上注册自己的话题等各种信息,并从主节点接收那些发布此节点要订阅的话题的发布者节点的信息。基于这个信息,订阅者节点直接联系发布者节点来接收消息。订阅者在节点中声明自己执行订阅的个体。单个节点可以成为多个订阅者。

发布和订阅概念中的话题是异步的,这是一种需要发送和接收数据的好方法。另外,由于它通过一次的连接,发送和接收连续的消息,所以它经常被用于必须连续发送消息的传感器数据

然而在某些情况下,需要一种共同使用请求和响应同步的消息交换方案,因此,ROS提供叫做服务service的消息同步方法。服务分为响应请求的服务器端和发送请求、接收响应结果的客户端组成。

与话题不同,服务是一次性的消息通信。当服务的请求和响应完成时,两个节点的连接被断开。

10、服务(service)

服务消息通信是服务客户端与服务服务器之间同步双向消息通信。其中服务客户端请求对应于特定目标的任务服务器,而服务服务器则负责服务器响应。

11、服务服务器(service server)

服务服务器是以请求作为输入,以响应作为输出的服务消息通信的服务器。请求和响应都是消息,服务器收到请求后,执行指定的服务,并将结果下发给服务客户端。服务服务器用于执行指定命令的节点。

12、服务客户端

服务客户端是以请求作为输入并以响应作为输出的消息服务通信的客户端。请求和响应都是消息,并发服务请求到服务服务器后接收其结果。服务客户端用于传达给定命令并接收结果值得节点。

13、动作(action)

动作是在需要向服务器那样的双向请求的情况下使用的消息通信方式,不同点在于处理请求之后需要很长的响应,并需要中途反馈值。动作文件也非常类似于服务,目标goal和结构result对应于请求和响应。此外,还添加了对应于中途的反馈feedback。它由一个设置动作目标goal和动作客户端action client和一个动作服务器action server组成,动作服务器根据目标执行动作,并发送反馈结果。动作客户端和动作服务器之间的进行异步双向消息通信

14、动作服务器 (action server)

动作服务器以动作客户端接收的目标作为输入作为输入,并以结果和反馈值作为输出的消息通信的服务器。在接收到来自客户端的目标值后,负责执行实际的动作。

15、动作客户端(action client)

动作客户端是以目标作为输出并以动作服务器的执行结果、反馈作为输入的消息通信客户端。它将目标交于动作服务器,接收结果和反馈,并给出下一个指示或取消目标。

16、参数(parameter)

ROS中的参数是指节点中使用的参数。可以把它想象成一个windows程序中的*.ini配置文件。这些参数是默认default设置的,可以根据需要从外部读取或者输入。尤其是,它可以通过使用外部的写入功能实时更改设置值,因此非常有用。例如可以指定与外部设备连接的PC的USB端口、相机校准值、电机速度和命令最大值、最小值设置等。

17、参数服务器(parameter server)

参数服务器是指在功能包中使用参数时,注册各参数的服务器。参数服务器也是主节点的一个功能。

18、catkin

catkin是ROS的构建系统。ROS的构建系统基本上使用CMake(cross platform make),并且在功能包的目录中的CMakeLists.txt文件中描述整个构建环境。在ROS中,将CMake修改成专为ROS定制的catkin系统。

catkin构建系统可以使我们更加方便地使用与ROS相关的构建、功能包管理及功能包之间的依赖关系等。目前来说,使用过ROS的话,需要使用catkin,而不是rosbuild(但可以单独安装这个ros包)。

19、rosbuild

ROS构建rosbuild是在catkin之前使用的构建系统,虽然仍然有一些用户可以使用,但这只是为ROS版本兼容性保留的,并不是官方推荐的。如果必须使用rosbuild来构建系统使用旧的功能包,建议将rosbuild改为catkin。【不推荐安装rosbuild功能包的方式】

20、roscore

roscore是运行ROS主节点的命令。也可以在另一台位于同一个网络内的计算机上运行它。但是,除了支持多roscore的某些特殊情况,roscore在一个网络中智能运行一个、运行ros时,使用ROS_HOSTNAME_URI变量中列出的URI地址和端口。如果用户没有设置,会使用当前本地IP作为URI地址并使用端口11311。

21、rosrun

是ROS的基本运行命令。它用于在功能包中运行一个节点。节点使用的URI地址将存储在当前计算机上的ROS_HOSTNAME环境变量作为URI地址,端口被设置为任意的固有值。

22、roslaunch

如果rosrun是运行一个节点的命令,nameroslaunch就是运行多个节点的概念。该命令允许运行多个确定的节点。

其他功能还包括一些专为执行具有诸多选项的节点的ROS命令,比如包括更改功能包参数或者节点名称、配置节点命名空间、设置ROS_ROOT和ROS_PACKAGE_PATH以及更改环境变量等。

roslaunch使用*.launch文件来设置可执行节点,它基于可扩展标记语言(XML),并提供XML标记形式的多种选项。

23、bag

用户可以保存ROS中发送和接收消息的数据,这时用于保存的文件格式称之为bag。是以*.bag作为扩展名。在ROS中,这个功能包可以用来存储信息并在需要时回放以前的情况。例如,在使用传感器执行机器人实验时,使用bag将传感器值以消息形式保存。有了这些保存的信息,即使不重复执行之前的实验,也能够通过回放保存的bag文件来反复利用当时传感器的值。尤其是,如果利用rosbag的记录回放功能,在开发那些需要反复修改程序算法的时候会非常有用。

24、ROS wiki

ROS的基本说明,网址为 http:/wiki.ros.org/,它解释了ROS提供的每个功能包和功能。这个维基界面描述了ROS的基本用法、每个功能包的简要说明、用到的参数、作者、许可证、主页、存储库和教程等内容。目前wiki上已经有超过17000页的内容。

25、存储库repositories

-每一个公开的包在功能包的wiki中都有一个存储库repository。存储库是存储功能包的网站的URL地址,并使用源代码管理系统svn hg git来管理问题、开发、下载等。许多当前可用的ROS功能包将GitHub用作存储库。

26、状态图

上面描述的节点、话题、发布者和订阅者之间的关系可以通过状态图graph直观的表示。它是当前正在运行的消息通信的图形表示。但不能为一次性服务创建状态图。通过rqt_graph功能包中的rqt_graph节点完成,有两种命令:rqt_graph和rosrun rqt_graph rqt_graph。

27、名称name

节点、参数、话题和服务都有名称即name。当使用主节点的参数、话题和服务时,向主节点注册该名称并根据名称进行搜索,然后发送消息。此外,name非常灵活,它们可以在运行时被修改。另外,对于一个节点、参数、话题和服务,也能给它设定多个不同的name。这种取名规则使得ROS适用于大型项目和复杂系统。

28、客户端库

ROS是一个客户端库client library,它为各种语言提供开发环境,以减少对所用语言的依赖性。主要客户端库包括C++、Python和Lisp。其他语言包括Java、Lua、.NET、EusLisp和R。为此,开发了诸如roscpp rospy roslisp rosjava roslua roscs roseus rosR PhaROS等客户端库。

29、URI

统一资源标识符是代表Internet上资源的唯一地址。该URI被用作Internet协议中的标识符,是在Internet上所需要的基本条件。

30、MD5

MD5(Message Digest algorithm)是128位密码散列函数。它主要用于检查程序或者文件的完整性,以查看它是否保持原样。在使用ROS的消息通信中,使用MD5来检验消息发送/接收的完整性。

31、RPC

远程过程调用,意味着远程计算机上的程序调用call另一台计算机中的子程序procedure。这个利用TCP/IP\IPX等传输协议的技术不需要程序员一一进行编程的情况下也能够允许计算机在另一个地址空间通过远程控制运行函数或者子程序。

32、XML

可扩展标记语言(Extensible Markup Language)是W3C推荐用于创建其他特殊用途标记语言的通用标记语言。它是通过使用标签来制定数据结构的语言之一。在ROS中用于.launch * .urdf package.xml等各个部分。

33、XMLRPC

XML远程过程调用,一种RPC协议。其编码形式采用XML编码格式,而传输方式采用既不保持连接状态、也不检查连接状态的请求响应方式的HTTP协议。XMLRPC是一个非常简单的约定,仅用于定义小数据类型或命令。所以它比较简答。

XMLRPC非常轻便,支持多种语言,非常适合支持各种硬件和语言的ROS。

34、TCP/IP

传输控制协议(TCP,transmission control protocol)是一种传输控制协议,通常被称为TCP/IP。从互联网的角度看它基于IP(internet protocol)且使用传输控制协议TCP,以保证数据正确传输,并且按照发送顺序进行发送/接收。

TCPROS消息和服务中使用的基于TCP/IP的消息方式称之为TCPROS,而UDPROS消息及服务中使用的基于UDP的消息方式称之为UDPROS。在ROS中常用的是TCPROS。

35、CMakeLists.txt

ROS构建系统的catkin基本上使用了CMake,因此在功能包目录的CMakeLists.txt文件中描述着构建环境。

36、package.xml

包含功能包信息的XML文件,描述功能包名称、作者、许可证和依赖包。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180805G08O8J00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券