You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ROS2订阅节点集成YOLOv5遇模块缺失问题及外部算法集成咨询

ROS2中集成YOLOv5解决ModuleNotFoundError的方案

问题核心原因

ROS2的Python节点执行上下文与ROS1存在差异:ROS1会直接从脚本所在目录加载同级依赖,而ROS2经colcon编译后,可执行文件会被放到install/<package_name>/lib/<package_name>/路径下,导致节点脚本无法直接找到同级的yolov5文件夹,从而触发ModuleNotFoundError: No module named 'yolov5'。

具体解决步骤

1. 规范包目录结构

确保你的ROS2包结构符合以下格式,让yolov5源码文件夹与节点脚本处于同一Python包目录下:

yolov5_detect/
├── yolov5_detect/
│   ├── __init__.py
│   ├── webcam_yolo_sub.py  # 你的订阅节点脚本
│   └── yolov5/             # YOLOv5源码文件夹(需包含__init__.py)
├── setup.py
├── package.xml
└── ...

2. 修改setup.py,将yolov5纳入安装资源

ROS2通过setup.py管理包的安装资源,需配置将yolov5文件夹同步安装到节点执行路径下。修改setup.py的相关字段:

from setuptools import setup
import os

package_name = 'yolov5_detect'

setup(
    name=package_name,
    version='0.0.0',
    packages=[package_name],
    # 配置package_data,将yolov5下所有文件纳入安装
    package_data={
        package_name: ['yolov5/**/*'],
    },
    data_files=[
        ('share/ament_index/resource_index/packages',
            ['resource/' + package_name]),
        ('share/' + package_name, ['package.xml']),
    ],
    install_requires=['setuptools'],
    zip_safe=True,
    maintainer='Jun Meng',
    maintainer_email='your_email@example.com',
    description='YOLOv5 detection node for ROS2',
    license='Apache License 2.0',
    tests_require=['pytest'],
    entry_points={
        'console_scripts': [
            'webcam_yolo_sub = yolov5_detect.webcam_yolo_sub:main',
        ],
    },
)

3. 调整节点脚本中的导入路径

将原有的import yolov5改为基于ROS2包的相对或绝对导入:

# 相对导入(推荐,适合同包内模块)
from .yolov5 import detect

# 或绝对导入
import yolov5_detect.yolov5 as yolov5

如果脚本中需要加载YOLO权重文件,需通过包路径动态获取,避免硬编码:

from ament_index_python.packages import get_package_share_directory
import os

package_path = get_package_share_directory('yolov5_detect')
weight_path = os.path.join(package_path, 'yolov5', 'weights', 'yolov5s.pt')

4. 重新编译并运行

执行以下命令完成编译与测试:

colcon build --packages-select yolov5_detect
source install/setup.bash
ros2 run yolov5_detect webcam_yolo_sub

额外注意事项

  • 确保yolov5文件夹下存在空的__init__.py文件,让Python将其识别为合法模块。
  • 若yolov5依赖torch、opencv-python等第三方库,需在package.xml中添加<exec_depend>标签声明,或让用户手动通过pip install安装。

内容的提问来源于stack exchange,提问作者Jun Meng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 20:21:11