3. 3D视觉基础

在机器人抓取系统中,3D视觉的核心任务是回答“目标物体在哪里、姿态如何”。深度相机作为获取三维信息的传感器,其成像原理直接决定了点云质量、测量精度与适用场景。本章将系统讲解三类主流深度相机(结构光、ToF、双目)的工作原理与工程选型要点,深入解析点云数据格式(PCD、PLY、XYZ)的存储结构,并重点解决机器人抓取中最关键的坐标系转换问题——从相机坐标系到机器人基坐标系的刚体变换。理解这些基础,是后续标定、手眼协同与抓取规划的前提。

深度相机原理与点云坐标系转换链路 结构光 • 投影红外光斑/条纹编码 • 三角测量解算深度 • 精度高(0.1-1mm) • 易受环境光干扰 代表:Kinect v1、RealSense D435 ToF(飞行时间) • 发射调制光,测量相位差 • 直接计算光飞行时间 • 帧率高,适合动态场景 • 分辨率较低,边缘模糊 代表:Kinect v2、Intel L515 双目立体视觉 • 双相机同步采集图像 • 视差匹配计算深度 • 室内外均可用 • 弱纹理区域匹配失败 代表:ZED 2、Mynt Eye 点云数据格式 • PCD:带header,支持多字段(x,y,z,rgb,normal) • PLY:多边形文件,可含网格与顶点属性 • XYZ:纯文本,每行x y z,简单但无附加信息 坐标系转换链 相机坐标系 → 机器人基坐标系 P_cam = R·P_base + t 手眼标定:AX = XB 求解 深度图获取 点云生成 坐标变换 内参 + 深度值 → 相机系3D点 外参(R,t) → 机器人系

上图展示了三类深度相机的核心原理、点云格式与坐标系转换的整体链路。下面我们将逐一深入剖析。

3.1 结构光深度相机:编码光斑与三角测量

核心原理

结构光相机通过投影仪向场景投射已知编码的红外光斑或条纹图案,同时用红外相机拍摄被物体表面调制后的图案。由于投影图案的编码信息已知,通过比对原始图案与拍摄图案中每个像素的位移量(视差),结合投影仪与相机之间的基线距离,利用三角测量原理即可计算出每个像素的深度值。其核心公式为:

Z = (f × B) / d

其中,Z为深度,f为相机焦距,B为投影仪与相机光心之间的距离(基线),d为对应特征点的视差。结构光方案的测量精度通常在0.1mm至1mm之间,取决于基线与分辨率。

工程判断与选型

  • 适用场景:室内、中近距离(0.2m~3m)、静态或慢速物体抓取,如零件分拣、货架取物。
  • 优势:点云密度高、边缘清晰、对弱纹理物体(如纸箱、塑料件)有较好表现。
  • 劣势:强环境光(阳光直射)会淹没红外编码,导致深度空洞;多台结构光相机互相干扰。
经验提醒:在产线部署时,若环境光较强,可加装红外带通滤光片,或选择主动双目方案替代纯结构光。

案例拆解:纸箱抓取中的结构光应用

某电商分拣中心使用RealSense D435抓取随机堆叠的纸箱。初始现象是:在靠近窗户的工位,点云出现大面积黑色空洞,导致抓取失败率高达30%。分析发现,阳光中的红外成分干扰了编码光斑识别。操作步骤:① 在相机镜头前加装850nm窄带滤光片;② 调整相机曝光时间从8ms降至2ms;③ 在窗户加装遮光帘。结果:空洞率从30%降至2%以下,抓取成功率提升至98%。代价是滤光片成本约200元,且需定期清洁。复盘经验:结构光相机对环境光极其敏感,部署前必须评估光照条件。

常见误区

风险提示:不要将结构光相机直接对准高反光表面(如金属镜面、透明塑料),这会导致镜面反射破坏编码图案,产生错误深度值。应调整拍摄角度或喷涂抗反光涂层。

3.2 ToF深度相机:飞行时间测量与多路径干扰

核心原理

ToF相机通过发射连续调制光(通常是正弦波或方波),测量发射光与反射光之间的相位差,从而计算光的飞行时间,进而得到距离。其核心公式为:

d = (c × Δφ) / (4π × f_mod)

其中,c为光速,Δφ为相位差,f_mod为调制频率。ToF相机不依赖纹理特征,因此对弱纹理物体、纯色表面有天然优势。但受限于传感器分辨率(通常为QVGA或VGA),点云密度较低。

工程判断与选型

对比维度结构光ToF双目
测量原理三角测量飞行时间视差匹配
精度0.1-1mm1-3mm1-5mm(随距离下降)
帧率30fps30-60fps30-90fps
环境光鲁棒性差中好
弱纹理物体好好差
典型距离0.2-3m0.3-6m0.5-10m
成本中高低

案例拆解:AGV避障中的ToF选型

某AGV厂商需要检测前方1.5m处的托盘叉孔位置。初始方案使用双目相机,但在夜间仓库光照不足时匹配失败。改用ToF相机(如PMD pico flexx)后,由于不依赖环境光,夜间也能稳定输出深度。关键参数:调制频率20MHz,测量距离0.3-4m,帧率45fps。实际测试中,ToF在0.5-2m范围内精度为±3mm,满足叉孔定位需求。但发现当托盘边缘有金属反光时,出现“飞点”噪声。解决方案:对点云进行时域中值滤波,并设置深度阈值剔除异常值。复盘:ToF适合动态场景,但必须处理多路径干扰和飞点。

常见误区

风险提示:ToF相机在物体边缘处容易产生“拖尾”伪影,因为一个像素可能同时接收到前景和背景的反射光。抓取场景中应避免使用ToF抓取细长杆件或线缆类物体。

3.3 双目立体视觉:视差匹配与极线约束

核心原理

双目相机模拟人眼,通过两个水平放置的相机同时拍摄同一场景。经过立体校正后,左右图像行对齐,则同一空间点在左右图像中的像素坐标差(视差)与深度成反比:

Z = (f × B) / d

其中,d = x_left - x_right。双目方案的核心挑战在于视差匹配——在右图中找到与左图每个像素对应的同名点。常用算法包括块匹配(BM)、半全局匹配(SGBM)和基于深度学习的方法。

工程判断与选型

  • 适用场景:室外、远距离(0.5-10m)、光照变化大的环境,如户外机器人导航、大型工件定位。
  • 优势:成本低(仅需两个普通相机)、功耗低、无主动光源。
  • 劣势:对弱纹理表面(白墙、纯色纸箱)匹配效果差;计算量大,需要GPU加速。

案例拆解:汽车零部件抓取中的双目应用

某汽车工厂需要抓取堆放在料架中的刹车盘。刹车盘表面有加工纹理,但部分区域反光。使用ZED 2双目相机,在距离1.2m处拍摄。初始点云在反光区域出现孔洞。分析发现,反光导致左右图像灰度差异过大,匹配失败。操作步骤:① 开启相机内置的HDR模式;② 将SGBM算法的惩罚参数P1从8调至4,P2从32调至16;③ 对深度图进行空洞填充(基于邻域插值)。结果:点云完整度从70%提升至95%,抓取成功率从85%提升至97%。代价是处理时间从15ms增至25ms,但仍满足节拍要求。复盘:双目相机的算法参数调优空间大,需根据实际材质反复测试。

常见误区

经验提醒:双目相机的基线长度决定了测量范围。基线越长,近距离精度越高,但远距离视差变小;基线越短,远距离效果越好,但近距离精度下降。选型时需根据工作距离权衡。

3.4 点云数据格式:PCD、PLY与XYZ

核心原理与结构

点云是三维空间中离散点的集合,每个点通常包含三维坐标(x,y,z),并可附加颜色(RGB)、法向量(nx,ny,nz)、强度值等属性。不同格式的存储结构差异直接影响读写效率与兼容性。

格式文件头数据组织适用场景
PCDVERSION/FIELDS/SIZE/TYPE/COUNT/WIDTH/HEIGHT二进制或ASCII,支持多字段PCL库标准格式,处理高效
PLYmagic number + element列表可含网格面片,支持顶点颜色3D重建、网格处理
XYZ无头,直接每行x y z纯文本,简单快速预览、简单交换
# PCD文件示例
# .PCD v0.7 - Point Cloud Data file format
VERSION 0.7
FIELDS x y z rgb
SIZE 4 4 4 4
TYPE F F F F
COUNT 1 1 1 1
WIDTH 100
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 100
DATA ascii
0.1 0.2 0.3 4294967295
...

工程操作流程

  1. 格式选择:若使用PCL库处理,优先PCD;若需与MeshLab等工具交互,选PLY;若仅需坐标信息,选XYZ。
  2. 数据压缩:PCD支持LZF压缩,可减少70%存储空间,但读取时需解压。
  3. 字段扩展:在PCD的FIELDS中可添加normal_x等字段,但需保持SIZE和TYPE一致。
风险提示:XYZ格式无文件头,无法存储点云分辨率、视角等元数据。在机器人抓取系统中,建议使用PCD或PLY,避免信息丢失。

3.5 坐标系转换:从相机到机器人基座

核心原理

机器人抓取要求将相机坐标系下的点云变换到机器人基坐标系。这是一个刚体变换,包含旋转矩阵R(3×3)和平移向量t(3×1):

P_base = R × P_cam + t

其中,P_cam是相机坐标系下的点,P_base是机器人基坐标系下的点。求解R和t的过程称为手眼标定。根据相机安装位置,分为两种模式:

  • 眼在手上(Eye-in-Hand):相机安装在机械臂末端,随臂运动。标定方程:AX = XB,其中A为机械臂末端位姿变化,B为相机观测到的标定板位姿变化。
  • 眼在手外(Eye-to-Hand):相机固定安装在支架上。标定方程:AX = YB,需要同时求解相机到机器人基座的变换X和标定板到机械臂末端的变换Y。

操作流程与案例

以眼在手外为例,某焊接机器人工作站使用固定安装的深度相机定位工件。标定步骤:① 将棋盘格标定板固定在机械臂末端;② 控制机械臂运动到15个不同位姿,每个位姿记录机械臂末端位姿(从控制器读取)和相机拍摄的标定板位姿(通过OpenCV的solvePnP求解);③ 使用Tsai-Lenz算法求解AX=YB;④ 验证:将标定板放在工作台上,相机识别其位姿,变换到机器人基坐标系,与机器人示教位置对比,误差应小于2mm。

# 伪代码示例
for i in range(15):
    A_i = get_robot_pose(i)      # 4x4齐次矩阵
    B_i = get_camera_pose(i)     # 4x4齐次矩阵
X, Y = solve_hand_eye(A_list, B_list, method='tsai')
# 验证
P_cam = detect_target()
P_base = X @ P_cam
print(f"误差: {np.linalg.norm(P_base - P_teach)} mm")

常见误区与复盘

风险提示:标定时机械臂运动范围应覆盖实际工作空间,且标定板在相机视野中占据足够大的面积(至少1/3)。若标定板太小,会导致旋转矩阵求解不稳定。此外,标定板必须保持平面度,弯曲的棋盘格会引入系统性误差。
总结复盘:深度相机的选型应基于精度、距离、环境光、物体材质四个维度综合判断。点云格式的选择需考虑下游处理库的兼容性。坐标系转换是抓取系统中最容易出错的一环,建议在每次更换相机或移动机器人后重新标定,并定期用标准球验证精度。