多机器人系统、人机交互与软件
发布–订阅模式
发布–订阅模式,常被简称为 pub/sub,是一种简单而强大的方式,让程序之间能共享信息,而无需彼此直接“接线”相连。它不是让一个程序按名字去调用另一个程序,而是:某份数据的生产者只管把它发到一个有名字的频道上,这个频道叫做“主题”,而任何关心这个主题的程序都会悄悄地“在一旁听着”,并收到一份副本。生产者就是发布者;每个收听者就是订阅者。其妙处在于,双方都不需要知道对方是谁、有多少个,甚至不需要知道究竟有没有人在听。
一个很贴切的日常比喻是杂志。出版社印出一期,以某个刊名寄送出去——比如一本关于园艺的周刊。凡是订了这个刊名的订户,每一期都会被送到家里;杂志社从不需要掌握每位读者每天身在何处,读者也从不打电话到编辑部去要内容。新读者可以订阅、老读者可以退订,谁都不会打扰到别人。在机器人里,一个摄像头节点可能把图像发布到某个主题上,而人脸检测程序、录像程序和显示程序都订阅同一个主题,各自拿到每一帧——而且你日后还能加上第四个收听者,完全不必去动摄像头的代码。
正是这种“松耦合”——程序之间靠主题相连,而非被彼此绑死——使得 pub/sub 成为像 ROS 这样的机器人软件的骨干。它让机器人的众多部件能各自独立地开发、启动、停止和替换,也让人很容易接进某条数据流,仅仅为了观察或调试,而不会扰动整个流动。
一台机器人的轮速编码器把速度读数发布到一个主题上。导航节点和一个日志工具都订阅了它;后来,工程师又加了一个实时仪表盘作为第三个订阅者——而轮子那边的程序自始至终都没有改动。
一个发布者,多个订阅者——可以自由地增减收听者。
pub/sub 是一种单向广播:它非常适合像传感器数据这样持续不断的数据流,但当一个程序需要让另一个程序直接回答一个问题时,机器人会改用另一种“请求–应答”的方式。
又称
另见