ROS 的核心是node之间的通信。node(节点)是使用 ROS 中继设备通信的 ROS 程序。一个 node 的启动是独立于其他 node 的,而且 node 启动的顺序是任意的。在一台计算机上可以运行多个 node,node 也可以分布式地运行在计算机网络上。一个 node 能真正体现其价值的时候是与其他 node 通信的时候。
node 之间的通信又包括这些概念:topic(话题),messages(消息),roscore,publishers(发布者),subscribers(订阅者),service(服务)。节点之间的所有通信都是串行网络通信。publisher 发布 messages,messages 是可以使用关联密钥解析的数据包。 由于每个 message 都是作为比特流接收的,因此有必要通过密钥(message 的数据类型)以了解如何解析这些比特流并重建相应的数据结构。比如说,有个 messages 的数据类型是 Float64,这个数据类型是 ROS 的 std_msgs 预定义的一种 message 数据类型,此时 publisher 将要发布的浮点数 message 打包到 64 位的比特流中,subscriber 则按照 Float64 的数据类型将比特流解析成原来的浮点数 message。
当 publisher 将消息发布了之后,所有需要这种消息的 subscribers 节点都可以订阅这种消息。此时 subscribers 节点要建立已与发布数据之间连接。 通常,发布的数据来自不同的节点。 之所以会发生这种情况,是因为这些发布者由于软件的运行而发生了变化,或者因为某些发布者节点在某些情况下和一些订阅者节点