1.3 理解ROS计算图级别
ROS中的计算是使用ROS节点网络完成的。这种计算网络称为计算图。计算图中的主要概念是ROS的节点、节点管理器、参数服务器、消息、主题、服务和消息记录包。计算图中的每一个概念都以不同的方式构成了这个图。
ROS通信相关的功能包[包括核心客户端库(如roscpp和rospython),以及主题、节点、参数和服务等概念的实现]都包含在一个名为ros_comm(http://wiki.ros.org/ros_comm)的栈中。
该栈还包括rostopic、rosparam、rosservice和rosnode等工具,用于补充前面的概念。
ros_comm栈包含ROS通信中间件包,这些包统称为ROS图层,如图1.6所示。
图1.6 ROS图层的结构
ROS图的概念介绍如下。
●节点:节点是具有计算功能的进程。每个ROS节点都是使用ROS客户端库编写的。使用客户端库API,我们可以实现不同的ROS功能,例如节点之间的通信方法,这在机器人的不同节点之间必须交换信息时特别有用。ROS节点的目标之一是构建简单的流程,而不是具有所有所需功能的大型流程。由于结构简单,因此ROS节点易于调试。
●节点管理器:ROS节点管理器为其余节点提供名称注册和查找过程。如果没有ROS节点管理器,节点将无法找到对方,也无法交换消息或调用服务。在分布式系统中,我们应该在一台计算机上运行节点管理器,其他远程节点可以通过与该节点管理器通信找到对方。
●参数服务器:参数服务器允许你将数据存储在中心位置。所有节点都可以访问和修改这些值。参数服务器是ROS节点管理器的一部分。
●主题:ROS中的每条消息都使用被称为主题的命名总线来传输。当一个节点通过一个主题发送消息时,我们可以说该节点正在发布一个主题。当一个节点通过一个主题接收到一条消息时,我们可以说该节点订阅了一个主题。发布节点和订阅节点不知道彼此的存在。我们甚至可以订阅一个可能没有任何发布者的主题。简而言之,信息的产生和接收是解耦的。每个主题都有一个唯一的名称,任何节点都可以访问该主题并通过它发送数据,只要它们具有正确的消息格式。
●日志记录:ROS提供了一个日志记录系统,用于存储数据(例如传感器数据),这些数据可能很难收集,但对于开发和测试机器人算法是必要的。这些文件被称为bagfile。当我们处理复杂的机器人机制时,bagfile非常有用。
图1.7显示了节点之间如何使用主题相互通信。
如你所见,主题用矩形表示,而节点用椭圆表示。此图中不包括消息和参数。这些类型的图可以使用名为rqt_graph的工具生成(http://wiki.ros.org/rqt_graph)。