# ROS Python节点如何订阅多个Topic

> 原文链接：https://robotics.hellobike.com/pitfalls/2019-01-24-robotics-se-6652
> 频道：pitfalls | 更新日期：2019-01-24 | 标签：auto, stackexchange, ros, python
> 核心摘要：在同一 ROS Python 节点中为每个 Topic 分别创建 rospy.Subscriber 并使用 rospy.spin() 保持运行。

# ROS Python节点如何订阅多个Topic

::: v-pre
> 本文由 AI 根据公开内容整理，可能有误，请以原文为准：[How to get a python node in ROS subscribe to multiple topics?](https://robotics.stackexchange.com/questions/6652/how-to-get-a-python-node-in-ros-subscribe-to-multiple-topics)（Robotics Stack Exchange #6652）

**状态**：已解决

## 问题

提问者不清楚 Python 编写的 ROS 节点是否能同时订阅多个 Topic、发布到多个 Topic，担心只能像循环一样一次监听一个来源。

## 环境

Linux / ROS 机器人软件与控制通用开发环境

## 解决办法

1. 在 `rospy.init_node('node_name')` 后，为每个 Topic 分别添加订阅，例如 `rospy.Subscriber("chatter1", String, callback1)` 和 `rospy.Subscriber("chatter2", String, callback2)`。
2. 为不同 Topic 定义对应回调，例如 `callback1(data)`、`callback2(data)`，在回调中处理 `data.data`。
3. 调用 `rospy.spin()` 防止节点退出；原文说明 ROS Python 节点回调会在独立线程中执行，属于事件驱动模型。

原问题作者：Zoltan Fedor；采纳答案作者：Ben。原内容依 CC BY-SA 4.0 授权，本页摘要同样依 CC BY-SA 4.0 授权。
:::

## 原始参考来源 (Sources)

- [Robotics Stack Exchange #6652：How to get a python node in ROS subscribe to multiple topics?](https://robotics.stackexchange.com/questions/6652/how-to-get-a-python-node-in-ros-subscribe-to-multiple-topics)