4. 3D视觉传感器原理
做3D视觉抓取,第一步就是选对“眼睛”。
我刚开始接触这个领域时,也以为随便买个深度相机就能用。结果呢?项目现场环境光一强,点云直接飞了。嗯,今天咱们就把深度相机的底裤扒干净,看看它到底是怎么“看”到三维世界的。
4.1 深度相机工作原理:三种主流方案
目前工业界和学术界主流的深度相机,说白了就三种技术路线:结构光、ToF(飞行时间)、双目立体视觉。它们各有各的脾气,选错了,后面手眼标定再准也白搭。
4.1.1 结构光(Structured Light)
原理很简单:投影仪打出一组已知图案的光斑或条纹到物体表面,相机拍摄这些图案的变形,通过三角测量算出深度。
- 优点:在室内、弱光环境下精度很高,能达到亚毫米级。我个人习惯在抓取小零件时优先考虑它。
- 缺点:见光死。在强环境光(比如车间窗户边)或反光物体(金属、镜面)上,效果很差。
- 代表产品:微软Kinect v1、Intel RealSense D400系列(部分型号)。
4.1.2 飞行时间法(ToF)
ToF相机发射调制过的红外光脉冲,测量光从发射到返回的时间差,直接算出距离。这就像蝙蝠的回声定位。
- 优点:速度快,能到30fps甚至更高,适合抓取运动中的物体。抗环境光能力比结构光强。
- 缺点:分辨率普遍偏低(通常VGA级别),边缘精度不如结构光,而且多路径干扰(比如物体边缘)容易产生噪点。
- 代表产品:微软Kinect v2/Azure Kinect、PMD、TI OPT系列。
4.1.3 双目立体视觉(Binocular Stereo)
模拟人眼,用两个相机从不同角度拍摄同一场景,通过匹配左右图像中的对应点,利用视差计算深度。
- 优点:硬件成本低(两个普通相机就行),室内室外都能用,纹理越丰富精度越高。
- 缺点:计算量大,依赖GPU。在弱纹理(比如白墙)或重复纹理区域,匹配会失败,导致深度缺失。
- 代表产品:ZED相机、Intel RealSense T系列、大疆妙算。
你想想看,为什么现在很多仓储AGV用双目?因为它不怕阳光,而且能看远。
4.1.4 三种方案对比
| 特性 | 结构光 | ToF | 双目立体视觉 |
|---|---|---|---|
| 精度 | 高(亚毫米) | 中(毫米级) | 中(依赖基线长度) |
| 帧率 | 低(<30fps) | 高(>30fps) | 中(10-30fps) |
| 抗环境光 | 弱 | 中 | 强 |
| 弱纹理 | 好(主动投射) | 好(主动投射) | 差(依赖纹理) |
| 成本 | 中 | 高 | 低 |
| 典型场景 | 静态小零件 | 动态抓取 | 室外/大场景 |
4.2 点云数据格式:PCD、PLY、ROS Bag
相机采集到的原始数据,经过处理后就变成了点云。点云本质上就是一堆三维坐标点(x, y, z),可能还带有颜色(RGB)或强度信息。
我见过很多新手,拿到点云数据后,连格式都不看就硬读,结果程序崩溃。这里我重点讲三种最常见的格式。
4.2.1 PCD(Point Cloud Data)
这是PCL(Point Cloud Library)的原生格式。它的特点是:头部信息清晰,包含点云大小、字段定义(x, y, z, rgb, normal等)、数据类型(float, int等)。
# .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 640
HEIGHT 480
VIEWPOINT 0 0 0 1 0 0 0
POINTS 307200
DATA ascii
0.123 0.456 0.789 4294967295
...
4.2.2 PLY(Polygon File Format)
PLY格式比PCD更通用,它不仅能存点云,还能存三角网格(Mesh)。在3D建模和扫描领域非常流行。
- 优点:支持多种属性(颜色、法向量、透明度),且可以同时存储点和面片。
- 缺点:文件体积通常比PCD大,因为要存储面片索引。
- 使用场景:当你需要把点云重建为Mesh模型,或者与Blender、MeshLab等软件交互时,PLY是首选。
我记得有一次,客户给了一个STL模型,我需要把它转成点云做配准。我先把STL转成PLY,再用PCL的pcl_mesh_sampling工具采样成PCD。这一套流程,我闭着眼睛都能走完。
4.2.3 ROS Bag
如果你用ROS(Robot Operating System)做开发,那Bag文件就是你的“录像机”。它记录的是ROS话题(Topic)上的消息流,包括深度图像、相机内参、TF变换等。
# 录制bag
rosbag record /camera/depth/image_raw /camera/color/image_raw /camera_info
# 回放bag
rosbag play your_bag.bag
# 从bag中提取点云
rosrun pcl_ros bag_to_pcd your_bag.bag /camera/depth/points output_directory
4.3 传感器选型指南
选型这件事,没有的“最好”,只有“最合适”。我总结了一个四步法,帮你快速锁定目标。
- 看工作距离:抓取距离是0.3米还是3米?结构光适合近距(<1m),ToF和双目适合中远距。
- 看物体材质:高反光?黑色吸光?透明?如果是,优先考虑双目或工业级激光轮廓仪。
- 看环境光:车间有阳光直射?那就别选结构光。ToF和双目更抗造。
- 看精度要求:需要抓取毫米级精度的零件?结构光或高分辨率双目。只是抓取快递包裹?ToF足够了。
下面这张图,是我自己总结的选型决策流程,希望能帮你少走弯路。