主节点(master):负责节点到节点的消息与通信
用roscore命令来运行主节点 节点只有在需要注册自己信息或向其他节点发送请求时才能访问主节点
节点(node):是指ros中运行的最小处理器单元 可以把它看作一个可执行程序 节点在运行的同时 需要向主节点注册节点名称/发布者/订阅者/服务服务器/服务客户端的名称
功能包(package)是构成ros的基本单元 ros的应用程序是以功能包为单位开发的 功能包必须包含至少一个节点或拥有运行其他功能包节点的配置文件 它还包用于各种进程的ROS依赖库/数据集和配置文件
元功能包(metapackage):是一个具有共同目的的功能包的集合 例如导航元功能包包含很多个功能包
消息(message):节点之间通过消息来接收和发送数据 消息是诸如integer floating point boolean等类型的变量 根据使用情况使用 单项消息发送/接受方式的话题(topic) 双向消息请求或响应方式的服务(service)
话题(topic):话题就是故事 订阅者和发布者通过主节点取得链接之后 它们通过话题发送和接受消息
发布与发布者:发布是指以与话题的内容相对应的消息的形式发送数据(没太读懂) 为了执行发布,发布者节点在主节点上注册自己的话题等多种信息,并向希望订阅的订阅者节点发送消息
订阅与订阅者:订阅是指以与话题内容对应的消息的形式接收数据 为了执行订阅 订阅者节点要在主节点上注册自己的话题等多种信息 并从主节点接受发布此节点要订阅的话题的发布者节点的信息
发布和订阅概念中的话题是异步的 服务是一种消息同步方法
服务:服务消息通信是服务客户端(service client)和服务服务器(service server)之间的同步双向消息通信
服务服务器:以请求作为输入,以响应作为输出的服务消息通信的服务器 服务和响应都是消息 服务服务器在接受请求之后,执行相应的服务,然后把执行结果反馈给服务客户端,服务服务器用于执行指定命令的节点
服务客户端:以请求作为输出 以响应作为输入的服务消息通信的客户端 服务客户端用于传达给定命令并接受结果值的节点
动作(action):动作是在需要像服务那样的双向请求的情况下使用的消息通信方式,不同是处理请求之后需要很长的响应,并且需要中途反馈值。动作中的目标(goal)和结果(result)对应服务中的请求和响应 此外 还添加了对应于中途的反馈(feedback)它由一个设置动作目标的动作客户端和一个执行动作的动作服务器组成
动作客户端和动作服务器是异步双向消息通信
话说为什么服务是同步 发布订阅和动作是异步???
参数服务器(parameter server):是指在功能包中使用参数时,注册各参数的服务器。参数服务器也是主节点的一个功能。
catkin
catkin是指ROS的构建系统。catkin实际上就是专为ROS定制的CMake构建系统。
roscore
roscore是运行主节点的命令 除了某些特殊情况 一个网络只能运行一个roscore 运行ROS时,将使用用户在ROS_MASTER_URI变量在中列出的URI地址和端口。如果用户没有设置,会使用本地IP作为URI地址并使用端口11311 例如我运行roscore会显示 ROS_MASTER_URI=http://linxiaorui:11311/
rosrun
rosrun是ROS的基本运行命令。它用于在功能包中运行一个节点。节点使用的URI地址将储存在当前运行节点的计算机上的ROS_HOSTNAME环境变量作为URI地址,端口被设置为任意的固有值
roslaunch
如果rosrun是运行一个节点的命令,那么roslaunch是运行多个节点的概念。roslaunch使用*.launch文件来设置可执行节点,它是基于可扩展标记语言(XML),并提供XML标记形式的多种选项。
bag
用来保存ROS中发送和接收消息的数据 可以回放传感器数据 避免多次重复实验
存储库
每一个公开的功能包在该功能包的wiki上指定一个存储库(repository)存储库用来存放功能包的URL地址 并使用源代码管理系统(如github)来管理问题、开发、下载等。许多当前可用的功能包将gihub作为存储库。下图是我在ros.wiki上随便找的一个pakage 可以看到它的repository中存储了pakeage源代码的github网址:
状态图:上述描述的节点、话题、发布者、订阅者之间的关系可以通过状态图直观的表示。不能为一次性服务创建状态图。执行它时通过运行rqt_graph功能包的rqt_graph节点完成的。有两种执行命令:
rqt_graph
rosrun rqt_graph rqt_graph
URI:统一资源标识符(Uniform Resource Identifier)是代表Internet上资源的唯一地址。
MD5:Message-Digest algorithm 5,是128位密码散列函数。它主要用于检查程序或文件的完整性,以查看它是否保持原样。在使用ROS消息的通信中,使用MD5来检查消息发送/接收的完整性。
RPC:远程过程调用(Remote Procedure Call),意味着远程计算机上的程序调用另一台计算机中的子程序。
XMLRPC:是一种RPC协议,其编码形式采用XML编码格式,而传输方式采用即不保持链接状态、也不检查链接状态的tingi和响应方式的HTTP协议。
TCPROS:消息和服务中使用的基于TCP/IP的消息方式成为TCPROS,而UDPROS消息及服务中使用的基于UDP的消息方式称为UDPROS。
XML:可扩展标记语言(Extensible Markup Language)。它是通过使用标签来指定数据结构的语言之一。在ROS中用于*.launch、*.urdf和package.xml等部分。
package.xml:包含功能包信息的XML文件,描述功能包名称、作者、许可证和依赖包。
这是我打开的iai_kinect2功能包下的package.xml文件:
发布者、订阅者、服务服务器、服务客户端、动作服务器、动作客户端都存在于不同的节点中,这些节点需要链接才能进行消息通信。主节点是帮助节点之间的链接。主节点就像节点名称、话题和服务、动作名称、URI地址和端口以及参数们的名称服务器。
消息:消息是用于节点之间的数据交换的一种数据形式。ROS中常用的头(header、std_msgs/Header)也可以作为消息来使用。这些消息又两种类型组成:字段类型(fieldtype)和字段名称(fieldname)。
字段类型应填入ROS数据类型,字段名称要填入指示数据的名称。