
本文详解在ros2 humble环境下构建并运行python节点的标准化流程,重点解决因未正确source工作空间导致的“command not found”或“node not found”问题,并纠正直接执行脚本等常见误区。
在ROS2中,Python节点不能也不应通过直接调用.py文件(如 python3 py_node.py)或手动执行可执行脚本的方式启动——这会绕过ROS2的依赖解析、参数管理、生命周期控制及节点命名空间等核心机制,极易导致ros2 node list不可见、话题无法通信、参数加载失败等问题。
✅ 正确做法分为三步:
-
确保包已正确构建
在你的工作空间根目录(例如 ~/ros2_ws)下执行:cd ~/ros2_ws colcon build --packages-select my_py_pkg
构建成功后,可执行文件将生成在 install/my_py_pkg/lib/my_py_pkg/py_node,但切勿直接调用该路径。
-
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免费学习笔记(深入)”;
-
使用 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')。
- my_py_pkg 是 package.xml 中定义的
? 验证是否成功:
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%以上的节点启动问题。










