跳到主要内容

yolov8目标检测案例

功能包与代码结构

  • 功能包:yolo_box_object_detection 用于箱子识别的 YOLO ROS 功能包

    • 功能包路径:<kuavo_ros_application>/src/ros_vision/detection_industrial_yolo/yolo_box_object_detection
  • 示例代码

    • 路径:<kuavo-ros-opensource>/src/demo/examples_code/yolo_detect/yolo_detect_info.py
    • yolo_detect_info.py: 获取一次 /object_yolo_box_tf2_torso_result 检测结果基于机器人基座标系的位姿

📦 箱子识别

使用前需要打开摄像头

cd ~/kuavo_ros_application
source /opt/ros/noetic/setup.bash
source ~/kuavo_ros_application/devel/setup.bash
# 旧版4代, 4Pro
roslaunch dynamic_biped load_robot_head.launch
# 标准版, 进阶版, 展厅版, 展厅算力版
roslaunch dynamic_biped load_robot_head.launch use_orbbec:=true
# MaxA版, MaxB版
roslaunch dynamic_biped load_robot_head.launch use_orbbec:=true enable_wrist_camera:=true

🎯 针对于 YOLOv8 训练模型检测调用

  • 🔍 yolo_box_object_detection -- 箱子识别 YOLO ROS 功能包

📁 模型路径及说明

  • 📂 路径:
    • <kuavo_ros_application>/src/ros_vision/detection_industrial_yolo/yolo_box_object_detection
  • 📄 模型格式:.pt
  • 🗂️ 模型路径:
    • <kuavo_ros_application>/src/ros_vision/detection_industrial_yolo/yolo_box_object_detection/scripts/models/

打开检测程序

cd ~/kuavo_ros_application
source /opt/ros/noetic/setup.bash
source ~/kuavo_ros_application/devel/setup.bash
roslaunch yolo_box_object_detection yolo_segment_detect.launch
  • 如果上位机为agx或NX可能或出现下面报错:

在终端输入下面命令:

echo 'export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libgomp.so.1:$LD_PRELOAD' >> ~/.bashrc

开一个新的终端重新打开检测程序。

如果需要可视化检测效果,需要打开rqt_image_view或rviz(需要接显示屏或者远程桌面查看),订阅object_yolo_box_segment_image话题查看效果 yolov8目标检测案例

📡 箱子识别 ROS 话题订阅

/object_yolo_box_segment_result   # 基于相机坐标系下的箱子中心点的3D位置
/object_yolo_box_segment_image # 识别箱子的绘制结果
/object_yolo_box_tf2_torso_result # 基于机器人基坐标系下的箱子中心点的3D位置

💻 yolo_box_object_detection 功能包代码说明 (头部 NUC)

  • yolo_box_segment_ros.py:
    • 调用模型检测并获取识别框中心点三维坐标位置
    • 发布到 /object_yolo_box_segment_result
    • 过滤低于 0.6 置信度的结果
  • yolo_box_transform_torso.py:
    • 订阅 /object_yolo_box_segment_result
    • 将坐标转换到机器人基坐标系
    • 发布转换结果到 /object_yolo_box_tf2_torso_result

🔧 识别姿态四元数说明

  • 📄 查看 yolo_box_transform_torso.py 文件第 71-74 行,由于检测只获取检测目标中心点空间位置无姿态信息,四元数为固定值非实际值

使用GPU加速说明

⚠️⚠️⚠️ 该部分仅适用于进阶版和Max版用户 ⚠️⚠️⚠️ 该部分仅适用于jetpack是5.1.4版本且CUDA是11.4版本

  • 查询方式
    • 终端执行sudo -H pip install -U jetson-stats安装工具
    • 终端执行jetson_release查看本地环境
    • 若下图红框中部分与终端结果一致,即可参考此文档使用GPU进行加速 YOLO_GPU加速

安装 PyTorch、Torchvision 和 Ultralytics

  • 新镜像自带以上依赖项,对于携带旧版镜像且需要使用GPU加速检测的设备,才需要补充安装 PyTorch、Torchvision 和 Ultralytics

⚠️ 安装顺序非常重要:torch -> torchvision -> ultralytics
原因:

  • torch 是核心底层
  • torchvision 依赖 torch
  • ultralytics 依赖 torch,可调用 torchvision transforms
  • Jetson 内已编译好的 CUDA+cuDNN+JetPack,torch 必须匹配 CUDA 和 JetPack,否则自动安装可能出错

1. 确认是否已安装 torch

  • 新开终端
    pip3 show torch
    • not found -> 安装 torch
    • 显示版本 -> 根据后续文档判断是否是可使用的torch,若不是则需要根据后续文档卸载安装
  • 确定 Jetson NX/AGX 上位机 版本:
    dpkg-query --show nvidia-l4t-core

    参考英伟达开发者官网,本例显示 35.6.0,对应 JetPack 5.1.4 版本

  • 确认 python3 版本:
    python3 --version

    本例中Python版本为3.8.10

  • 删除旧 torch 防止冲突:
    sudo pip3 uninstall torch torchvision torchaudio -y
  • 参考英伟达官方论坛找到合适版本的 torch(JetPack 5.1.4 对应 PyTorch 2.0.0)

2. 安装 PyTorch 2.0.0(JetPack 5.1.4 / CUDA 11.4)

  • 下载 whl 文件(可通过 SSH 传输到 Jetson NX/AGX 上位机):
    wget https://nvidia.box.com/shared/static/i8pukc49h3lhak4kkn67tg9j4goqm0m7.whl \
    -O torch-2.0.0+nv23.05-cp38-cp38-linux_aarch64.whl
  • 安装依赖:
    sudo apt-get install python3-pip libopenblas-base libopenmpi-dev libomp-dev
    pip3 install 'Cython<3'
    pip3 install numpy torch-2.0.0+nv23.05-cp38-cp38-linux_aarch64.whl
  • 验证安装:
    python3 -c "import torch; print(torch.__version__)"

    输出示例:2.0.0+nv23.05,安装成功

3. 安装 Torchvision(对应 0.15.1)

  • 参考文档链接,安装对应版本的torchvision,此处如图对应0.15.1 YOLO_GPU加速

  • 安装依赖:

    sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libopenblas-dev \
    libavcodec-dev libavformat-dev libswscale-dev
  • 克隆源码并安装:

    git clone --branch v0.15.1 https://github.com/pytorch/vision torchvision
    cd torchvision
    git fetch --tags
    git tag | grep v0.15.1
    git checkout tags/v0.15.1
    export BUILD_VERSION=0.15.1
    pip install 'pillow<7'
    python3 setup.py install --user
  • 验证安装:

    pip install "urllib3<2"
    python3 -c "import torchvision; print(torchvision.__version__)"

    输出示例:0.15.1,安装成功

4. 安装 Ultralytics

  • 安装:
    pip3 install ultralytics
    python3 -c "import ultralytics; print(ultralytics.__version__)"

    输出版本信息即为安装成功

修改代码及运行

说明

  • 对于 YOLOv8,其程序中调用了 ultralyticsultralytics 会自动依赖当前环境下的 torch
  • 镜像自带的是 GPU 版本的 torch,因此程序会自动使用 GPU 加速。
  • 在 GPU 环境下,如果想测试 CPU 运行效果,需要手动指定设备为 CPU,下面提供显式指定CPU/GPU检测的办法。

代码段位置

  • 编辑文件~/kuavo_ros_application/src/ros_vision/detection_industrial_yolo/yolo_box_object_detection/scripts/yolo_box_segment_ros.pydef main() 内找到如下代码段:
    # 使用 Ultralytics 加载模型
model_path = os.path.join(rospkg.RosPack().get_path('yolo_box_object_detection'), 'scripts/models/best.pt')
model = YOLO(model_path)

显式指定运行设备为 CPU

  • 修改代码

    # 使用 Ultralytics 加载模型
    model_path = os.path.join(
    rospkg.RosPack().get_path('yolo_box_object_detection'),
    'scripts/models/best.pt'
    )
    model = YOLO(model_path).to('cpu')
  • 运行效果如图所示YOLO_GPU加速

    - GPU 占用率几乎不升高
    - 帧率为个位数
    - ✅ 可验证 CPU 模式正常工作

显式指定运行设备为 GPU

  • 修改代码

    # 使用 Ultralytics 加载模型
    model_path = os.path.join(
    rospkg.RosPack().get_path('yolo_box_object_detection'),
    'scripts/models/best.pt'
    )
    model = YOLO(model_path).to('cuda')
  • 运行效果YOLO_GPU加速

    - GPU 占用率明显上升
    - 帧率可达到 30+ FPS
    - ✅ 可验证 GPU 模式正常加速