固废AI分拣-GTP


下面用工程可落地的方式讲清楚:
2D 相机 → 分割结果 → 机械臂抓取 的完整流程(实际工业机器人分拣线的标准做法)。


总体思路:2D 分割只能给“形状 + 轮廓”,抓取必须从 2D → 3D 映射

2D 图像本身没有深度信息,机械臂无法知道物体的高度、倾斜角、抓取点的世界坐标

因此要解决两件事:

1)从 2D 分割轮廓 → 找到有效抓取点(像素坐标)

2)把像素坐标 → 转换到机械臂坐标系(世界坐标)

两个问题都解决后才能抓。


一、步骤 1:在 2D 分割结果中生成抓取点

常用算法 3 类:


① 边缘中点抓取(适用于规则物体:易拉罐、瓶子)

从分割 mask 中:

  • 找出最长轮廓线
  • 找到轮廓的中点
  • 以法向量方向设置夹爪角度

🔧 用到的库:OpenCV + Mask(分割结果)


② 最大内接圆(适用于不规则垃圾)

在 mask 区域内求:

最大内接圆圆心 = 最稳定的抓取点

抓吸盘非常适合此方法。


③ 基于学习的抓取模型(强烈推荐)

如果物体杂乱堆叠,传统几何方法不好用,可用:

  • GGCNN / GGCNN2
  • GraspNet
  • DexNet 2.0 (suction)

输入:分割 mask + 图像
输出:最佳抓取点 + 抓取角 + 抓取质量 q

这些模型本质是:

从 2D 图像预测最优抓取姿态
(即便堆叠严重也能抓)


二、步骤 2:从像素坐标 → 转到机械臂坐标(关键步骤)

2D 分割提供的是像素点 (u, v),但机械臂需要 3D:

(x, y, z, roll, pitch, yaw)

必须完成两个校准:


① 相机内参 + 外参标定

  • 内参:焦距 fx, fy,主点 cx, cy
  • 外参:相机坐标 → 机械臂坐标的 4×4 转换矩阵

使用:

  • OpenCV 标定板
  • ROS camera_calibration

得到矩阵:
T_cam_to_robot


② 确定 Z 值(深度)的方法

2D 相机没有深度,工业界三种解决方案:


**方案 A(最常见)

→ 固定高度场景,Z 值是常量**

如果物体都放在同一条输送带上:

z = 输送带高度 - 相机高度(固定值)

适用于:

  • 易拉罐
  • 玻璃瓶
  • 大部分固废

这是最简单、最高效的工业做法。


**方案 B

→ 利用分割 mask 的面积估计深度(大致)**

如果相机高度固定:

面积 ∝ 1 / z²

面积越小 → 说明物体越远(z 越大)
但是精度有限。


**方案 C(最准确)

→ 用双目/结构光深度相机补充深度(最推荐)**
即:

  • 用 2D 分割
  • 用深度相机获取 z
  • 2D + 深度 → 稳定抓取点

绝大多数工业分拣(玻璃/金属/碎片)最终都会换深度相机。


三、步骤 3:坐标变换

把像素点 (u, v) 转成相机坐标:

Xc = (u - cx) * Z / fx
Yc = (v - cy) * Z / fy
Zc = Z

再用外参:

P_robot = T_cam_to_robot * [Xc, Yc, Zc, 1]^T

就得到机械臂能执行的 3D 坐标。


四、步骤 4:机械臂抓取动作生成

抓取动作需要位置 + 姿态:

1) P = [x, y, z]
2) 抓取角度(来自最大内接圆法向量 or GGCNN预测)
3) 抓取前 → approach pose(上方 5–10 cm)
4) 夹取/吸取
5) 抬升 + 转运 + 放置

使用工具:

  • ROS MoveIt (轨迹规划)
  • 工业臂 SDK(遨博/遨智/UR 等)

📌 五、行业标准流程总结(可以用于 PPT)

  1. 2D相机拍照 → 分割 mask
  2. 在 mask 中找到抓取点(中点/最大内接圆/AI抓取模型)
  3. 像素坐标 → 相机坐标(利用内参)
  4. 相机坐标 → 机械臂坐标(利用外参)
  5. 执行抓取(MoveIt 轨迹规划)

⭐ 如果你愿意,我还能给你:

✔ 画一张 “2D相机分割 → 抓取”完整流程图(可用于方案汇报)
✔ 给出 代码模板(OpenCV + PyTorch + MoveIt)
✔ 给你评估 是否换深度相机更合适
✔ 给你配置 最低可行系统(硬件+软件)清单

你需要哪一块?

posted @ 2025-11-19 15:32  向着朝阳  阅读(3)  评论(0)    收藏  举报