ROS 会创建一个连接到所有进程的网络。在系统中的任何节点都可以访问此网络,并通过该网络与其他节点交互,获取其他节点发布的信息,并将自身数据发布到网络上。
在这一层级中最基本的概念包括节点 、节点管理器 、参数服务器 、消息 、服务 、主题 和消息记录包,这些概念都以不同的方式向计算图级提供数据:
****节点(Node)****节点是主要的计算执行进程。如果想要有一个可以与其他节点进行交互的进程,需要创建一个节点,并将此节点连接到 ROS 网络。通常情况下,系统包含能够实现不同功能的多个节点。最好让每一个节点都具有特定的单一的功能,而不是在系统中创建一个包罗万象的大节点。
节点都是各自独立的可执行文件,能够通过主题、服务或参数服务器与其他进程(节点)通信。ROS 通过使用节点将代码和功能解耦,提高了系统容错能力和可维护性,使系统简化同时,节点允许了 ROS系统能够布置在任意多个机器上并同时运行。
****节点在系统中必须有唯一的名称。****节点使用特定名称与其他节点进行通信而不产生歧义。节点可以使用不同的库进行编写,如 roscpp和rospy。
ROS 提供了处理节点的工具,如rosnode。rosnode 是一个用于显示节点信息的命令行工具,例如,列出当前正在运行的节点等。支持的命令如下所示:
rosnode info node 输出当前节点信息。
rosnode kill node 结束当前运行节点进程或发送给定信号。
rosnode list 列出当前活动节点。
rosnode machine hostname 列出某一特定计算机上运行的节点或列出主机名称
rosnode ping node 测试节点间的连通性。
rosnode cleanup 将无法访问节点的注册信息清除。
****节点管理器(Master)****节点管理器用于节点的名称注册和查找等。如果在整个ROS 系统中没有节点管理器,就不会有节点、服务、消息之间的通信。需要注意的是,由于ROS本身就是一个分布式网络系统,可以在某一台计算机上运行节点管理器,在其他计算机上运行由该管理器管理的节点。
****参数服务器(Parameter Server)****参数服务器能够使数据通过关键词存储在一个系统的核心位置。通过使用参数,就能够在运行时配置节点或改变节点的工作任务。
****消息(Message)****节点通过消息完成彼此的沟通。消息包含一个节点发送到其他节点的数据信息。ROS 中包含很多种标准类型的消息,同时你也可以基于标准消息开发自定义类型的消息。
一个节点通过向特定主题发布消息,从而将数据发送到另一个节点。消息具有一定的类型和数据结构,包括ROS提供的标准类型和用户自定义类型。
消息的类型在ROS 中按照以下标准命名方式进行约定:功能包名称 / .msg 文件名称,
例如,std_msgs/msg/String.msg的消息类型是std_msgs/String。
ROS使用命令行工具rosmsg来获取有关消息的信息。惯用参数如下所示:
rosmsg show 显示一条消息的字段。
rosmsg list 列出所有消息。
rosmsg package 列出功能包的所有消息。
rosmsg packages 列出所有具有该消息的功能包
rosmsg users 搜索使用该消息类型的代码文件。
rosmsg md5 显示一条消息的MD5求和结果。
****主题(Topic)****主题是由 ROS 网络对消息进行路由和消息管理的数据总线。每一条消息都要发布到相应的主题。当一个节点发送数据时,我们就说该节点正在向主题发布消息。
节点可以通过订阅某个主题,接收来自其他节点的消息。一个节点可以订阅一个主题,而并不需要该节点同时发布该主题。这就保证了消息的发布者和订阅者之间相互解耦,完全无需知晓对方的存在。主题的名称必须是独一无二的,否则在同名主题之间的消息路由就会发生错误。
主题是节点间用来传输数据的总线。主题 是ROS中的一种多对多的通信机制,通过主题进行消息路由不需要节点之间直接连接这就意味着发布者和订阅者之间不需要知道彼此是否存在。同一个主题也可以有很多个订阅者。
每个主题都是强类型的,发布到主题上的消息必须与主题的 ROS 消息类型相匹配,并且节点只能接收类型匹配的消息。一个节点要想订阅一个主题,它们就必须具有相同的消息类型。
ROS 的主题可以使用TCP/IP 和UDP 传输。
基于TCP 传输称为TCPROS ,它使用TCP/IP长连接。这是ROS默认的传输方式。
基于UDP传输称为UDPROS ,它是一种低延迟高效率的传输方式,但可能产生数据丢失。所以它最适合于远程操控任务。
ROS 有一个rostopic工具用于主题操作。它是一个命令行工具,允许获取主题的相关信息或直接在网络上发布数据。此工具的参数如下:
rostopic bw /topic 显示主题所使用的带宽
rostopic echo /topic 将消息输出到屏幕。
rostopic find message_type 按照类型查找主题
rostopic hz /topic 显示主题的发布率
rostopic info /topic 输出活动主题、发布的主题、主题订阅者和服务的信息。
rostopic list 输出活动主题的列表。
rostopic pub /topic type args 将数据发布到主题。允许直接从命令行中对任意主题创建和发布数据。
rostopic type /topic 输出主题的类型,或者说主题中发布的消息类型。
服务(Service) 在发布主题时,正在发送的数据能够以多对多的方式交互。但当需要从某个节点获得一个请求或应答时,就不能通过主题来实现了。在这种情况下,服务能够允许我们直接与某个节点进行交互。
此外,服务必须有一个唯一的名称。当一个节点提供某个服务时,所有的节点都可以通过使用 ROS 客户端库所编写的代码与它通信。
消息记录包(Bag) 消息记录包是一种用于保存和回放 ROS 消息数据的文件格式。
消息记录包是一种用于存储数据的重要机制。它能够获取并记录各种难以收集的传感器数据。可以通过消息记录包反复获取实验数据,进行必要的开发和算法测试在使用复杂机器人进行实验工作时,需要经常使用消息记录包。