YOLOv8-3D3D 目标检测 6D 抓取姿态一套可训练、可导出 ONNX、可对接双目 / 深度相机、可落地抓取的完整流程一、YOLOv8-3D 到底是什么官方 YOLOv8 没有原生 3D 头但有两条工业主流路YOLOv8 深度图 / 点云后处理最稳、最快、工业首选YOLOv8-3D 定制版2D 点云融合端到端 3D 框你要的双目 (RGB 深度 点云) → 物体 3D 位置 → 抓取姿态用方案 1最快落地。二、整体流程双目相机 YOLOv8-3D双目 / 深度相机→ 输出RGB、深度图、点云YOLOv82D 检测→ 输出物体 2D 框、类别、置信度深度 / 点云关联→ 输出物体 3D 中心 (X,Y,Z)3D 包围盒 / 姿态估计→ 输出尺寸 (w,h,d)、旋转角 (RPY)抓取姿态生成→ 输出机械臂可直接用的 (X,Y,Z,R,P,Y, 夹爪宽度)三、环境安装直接复制bash运行pip install ultralytics opencv-python numpy open3d pyrealsense2四、数据集准备双目 / 深度相机采集1. 目录结构标准 YOLOplaintextyour_3d_data/ ├── images/ │ ├── train/ │ └── val/ ├── labels/ │ ├── train/ │ └── val/ └── data.yaml2. 标签格式.txt每行一个物体plaintextclass_id x_center y_center width height全部归一化 0~1除以图像宽高3. 深度 / 点云配对每张 RGB 对应xxx_depth.png16 位深度单位 mmxxx.pcd点云可选4. data.yaml 示例yamlpath: ./your_3d_data train: images/train val: images/val nc: 1 names: [target_object]五、训练 YOLOv82D 检测为 3D 打基础1. 训练代码train.pypython运行from ultralytics import YOLO # 加载预训练 model YOLO(yolov8s.pt) # 训练 model.train( datayour_3d_data/data.yaml, epochs50, imgsz640, batch8, device0, # GPU augmentTrue, # 增强 mixup0.1 ) # 导出ONNXModelZoo可用 model.export(formatonnx, simplifyTrue, imgsz640)2. 训练命令行也行bash运行yolo train datadata.yaml modelyolov8s.pt epochs50 imgsz640六、推理2D 检测 3D 坐标解算核心1. 加载模型与相机内参python运行import cv2 import numpy as np from ultralytics import YOLO # 相机内参双目/深度相机标定获得 fx, fy 615.0, 615.0 cx, cy 320.0, 240.0 # 加载YOLOv8模型 model YOLO(best.onnx)2. 读取双目数据RGB 深度python运行# 相机实时读取或文件 rgb cv2.imread(test_rgb.jpg) depth cv2.imread(test_depth.png, cv2.IMREAD_UNCHANGED) # 16位mm3. YOLOv8 推理2D 框python运行results model(rgb, conf0.5) for result in results: boxes result.boxes for box in boxes: # 2D框像素坐标 x1, y1, x2, y2 map(int, box.xyxy[0]) u, v (x1x2)//2, (y1y2)//2 # 物体中心像素4. 3D 坐标解算相机坐标系单位米python运行# 取深度中心像素单位米 Z depth[v, u] / 1000.0 # 3D坐标 X (u - cx) * Z / fx Y (v - cy) * Z / fy print(f3D位置: X{X:.3f}, Y{Y:.3f}, Z{Z:.3f})七、生成抓取姿态机械臂直接用python运行def get_grasp_pose(X, Y, Z, obj_w): obj_w: 物体宽度米 返回X,Y,Z,R,P,Y,夹爪宽度 # 抓取点物体中心上方5mm grasp_X X grasp_Y Y grasp_Z Z 0.005 # 姿态垂直向下可根据物体调整 R 0.0 P np.pi Yaw 0.0 # 夹爪宽度物体宽5mm gripper obj_w 0.005 return [grasp_X, grasp_Y, grasp_Z, R, P, Yaw, gripper] # 调用 pose get_grasp_pose(X, Y, Z, obj_w0.08) print(抓取姿态:, pose)八、模型导出到 ModelZoo训练好后直接导出 ONNXpython运行model.export(formatonnx, simplifyTrue, imgsz640)得到best.onnx→ 可直接导入地平线、海思、TensorRT、OpenVINO部署支持Jetson、工控机、嵌入式实时推理30~60FPS九、双目相机标定必做否则 3D 不准用OpenCV 双目标定工具或RealSense 自带标定得到内参fx, fy, cx, cy畸变k1,k2,p1,p2外参左右相机旋转平移矩阵十、你直接能落地的最简方案硬件RealSense D435i / 奥比中光 Astra双目 深度 点云模型YOLOv8s2D 检测→ 导出 ONNX推理RGB 检测 → 深度算 3D → 生成抓取姿态输出直接发给机械臂如 UR、Fanuc、遨博