ROS2 Foxy中能否为Python节点设置独立目录?
ROS2 Foxy中为Python节点设置独立目录的解决方案
可以在ROS2 Foxy中为Python节点设置独立目录,你遇到的ModuleNotFoundError是因为nodes目录不在Python包的默认导入路径里——ROS2默认只识别与包名同名的顶层子目录(即python_pkg/python_pkg/)下的模块。下面提供两种可行的解决方法:
方法一:调整目录结构(推荐)
把nodes目录移到与包名同名的子目录下,调整后的目录结构如下:
python_pkg/ │ ├─ python_pkg/ │ ├─ __init__.py │ ├─ my_module.py │ ├─ hello_world.py │ └─ nodes/ │ ├─ __init__.py │ └─ simple_node.py | └─ ...
然后修改setup.py中的entry_points,将节点路径改为包内路径:
setup( name="python_pkg", ... entry_points={ 'console_scripts': [ 'hello_world = python_pkg.hello_world:main', 'simple_node = python_pkg.nodes.simple_node:main', ], }, )
方法二:修改setup.py配置(无需调整目录)
如果不想改动现有目录结构,需要在setup.py中明确指定要包含的包以及包的查找路径:
setup( name="python_pkg", ... packages=['python_pkg', 'nodes'], # 包含原包和nodes目录作为子包 package_dir={'': '.'}, # 告诉setuptools在当前根目录下查找这些包 entry_points={ 'console_scripts': [ 'hello_world = python_pkg.hello_world:main', 'simple_node = nodes.simple_node:main', ], }, )
后续操作
无论使用哪种方法,修改完成后都需要重新编译包并source工作空间:
colcon build --packages-select python_pkg source install/setup.bash
之后再执行ros2 run python_pkg simple_node就能正常运行节点了。
内容的提问来源于stack exchange,提问作者Androvich
相关产品推荐
相关产品推荐

