在机器人操作系统ROS中,每一个运行的程序块被称为一个节点(Node)。把这个节点看做是一个黑盒子,黑盒子可以有输入和输出。不同节点之间的连接就可以形成数据和指令的传输,最终控制机器人来实现指定的动作。
若黑盒子只有输出,那么它被叫做发布者(Publisher);如果黑盒子只有输入,那么它被叫做订阅者(Subscriber)。通常来说,一个节点既有输出,即传递信息到下一级处理单元,也有输入,即接收其它节点传给它的数据。
节点之间的通信是通过话题(Topic)来进行的。在这里可以把话题看做是一个汇集特定消息的网站。比如有个网站叫机器人参数,一个节点如果想发布关于机器人速度的消息(Message),就把这个消息晒到机器人参数这个网站上。此时,如果另一个节点想知道机器人的速度,它就要订阅这个网站上来得到这个消息。如果有很多节点都订阅了这个网站,就都可以得到有关机器人参数的消息了。需要指出的是,不是所有网站上的消息都需要被订阅,正如我们在生活中很多网站是不会去的,我们只会关心怎样得到想得到的信息。因此,这种通信机制降低了各个节点之间的耦合度,具有很高的灵活性