从2D到3D:发那科视觉系统3D摄像头入门实战指南
当你已经熟悉了2D视觉的定位与检测,3D视觉将为你打开一个全新的维度——高度信息让原本难以解决的堆叠抓取、深度测量、姿态估计等问题迎刃而解。本文将从零开始,带你跨越从2D到3D视觉的技术门槛。
为什么需要3D视觉?
传统2D视觉依赖于灰度或彩色图像,通过像素坐标进行定位与检测。但当物体存在堆叠、倾斜或需要获取深度信息时,2D视觉就显得力不从心。
3D视觉能够提供每个点的XYZ三维坐标,让机器人不仅知道物体“在哪里”,还知道它“有多高”、“以什么角度放置”,这对于料筐抓取、工件定位、装配引导等场景至关重要。
3D视觉与2D视觉的核心区别
维度 | 2D视觉 | 3D视觉 |
|---|---|---|
数据形式 | 2D图像(灰度/彩色) | 点云或深度图 |
核心信息 | 像素坐标、灰度值 | XYZ三维坐标 |
典型应用 | 平面定位、条码识别、表面缺陷 | 堆叠抓取、体积测量、姿态估计 |
标定方式 | 2D平面标定 | 手眼标定+深度标定 |
处理复杂度 | 较低 | 较高,需处理点云数据 |
折叠内容
折叠内容
2D视觉的核心流程回顾 对于发那科2D视觉(iRVision 2D),典型流程为:图像采集 → 灰度化 → 模板匹配或几何特征提取 → 计算像素坐标偏移 → 通过标定矩阵转换为机器人坐标。
发那科3D视觉系统架构
发那科(FANUC)的3D视觉系统通常由以下组件构成:
PLAINTEXT
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ 3D摄像头 │────▶│ 视觉控制器 │────▶│ 机器人控制器 │
│ (如Keyence) │ │ (iRVision) │ │ (R-30iB) │
└─────────────┘ └──────────────┘ └─────────────┘
│
┌─────▼─────┐
│ 点云处理 │
│ (PC开发) │
└───────────┘
发那科本身不生产摄像头,而是与Keyence、Cognex等厂商合作,通过iRVision 3D或3D Area Sensor集成第三方3D传感器。
从零开始:3D视觉学习路径
第一步:理解3D摄像头的成像原理
常见的3D摄像头技术包括:
结构光法:投射编码光栅,通过畸变计算深度
双目立体视觉:双相机视差计算深度
TOF(飞行时间)法:通过光飞行时间测距
对于发那科集成方案,Keyence的3D视觉传感器(如IV系列)和Cognex 3D-A5000是常见选择。
第二步:掌握点云基础知识
点云是3D视觉的核心数据形式。每个点包含XYZ坐标,还可能包含RGB信息。你需要了解:
点云滤波(去除离群点)
点云配准(多视角对齐)
点云分割(提取目标区域)
特征提取(平面拟合、边缘提取)
第三步:3D手眼标定
这是从2D到3D最关键的一步。与2D标定不同,3D标定需要同时考虑旋转和平移的六自由度关系。
标定类型 | 适用场景 | 复杂度 |
|---|---|---|
2D标定 | 平面工件 | 低(仅平移) |
3D手眼标定(眼在手外) | 摄像头固定 | 中 |
3D手眼标定(眼在手上) | 摄像头装在机器人上 | 高 |
发那科提供了3D标定向导,通过示教器上的引导步骤,示教多个标定点即可完成。
实战:发那科3D视觉抓取流程
下面以“料筐堆叠工件抓取”为例,演示完整的3D视觉实施流程。
系统配置
PYTHON
# 假设使用发那科 iRVision 3D + Keyence 3D传感器
# 以下是机器人程序中的关键逻辑(示意)
# 1. 触发3D相机拍照
CALL VISION_3D_CAPTURE
# 2. 获取3D视觉处理结果
# 返回:工件位置(X,Y,Z)、姿态(Rx,Ry,Rz)、抓取高度
GET_VISION_RESULT 'PICK_POS' 'RESULT'
# 3. 计算抓取偏移
OFFSET_POSITION 'PICK_POS' 'CALC_POS'
点云处理流程
PYTHON
# 伪代码:3D视觉处理流程
import numpy as np
import open3d as o3d
# 1. 加载点云数据
pcd = o3d.io.read_point_cloud("captured.ply")
# 2. 去除离群点(统计滤波)
cl, ind = pcd.remove_statistical_outlier(nb_neighbors=20, std_ratio=2.0)
pcd_clean = pcd.select_by_index(ind)
# 3. 平面分割(去除料筐底面)
plane_model, inliers = pcd_clean.segment_plane(
distance_threshold=0.01, ransac_n=3, num_iterations=1000)
pcd_objects = pcd_clean.select_by_index(inliers, invert=True)
# 4. 欧式聚类分割出单个工件
labels = pcd_objects.cluster_dbscan(eps=0.02, min_points=50)
# 5. 计算每个工件的中心点和法向量
for cluster_id in np.unique(labels):
if cluster_id == -1: # 噪声
continue
cluster_pcd = pcd_objects.select_by_index(
np.where(labels == cluster_id)[0])
center = cluster_pcd.get_center()
# 输出给机器人
print(f"工件位置: {center}")
2D与3D视觉处理的最大差异在于:2D通过图像特征匹配找到目标,而3D直接利用空间几何信息。对于堆叠工件,3D视觉还能通过高度差判断抓取顺序——优先抓取最高处的工件。
发那科机器人侧程序示例
KAREL
PROGRAM PICK_FROM_BIN
VAR
vision_result : XYZWPR
pick_pos : XYZWPR
height_offset : REAL
BEGIN
! 设置抓取高度偏移(根据工件尺寸调整)
height_offset := 20.0
! 循环执行视觉抓取
REPEAT
! 触发3D视觉
VISION RUN_FIND '3DV' 'BIN_SCENE' 0
IF VISION_GET_RESULT('3DV', 'BIN_SCENE', vision_result, 0) THEN
! 将视觉坐标转换到机器人坐标系
pick_pos := vision_result
! 调整Z轴高度(考虑抓取偏移)
pick_pos.Z := pick_pos.Z - height_offset
! 移动到抓取点上方
MOVJ pick_pos CNT0
! 打开夹爪
RO[1:GRIPPER] = OFF
! 下移抓取
MOVL pick_pos CNT0
RO[1:GRIPPER] = ON
WAIT 1.0
! 提起工件
pick_pos.Z := pick_pos.Z + 50.0
MOVL pick_pos CNT0
ENDIF
UNTIL NOT VISION_HAS_MORE('3DV', 'BIN_SCENE')
END PROGRAM
颜色识别:从灰度到彩色
既然你提到没学过颜色识别,这里补充一个重要知识点。发那科2D视觉系统原生支持彩色图像处理,使用iRVision 2D的Color Vision工具即可轻松实现。
颜色识别核心原理
颜色识别通常基于色彩空间转换。工业视觉中最常用的是HSV色彩空间:
H(色相):颜色的种类,如红、绿、蓝
S(饱和度):颜色的鲜艳程度
V(明度):颜色的明暗
PYTHON
# OpenCV颜色识别示例(与发那科视觉逻辑类似)
import cv2
import numpy as np
# 读取图像
img = cv2.imread("parts.jpg")
# BGR转HSV
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 定义红色范围(HSV)
red_lower = np.array([0, 100, 100])
red_upper = np.array([10, 255, 255])
# 创建掩码
mask = cv2.inRange(hsv, red_lower, red_upper)
# 提取红色区域
result = cv2.bitwise_and(img, img, mask=mask)
# 找到轮廓
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
发那科颜色识别配置步骤
创建颜色工具:在iRVision中新建
Color Vision工具颜色采样:在图像中框选目标颜色区域,系统自动提取颜色特征
设置容差:调整色相、饱和度容差范围
输出结果:将识别到的颜色ID和位置坐标输出给机器人
彩色相机采集图像
转换到HSV色彩空间
阈值分割提取目标颜色
形态学处理去除噪声
计算区域中心坐标
3D相机采集点云+彩色纹理
点云与彩色图像对齐
在3D空间中进行颜色分类
输出带颜色的3D位置信息
常见问题与解决方案
问题1:3D点云中工件互相遮挡 解决方案:使用高度阈值分割,设置最低抓取高度,只抓取露出料筐边缘的工件。
问题2:标定精度不足 解决方案:确保标定板表面平整,避免反光;标定点要覆盖整个工作区域。
问题3:颜色识别受环境光影响 解决方案:在HSV中固定S和V的范围,只在H通道做阈值分割;增加遮光罩减少环境光干扰。
点云处理时先进行降采样,减少计算量
使用**ROI(感兴趣区域)**限制处理范围
在机器人运动过程中并行处理下一帧点云
合理设置相机触发频率,避免无效计算
进阶学习建议
悬停查看学习路径建议按照:2D基础 → 颜色识别 → 3D点云处理 → 3D+颜色融合 的顺序逐步深入
推荐学习路线
基础巩固:复习2D视觉的标定、模板匹配、几何测量
颜色视觉:掌握HSV色彩空间、颜色阈值分割
点云入门:学习点云读写、可视化、基本滤波
3D视觉实战:从简单的高度测量开始,逐步过渡到堆叠抓取
融合应用:将颜色信息映射到3D点云,实现彩色3D视觉
实践建议
先在仿真环境(如RoboDK、发那科Roboguide)中验证程序逻辑
从单一工件、固定高度的简单场景开始,逐步增加复杂度
记录每次调试的参数变化,建立自己的参数调优手册
结语
从2D到3D视觉的跨越,本质上是从“平面思维”到“空间思维”的转变。虽然3D视觉引入了点云处理、深度标定等新概念,但其核心逻辑——获取数据 → 处理分析 → 输出结果——与2D视觉是一脉相承的。掌握了颜色识别后,你还可以将颜色信息与3D位置结合,实现更复杂的“彩色3D抓取”应用。
记住:没有最好的视觉方案,只有最适合现场工况的方案。先从简单场景入手,逐步积累经验,你会发现自己很快就能驾驭3D视觉系统。
{linkcard url=https://www.fanuc.co.jp/en/product/robot/ url_title=FANUC机器人官网 sitename=FANUC官方}
