2、3D视觉基础:深度相机原理(结构光、ToF、双目)、点云数据表示与坐标系
在3D视觉引导定位与抓取项目中,深度相机是获取物体三维空间信息的核心传感器。与2D相机只能记录RGB颜色信息不同,深度相机能够直接输出场景中每个像素对应的距离(深度)值,从而生成包含三维坐标的点云数据。理解不同深度相机的工作原理、点云的数据组织方式以及坐标系之间的变换关系,是后续进行手眼标定、点云配准、目标识别与抓取规划的基础。本章将系统讲解结构光、ToF(飞行时间)和双目视觉三种主流深度相机方案的技术原理、优缺点及适用场景,并深入解析点云数据的表示方法与多坐标系转换逻辑。
2.1 三种主流深度相机技术原理
2.1.1 结构光:主动投影与三角测量
结构光深度相机的核心思想是主动投射已知编码图案(如红外散斑、条纹或网格),然后通过相机观察图案在物体表面发生的形变,利用三角测量原理计算深度。其典型硬件包括红外投影仪、红外相机和RGB相机。当投影仪将特定光斑图案投射到物体表面时,由于物体表面凹凸不平,图案会产生位移和畸变。红外相机捕捉到变形后的图案,与存储在内存中的参考图案进行相关性匹配,计算出每个像素的视差,进而通过标定参数转换为深度值。
2.1.2 ToF(飞行时间):直接测量光速往返
ToF相机通过向场景发射连续调制光(通常是红外光),并测量光线从发射到返回的相位差或时间差来计算距离。根据调制方式不同,分为连续波调制(CW-ToF)和脉冲调制(Pulsed-ToF)。CW-ToF通过检测发射信号与接收信号之间的相位偏移,间接计算飞行时间;脉冲ToF则直接计时。ToF相机的核心优势在于其实时性——每个像素独立测量深度,无需复杂的匹配算法,因此帧率较高(30-60fps),且测量距离较远(可达10m以上)。
然而,ToF相机存在多路径干扰问题:光线在物体边缘或凹面发生多次反射后,接收到的信号是多个路径的叠加,导致深度测量值偏大或产生“飞点”。此外,其分辨率通常较低(如QVGA或VGA),且多个ToF相机同时工作时会产生相互干扰。
2.1.3 双目视觉:被动立体匹配
双目视觉模拟人眼感知深度的方式,使用两个水平放置的相机同步拍摄同一场景,通过计算左右图像中对应像素点的视差(disparity),结合相机基线距离和焦距,利用相似三角形原理计算深度。其核心步骤包括:相机标定(获取内外参)、极线校正、立体匹配(SGM、BM等算法)、三角测量。双目方案最大的优势是无需主动光源,因此功耗低、不受环境光干扰,且成本相对较低。
但双目视觉的致命弱点是依赖纹理特征。对于白色墙面、光滑塑料件等缺乏纹理的区域,立体匹配算法无法找到可靠的对应点,导致深度数据大面积缺失。此外,其计算量较大,对硬件算力要求高,且精度受基线长度限制。
| 对比维度 | 结构光 | ToF | 双目视觉 |
|---|---|---|---|
| 测距原理 | 三角测量(光斑形变) | 光速飞行时间/相位差 | 立体视差匹配 |
| 主动光源 | 是(红外散斑) | 是(调制红外光) | 否(被动) |
| 典型精度 | 0.1-1mm(近距离) | 1-3cm(远距离) | 0.5-5mm(取决于基线) |
| 帧率 | 10-30fps | 30-60fps | 10-30fps(受算力限制) |
| 环境光敏感度 | 高(易受红外干扰) | 中(可加滤光片) | 低(依赖可见光纹理) |
| 弱纹理物体 | 良好 | 良好 | 失效 |
| 典型应用场景 | 近距离精密测量、人脸识别 | 中远距离避障、SLAM | 室外场景、低成本方案 |
2.2 点云数据表示与存储格式
2.2.1 点云的基本属性
点云是空间中一组离散点的集合,每个点至少包含三维坐标信息(X, Y, Z),通常还携带额外的属性。在3D视觉抓取中,最常见的点云属性包括:
- XYZ坐标:点在相机坐标系下的三维位置,单位通常为米(m)或毫米(mm)。
- RGB颜色:由RGB相机同步采集并映射到每个点,用于后续的语义分割或纹理识别。
- 法向量(Normal):表示该点所在局部表面的朝向,对点云配准、分割和位姿估计至关重要。
- 强度(Intensity):激光雷达或部分ToF相机返回的反射强度值,可用于区分不同材质。
2.2.2 点云的组织形式
根据数据存储结构,点云可分为有序点云和无序点云。有序点云通常来源于深度图,其行列索引与图像像素位置一一对应,因此可以直接通过像素坐标快速访问邻域点,极大加速了法向量估计和滤波算法的执行。无序点云则没有固定的行列关系,需要通过KD-Tree或Octree建立空间索引才能进行邻域查询。
// PCL中点云数据结构示例(C++)
pcl::PointCloud<pcl::PointXYZRGB> cloud;
cloud.width = 640; // 有序点云:宽度=640
cloud.height = 480; // 高度=480,若为1则表示无序点云
cloud.is_dense = false; // 是否包含无效点(NaN)
cloud.points.resize(cloud.width * cloud.height);
for (size_t i = 0; i < cloud.points.size(); ++i) {
cloud.points[i].x = x_val;
cloud.points[i].y = y_val;
cloud.points[i].z = z_val;
cloud.points[i].r = r_val;
cloud.points[i].g = g_val;
cloud.points[i].b = b_val;
}
2.2.3 常用文件格式与处理流程
在工程实践中,点云数据通常以PCD(Point Cloud Data)、PLY(Polygon File Format)或BIN(二进制)格式存储。PCD格式是PCL库的原生格式,支持ASCII和二进制两种编码,头部信息包含点云维度、点数、数据类型等元数据。PLY格式则更通用,支持网格和点云,且能存储法向量和颜色。在抓取项目中,建议使用二进制格式以减少磁盘占用和加载时间。
2.3 坐标系体系与变换关系
2.3.1 四大核心坐标系
在3D视觉引导抓取中,涉及多个坐标系,理解它们之间的变换关系是手眼标定的前提。主要包括:
- 世界坐标系(World):固定在机器人基座或工作空间中的绝对参考系,所有抓取目标最终都要转换到此坐标系下。
- 相机坐标系(Camera):以相机光心为原点,Z轴指向场景前方,X轴向右,Y轴向下(遵循右手定则)。深度相机输出的点云坐标即在此坐标系下。
- 图像坐标系(Image):以图像左上角为原点,单位为像素,描述点在2D图像中的位置。
- 机器人工具坐标系(Tool):固定在机器人末端法兰盘或吸盘上的坐标系,用于描述抓取姿态。
2.3.2 坐标变换的数学表达
从相机坐标系到世界坐标系的变换是一个刚体变换,包含旋转矩阵R(3x3)和平移向量t(3x1)。齐次变换矩阵T(4x4)将旋转和平移统一表示:
T = | R t |
| 0 1 |
假设点P在相机坐标系下的坐标为Pc,在世界坐标系下的坐标为Pw,则Pw = R * Pc + t。手眼标定的核心任务就是求解这个变换矩阵T(即相机到机器人基座的位姿关系)。根据相机安装方式不同,分为Eye-in-Hand(相机装在机器人末端)和Eye-to-Hand(相机固定在工作区上方)两种标定模式。
2.3.3 深度图到点云的转换公式
对于深度相机,每个像素(u, v)对应的深度值d,可以通过相机内参(fx, fy, cx, cy)转换为相机坐标系下的三维点:
Z = d / scale_factor // 深度值单位转换(如1mm或0.001m)
X = (u - cx) * Z / fx
Y = (v - cy) * Z / fy
2.4 实战场景:结构光相机在金属工件抓取中的深度空洞处理
在某汽车零部件装配线上,使用结构光深度相机(型号:RealSense D435)引导机器人抓取铝合金支架。初始调试时发现,当工件表面存在机加工刀纹且呈镜面反射时,深度图出现大量黑色空洞(深度值为0),导致点云不完整,无法准确计算抓取点。
问题分析:结构光依赖红外散斑的反射,金属表面镜面反射使大部分红外光被反射到其他方向,红外相机接收不到足够的散射光,导致匹配失败。通过观察不同角度下的深度图,发现当相机与工件表面夹角小于30度时,空洞尤为严重。
解决步骤:
- 调整相机安装角度,使光轴与工件表面法线夹角控制在30-60度之间,减少镜面反射影响。
- 在工件表面喷涂一层薄薄的显像剂(或防锈油),增加漫反射,但需注意后续清洁工艺。
- 采用多帧融合策略:让机器人带动相机在多个微小角度下采集深度图,通过点云配准(ICP)融合成完整点云。
- 对仍存在的空洞区域,使用周边有效点的插值算法(如最近邻或双线性插值)进行填充,但需设置置信度阈值,避免过度平滑。
结果对比:处理后点云完整度从72%提升至98%,抓取成功率从85%提升至99.5%。但代价是节拍时间增加了约0.8秒(多帧采集与配准耗时)。
2.5 常见误区与总结
在深度相机选型与点云处理中,工程师常犯以下错误:
- 误区一:认为深度相机输出的点云直接就是世界坐标。实际上,点云默认在相机坐标系下,必须经过手眼标定矩阵变换才能用于机器人引导。
- 误区二:忽略深度图与RGB图的对齐。未对齐时,点云颜色信息错位,导致基于颜色的分割算法失效。
- 误区三:对所有场景都使用同一种深度相机。应结合工作距离、精度要求、环境光照、物体材质等因素综合选型。
- 误区四:点云滤波过度。例如使用体素栅格降采样时,若体素尺寸过大,会丢失细小特征(如销钉、凹槽),影响后续位姿估计精度。
总结而言,深度相机是3D视觉系统的“眼睛”,而点云与坐标系变换则是“神经”。只有深入理解三种主流方案的物理原理与工程边界,掌握点云的数据组织与坐标变换方法,才能在实际抓取项目中快速定位问题、优化系统性能。下一阶段,我们将基于这些基础,进一步探讨手眼标定的具体实施与点云预处理算法。