三维视觉基础:相机模型、深度成像原理与点云数据格式
三维视觉是机械臂抓取定位系统的“眼睛”,其核心任务是将物理世界的三维几何信息转化为计算机可处理的数字信号。本章从相机成像的数学本质出发,依次剖析深度成像的三大主流技术路线(结构光、ToF、双目立体视觉),最后落到点云数据格式与坐标系定义——这是后续所有点云处理算法(滤波、配准、分割、位姿估计)的基石。理解本章内容,你将能够根据实际工况(精度、距离、光照、成本)选择正确的深度传感器,并正确解读点云数据中的空间语义。
2.1 相机模型:从针孔到畸变校正
相机模型是连接三维世界与二维像素的数学桥梁。机械臂抓取场景中,我们通常使用针孔模型(Pinhole Model)作为理想化描述。该模型假设光线沿直线传播,空间中的一点 P(X, Y, Z) 经过光心投影到成像平面上的像素坐标 (u, v)。其核心公式为:
Z * [u, v, 1]^T = K * [R | t] * [X, Y, Z, 1]^T
其中 K 为内参矩阵(焦距 fx, fy 与主点 cx, cy),[R | t] 为外参矩阵(旋转与平移)。实际镜头存在径向畸变(桶形/枕形)和切向畸变(透镜与成像面不平行),必须通过标定获得畸变系数(k1, k2, p1, p2, k3)进行校正。
2.2 深度成像原理:三大技术路线对比
深度传感器直接输出每个像素对应的距离值,从而形成深度图(Depth Map)。三种主流方案各有优劣,适用于不同抓取场景。
| 技术路线 | 原理 | 典型距离 | 精度 | 优点 | 缺点 | 典型产品 |
|---|---|---|---|---|---|---|
| 结构光 | 投影编码红外图案,根据图案形变三角测量 | 0.3~3m | ±0.1~1mm(近距离) | 近距离精度高、成本低 | 易受环境光干扰、远距离衰减 | Kinect v1、RealSense D435 |
| ToF | 发射调制光脉冲,测量往返相位差 | 0.5~6m | ±1~3cm | 帧率高、远距离适用、无纹理依赖 | 分辨率低、多路径干扰、边缘精度差 | Kinect v2、Mesa SR4500 |
| 双目立体 | 双相机同步采集,视差匹配计算深度 | 0.2~10m+ | 随距离增大而降低 | 无主动光源、室外可用、成本可控 | 依赖纹理特征、计算量大、暗环境失效 | ZED 2、Intel RealSense T265 |
2.2.1 结构光:编码图案的三角测量
结构光方案的核心在于编码策略。投影仪向场景投射已知图案(如格雷码、相移条纹、散斑),相机从另一角度拍摄被物体表面调制后的图案。通过比对投影图案与拍摄图案的对应点,利用三角测量原理计算深度。散斑结构光(如Kinect v1)无需逐点匹配,而是通过局部区域的相关性计算视差,速度更快但精度略低。
2.2.2 ToF:飞行时间的直接测量
ToF传感器通过发射调制红外光并测量反射光的相位延迟来计算距离。连续波ToF(CW-ToF)使用正弦波调制,通过四个等间隔相位采样(0°, 90°, 180°, 270°)解算出相位差,进而得到距离。ToF的优势在于逐像素独立测量,不受纹理影响,且帧率可达30fps以上,适合动态抓取场景。但其分辨率通常较低(如QVGA 320×240),且存在多路径干扰——光线在物体间多次反射导致测距偏大。
2.2.3 双目立体视觉:被动视差匹配
双目系统模拟人眼,通过两个水平放置的相机同步采集图像。核心步骤包括:极线校正(使左右图像行对齐)、立体匹配(计算每个像素的视差d)、三角化(由视差和基线B计算深度 Z = f·B/d)。双目方案的优势在于无主动光源,适合室外或对红外敏感的场景。但匹配算法在弱纹理区域(如白色墙面)容易失效,且计算量较大,需要GPU或专用ASIC加速。
2.3 点云数据格式与坐标系
深度图经过内参反投影后,即可生成点云(Point Cloud)——一组包含三维坐标(X, Y, Z)和附加属性(颜色、强度、法向量)的离散点集。点云是后续处理(滤波、分割、配准、位姿估计)的直接输入。
2.3.1 常见点云格式
| 格式 | 扩展名 | 特点 | 适用场景 |
|---|---|---|---|
| PCD | .pcd | PCL原生格式,支持ASCII/二进制,可存储自定义字段 | PCL算法开发、调试 |
| PLY | .ply | 支持顶点和面片,可含颜色、法向量 | 三维重建、网格处理 |
| XYZ | .xyz | 纯文本,每行三个浮点数,无附加属性 | 快速读写、简单可视化 |
| BIN | .bin | 二进制裸数据,紧凑高效 | 工业部署、实时传输 |
点云还可分为有序点云(按图像行列排列,可索引邻域)和无序点云(仅存储点列表,需KD-Tree加速邻域搜索)。深度相机直接输出的通常是有序点云,但经过滤波或拼接后往往变为无序。
2.3.2 坐标系定义与变换
机械臂抓取涉及多个坐标系,必须明确其定义与变换关系:
- 相机坐标系(Camera Frame):原点在光心,Z轴指向场景前方,X轴向右,Y轴向下(遵循右手定则)。
- 图像坐标系(Image Frame):二维像素坐标,原点在图像左上角,单位像素。
- 机械臂基座坐标系(Base Frame):固定在机械臂底座,是机器人运动的全局参考。
- 工具坐标系(Tool Frame):固定在末端执行器(如夹爪)上,用于描述抓取位姿。
- 用户坐标系(User Frame):操作员自定义的工作台参考系,便于编程。
从相机坐标系到机械臂基座坐标系的变换矩阵 Tbase_cam 通过手眼标定获得。手眼标定分为两种:眼在手上(Eye-in-Hand)——相机固定在机械臂末端,标定目标是相机与工具系的变换;眼在手外(Eye-to-Hand)——相机固定在外部支架,标定目标是相机与基座系的变换。常用标定方法包括AX=XB的经典解法(Tsai-Lenz算法)和基于棋盘格的多位姿采集优化。
2.4 实战案例:结构光相机抓取前的点云预处理
某3C电子装配线需要利用机械臂抓取传送带上的手机中框(铝合金材质,表面有轻微反光)。现场选用Intel RealSense D435(结构光方案),安装方式为眼在手外,工作距离约600mm。初始采集到的点云存在以下问题:
- 反光区域产生飞点:中框边缘高光处深度值跳变,出现孤立噪声点。
- 背景干扰:传送带表面纹理被误匹配,产生大量背景点。
- 坐标系未对齐:点云位于相机坐标系,无法直接用于机械臂路径规划。
处理流程如下:
// 1. 深度图预处理:使用时间中值滤波去除飞点
// 2. 点云生成:利用相机内参反投影
// 3. 直通滤波:裁剪Z轴范围[0.4m, 0.8m],去除背景
// 4. 统计滤波:计算每个点的邻域平均距离,剔除离群点
// 5. 手眼标定:采集20组机械臂位姿与棋盘格图像,计算T_base_cam
// 6. 坐标变换:将点云从相机系变换到基座系
经过上述处理后,点云信噪比显著提升。在20次重复抓取实验中,位姿估计精度从最初的±3mm提升至±0.8mm,抓取成功率从82%提升至97%。复盘发现,关键改进点在于手眼标定数据的多样性——标定时机械臂姿态应覆盖工作空间的不同区域和角度,避免退化构型导致标定矩阵奇异。