学习使用ros的时候遇到的一个很“实际”的问题:一个节点怎样通过topic向另一个节点发送消息呢?
其实已有教程通过写简单发布器和订阅器来介绍如何利用topic进行节点间通信了:ROS与Python入门教程-写简单发布器和订阅器
看起来一个很简单的操作,我却想不通一些问题:
在talker.py里面实现了定义topic的publisher、定义了节点、发布消息这三件事,为什么topic和node要在一个程序里面定义,topic和node不应该是相对比较独立的两个东西吗?
命令行里面通过'rostopic pub'不是可以直接从topic发布msg吗?那么应该可以把topic的定义单独用一个程序实现,这样的话应该可以单独“启动”一个topic,但是我却没找到这种方法。
难道topic是必须由一个node来发布?这样的话node结束时topic不也没了?一个topic不是应该可以有多个订阅者和发布者吗?
(这个时候我对发布者、话题、订阅者的关系理解还比较抽象,认为topic是一个“中间商”,发布者和订阅者不需要直接接触,而是分别通过topic来发出和接收msg,topic就像是中间的一个buffer)
自己的理解和实际的现象产生了矛盾,使我很困惑。
于是尝试去了解ros的通信原理。。。
在阅读了两篇文章后,才发现机制不是原来想象的那么简单。