2D 相机把世界拍成平面。要抓起箱子里层层堆叠的零件中最上面的那一个,或者确认焊道是否足够饱满凸起,就需要高度。3D 相机会在每个像素处同时测量距离,把场景以点的集合,也就是点云的形式返回。
3D 相机的种类
fineAi RoboVision 支持以下 3D 相机。
- 图案光(结构光)方式 — Zivid、Photoneo、EpicEye Pixel Pro。用投影仪投射条纹图案,再根据图案在物体表面弯曲的形状计算距离。适合精密拍摄静止的物体。
- 激光方式 — EpicEye Laser M V3。在反光强烈或深色的表面上也很稳定。
这些相机输出的是有序(organized)点云。点按照图像的像素网格顺序排列,因此 2D 图像坐标可以直接对应到 3D 点。也就是说,在 2D 中用 YOLO 找到的物体区域,可以原样映射到 3D 点上。通常保存为 PLY 文件。
处理流程
- ROI(感兴趣区域) — 只保留工作台或箱子内部这类需要的空间。
- 降采样 — 在固定间隔的网格(voxel)中各只保留一个点,以减少点数。后续计算会快好几倍。
- 去噪 — 删除与周围点相距很远的点(悬浮在空中的点)。
- 法线计算 — 对每个点,用周围的点拟合出一个小平面,求出表面方向。用于确定抓取方向。
- 平面分离 — 找出最大的平面(地面、工作台)并删除。常用 RANSAC 这类用随机样本拟合平面的方法。剩下的点就是物体。
- 物体分割 — 把彼此靠近的点归为一组,分成一个一个的物体。
- 配准(Registration) — 将预先注册的模板模型匹配到各个物体上,求出 3D 姿态(位置 + 旋转)。
配准结果是相机坐标。机械臂要使用,必须转换成机械臂坐标,这个转换就是 Hand-Eye 标定。
从多个方向拍摄并拼接
大型物体或曲面无法一次看全。RoboVision 把相机装在机械臂末端,沿轨迹移动拍摄。每次拍摄时记录机械臂反馈的相机位姿,再利用这些位姿把多张拼接成一个整体(pose-guided stitching)。与在图像之间匹配特征点的方式相比,即使在没有特征的光滑表面上也更稳定。
焊道检测
焊缝在 2D 图像中只能看到形状,但用 3D 观察就能测量截面轮廓。RoboVision 从焊道截面以 mm 为单位计算以下数值。
- 焊脚长度(leg)、焊喉厚度(throat)
- 焊道宽度·高度、凸起·凹陷程度
- 咬边深度
将这些数值与 ISO 5817 质量等级(B/C/D)的定量标准比较并评定等级,并在报告中记录各缺陷的 OK/NG 原因。
2D 与 3D,该用哪一种
| 问题 | 2D | 3D |
|---|---|---|
| 表面是否有划伤·异物 | ✓ 适合 | 分辨率较低,不利 |
| 高度·平面度·体积是否在标准范围内 | 困难 | ✓ 适合 |
| 能否抓取重叠堆放的物体 | 困难 | ✓ 适合 |
| 处理速度是否必须非常快 | ✓ 有利 | 相对较慢 |
实际的工作站会两者并用。先用 2D 快速找出什么东西在哪里,再只对该区域用 3D 精细观察。