前言:学习ROS(Robot Operating System)一个很关键的部分就是理解它的相关术语,回顾自己入门ROS的经历,对此深有感慨.
功能包(package): package是ROS机器人软件开发中最基本的单元,一个功能包可以包含一个或者多个节点[node,可运行的程序]
、库文件和配置文件等,它们组织在一块形成一个单元.
功能包清单(package.xml): package.xml是功能包中的一个文件,它包含了有关该功能包、功能包的作者、许可证、该功能包依赖等信息,通常该文件是由catkin_create_pkg工具在创建功能包的时候自动创建的,与它一同被创建的还有CMakeLists.txt文件,在编译和运行该功能包中的节点之前,我们需要根据节点的需要修改package.xml和CMakeLists.txt文件,否则编译和运行节点时会出错.
元功能包(metapackage): 一个元功能包包含有多个功能包,例如navigation导航元功能包,包含了十几个具有特定功能的功能包,元功能包是一个虚拟的功能包,它并不包含任何的源码或者功能包中才有的典型文件.
元功能包清单(package.xml): 注意,元功能包清单和功能包清单的文件名是相同的,都叫做package.xml文件,表面上看它们并没有区别,其实内容上主要有两点区别:
标签,而功能包清单文件中是有的.
标签中包含
子标签,而功能包清单文件中是没有的.消息(.msg):消息是是一种数据块类型,消息对象由一个或者多个消息元素组合而成的,有点像Python中的列表,一个消息对象包含了一个或者多个相同或者不同类型的数据,数据有两种定义方式.
一种是通过字段来定义变量:.
e.g.
int32 x
int32 y
float32[] ranges
float32[10] points
一种是通过字段来定义常量:
e.g.
int32 X=123
int32 Y=-123
通过字段定义的消息元素包括字段类型和字段名。
其中字段类型可以是:
int8 uint8 int16 uint16 int32 uint32 int64 uint64 float32 float64 string time duration
)geometry_msgs/PoseStamped
)Note: time和duration内置类型不能是常量.
消息元素的值在目标语言中的调用方式。
例如在Python中调用消息对象obj中的pan消息元素可以这样操作:obj.pan
. 消息元素的字段名称只能是由字母、数字或者下划线组成,要注意避开cpp和python等编程语言的关键字.
我们可以自定义消息类型,自定义的消息文件以.msg
为扩展名,并将该文件保存到功能包的msg
文件夹中.
服务(.srv): ROS中的服务是一种由服务客户端与服务服务器之间进行进行请求和响应的双向通信. 请求和响应的数据类型由以.srv
为扩展名的文件定义,该文件存储在功能包的srv
文件夹中.
节点(node):是使用ROS客户端库执行计算的进程,一个节点可以通过话题、服务和参数与其他的节点进行通信。节点ROS中运行的最小处理器单元,可以看作是一个可执行程序.节点的设计要注重功能单一,以便在复杂的系统中方便调试和复用节点.
节点管理器(master):节点管理器用于提供发布者节点和订阅者节点的注册服务,方便发布和订阅相同消息的两个节点之间建立连接并进行单向通信.
参数服务器(parameter server):参数服务器用来存储参数,任何节点可以调用存储于参数服务器上的参数,甚至修改和删除参数.
话题(topic):话题是被命名的单向通信的总线(话题的名称具有唯一性).
发布者(publisher):通过话题发送消息给订阅者(subscriber)节点的节点.
订阅者(subscriber):通过话题接收发布者(publisher)节点发送过来的消息的节点.
发布(publish):发布者(publisher)节点通过话题发布消息给订阅者(subscriber)节点的过程.
订阅(subscribe):订阅者(subscriber)节点通过话题接收消息的过程.
服务(service):服务是被命名的双向同步通信的总线(服务的名称具有唯一性).
服务服务器(service server):服务服务器是响应服务客户端请求的节点.
服务客户端(service client):服务客户端是向服务服务器发送请求命令的节点.
请求(request):服务客户端向服务服务器发送指令的过程.
响应(response):服务服务器向服务客户端发送数据的过程.
动作(.action):动作文件包含三个部分,分别是目标(goal)、结果(result)和反馈(feedback),这三部分之间分别用---
分隔开来.
动作(action):是一种命名的异步双向通信的总线,在该方法中,我们可以抢占正在运行的请求,并在请求未按时完成时开始发送另一个请求. 是类似于服务的一种通信方式,不同之处在于动作服务器响应请求的过程需要很长时间,并且需要中途进行反馈,动作文件(.action)类似于服务文件(.srv),其中动作文件中的目标(goal)对应于服务文件中的请求(response),动作文件中的结果(result)对应于服务文件中的响应(response). 此外动作文件的最后还添加了一个中途的反馈(feedback)
动作服务器(action server):动作服务器根据动作客户端发送的目标(goal)执行动作,并在执行动作的过程中发送反馈,执行完动作后还要发送执行的结果给动作客户端.
动作客户端(action client):动作客户端通过动作(一种被命名的异步双向通信的总线)向动作服务器发送动作(动作服务器要执行的动作)目标.