如何在ROS2 Humble中正确运行Python节点

13次阅读

如何在ROS2 Humble中正确运行Python节点

本文详解在ros2 humble环境下构建并运行python节点的标准化流程,重点解决因未正确source工作空间导致的“command not found”或“node not found”问题,并纠正直接执行脚本等常见误区。

在ROS2中,python节点不能也不应通过直接调用.py文件(如 python3 py_node.py)或手动执行可执行脚本的方式启动——这会绕过ROS2的依赖解析、参数管理、生命周期控制及节点命名空间等核心机制,极易导致ros2 node list不可见、话题无法通信、参数加载失败等问题。

✅ 正确做法分为三步:

  1. 确保包已正确构建
    在你的工作空间根目录(例如 ~/ros2_ws)下执行:

    cd ~/ros2_ws colcon build --packages-select my_py_pkg

    构建成功后,可执行文件将生成在 install/my_py_pkg/lib/my_py_pkg/py_node,但切勿直接调用该路径

  2. Source 工作空间环境
    构建完成后,必须 source 对应的 setup.bash 文件,使ROS2能识别新包及其可执行节点:

    source ~/ros2_ws/install/setup.bash

    ⚠️ 注意:若执行 source ~/.bashrc 报错,请检查 .bashrc 中是否重复/错误地添加了 source /opt/ros/humble/setup.bash 或其他冲突的 setup 脚本;建议仅在 .bashrc 末尾保留一行标准 ROS2 初始化(如 source /opt/ros/humble/setup.bash),而工作空间的 source 应在每次终端会话中显式执行(或写入当前终端的临时配置),避免环境污染。

    立即学习Python免费学习笔记(深入)”;

  3. 使用 ros2 run 启动节点
    确认环境已 source 后,使用标准 ROS2 CLI 启动:

    ros2 run my_py_pkg py_node

    其中:

    • my_py_pkg 是 package.xml 中定义的
    • py_node 是 setup.py(或 CMakeLists.txt 配合 ament_python)中注册的可执行入口点名称(即 console_scripts 中声明的 key,例如 ‘py_node = my_py_pkg.my_node:main’)。

? 验证是否成功:

ros2 node list        # 应看到 /py_node ros2 topic list       # 查看节点发布/订阅的话题

? 补充说明:

  • 若使用 setup.py 定义入口点,请确保其格式正确:
    entry_points={     'console_scripts': [         'py_node = my_py_pkg.my_node:main',  # module:callable     ], },
  • 不推荐使用 ros2 launch 启动单个Python节点(除非需配置参数/重映射/生命周期),但对于生产部署,建议后续迁移到 launch.py 文件以提升可维护性。

总结:ROS2 的设计哲学是“环境驱动发现”,而非路径驱动执行。始终遵循 colcon build → source install/setup.bash → ros2 run 这一黄金流程,即可规避90%以上的节点启动问题。

text=ZqhQzanResources