睡前ROS学习之ROS node && ROS Master
ROS 节点和ROS Master是ROS 中两个重要的组件:
####ROS Master:
当任意的节点在ROS系统中启动的时候会寻找ROS Master并将其名字注册到ROS Master上。因此ROS Master包含了整个系统上所有Node的信息,
当任何一个节点信息改变后将会产生一个回调,并且用最新的信息对齐进行更新,这些信息往往是用于节点间连接所需要的必要信息。当一个节点开始发布一个topic,节点将会将topic的名字和数据类型信息传递给ROS Master,ROS Master将会检查是否有其他的节点订阅了这个topic,如果有任何的节点订阅了这个topic,ROS Master将会共享发布者的消息给订阅者节点。
在获取到节点的详细信息后,两个节点将会使用TCPROS协议进行交互,当两个节点链接到一起后,ROS Master将不再其作用,我们可以按照我们的意愿停止发布者或者订阅者节点。
ROS_MASTER_URI 环境变量包含ROS Master的IP地址以及端口信息,使用这些信息ROS节点可以定位到ROS Master位置,当这两个参数不对的话两个节点将不会成功连接。如果ROS运行在单个系统中,我们可以使用localhost的IP,但是在分布式系统我们必须准确定义这个环境变量,只有这样远程的节点之间才能够相互通信,在ROS系统中一般我们只需要一个ROS Master,在分布式系统ROS Master必须位于所有节点都能ping到的机器上。
####ROS Node:
一个ROS机器人应用通常是由很多的ROS节点构成,每个节点之间使用ROS Topics,Services和Paremeter Service进行交互。
使用节点有如下优点:
- 使用节点可以提高整个系统的错误容忍度,即使一个节点挂掉了,整个机器人系统仍然可以工作
- 节点可以降低系统的复杂度,增加系统的可调试性
每个运行的节点都拥有一个名字用于同系统的其他部分区分开来。
ROS 还提供了一个rosnode用于操作ros节点:
rosnode info [节点名] 这个用于打印节点的信息 |
rosnode kill [节点名] 这个用于杀死正在运行的节点
rosnode list 用于列出所有正在运行的节点 |
rosnode machine [机器名] 用于列出在一个机器上运行的所有节点 |
rosnode ping 这个用于检查一个节点的连通性 |
rosnode cleanup 这个用于清除用不到的节点 |