1. 3D视觉系统概述:从2D到3D的跨越
各位同学,欢迎来到《Halcon3D测量与无序抓取标定精度优化实战》的第一章。
说实话,我刚开始做机器视觉那会儿,用的全是2D相机。检测有无、测量尺寸、识别字符,2D确实能解决不少问题。但后来遇到一个项目——要抓取堆叠在一起的刹车盘,2D直接懵了。为什么?因为没有高度信息,你根本分不清哪个零件在上层,哪个在下层。
这就是我们今天要聊的:从2D到3D的跨越。
1.1 为什么需要3D视觉?
2D视觉说白了就是拍一张平面照片。它只能提供X、Y两个维度的信息。而3D视觉多了一个Z轴——深度信息。
我遇到过不少工程师,觉得3D就是“高级一点的2D”。其实不是。3D能解决2D搞不定的三类场景:
- 高度测量:比如检测芯片引脚共面性,2D根本看不到高度差
- 无序抓取:零件乱堆在一起,2D无法区分前后遮挡关系
- 三维轮廓检测:比如汽车钣金件的曲面间隙,2D只能测平面
核心观点:2D看的是“有没有”,3D看的是“在哪里、有多高、什么姿态”。
1.2 3D相机选型:结构光、双目、ToF
选3D相机,说白了就是选“怎么测深度”。目前主流方案有三种。我一个个说。
1.2.1 结构光
原理很简单:投影仪打出特定条纹或点阵图案,相机拍下图案变形,通过三角法算出深度。
优点:精度高,能达到微米级。我做过一个手机中框平面度检测项目,用的就是结构光,重复精度0.02mm。
缺点:怕环境光。在强光下,投影图案会被淹没。另外,对被测物体表面也有要求——太黑、太亮、透明的都不好搞。
1.2.2 双目立体视觉
模仿人眼。两个相机从不同角度拍同一物体,通过匹配左右图像中的对应点,算出深度。
优点:硬件成本低,两个普通工业相机就行。适合户外、大视野场景。
缺点:计算量大,对纹理要求高。纯色表面(比如白色墙壁)匹配会失败。我曾经在汽车内饰检测项目里踩过这个坑——黑色塑料件表面太光滑,双目根本匹配不上。
1.2.3 ToF(飞行时间法)
发射光脉冲,测量光返回的时间,直接算出距离。
优点:速度快,能到30fps以上。适合动态场景,比如AGV避障。
缺点:精度低,一般在厘米级。分辨率也低,不适合精密测量。
| 类型 | 精度 | 速度 | 抗环境光 | 典型应用 |
|---|---|---|---|---|
| 结构光 | 高(μm~mm) | 中(1~10fps) | 弱 | 精密测量、3C检测 |
| 双目 | 中(mm级) | 中(取决于算法) | 强 | 大视野、户外 |
| ToF | 低(cm级) | 快(30fps+) | 中 | 避障、人机交互 |
我的选型建议:做精密测量,优先结构光;做无序抓取,如果零件有纹理,双目性价比高;如果只做避障或粗定位,ToF够用。
1.3 Halcon3D模块简介
Halcon从13版本开始,把3D功能独立成一个模块。说实话,我用了这么多年,Halcon的3D模块在工业界确实算第一梯队。
它主要包含这几块:
- 3D数据采集:支持结构光、双目、ToF、激光三角等多种传感器
- 3D数据预处理:滤波、去噪、点云分割、法向量估计
- 3D测量:平面度、圆度、距离、角度、体积等
- 3D匹配与定位:基于点云或表面的模板匹配,用于抓取位姿计算
- 3D标定:相机内参、手眼标定、多相机联合标定
嗯,这里要注意:Halcon的3D模块不是独立的,它和2D模块共享很多算子。比如你处理点云时,用的还是熟悉的read_object_model_3d、visualize_object_model_3d这些。
避坑提醒:我曾经在项目里直接用Halcon的默认参数处理点云,结果滤波过度,把零件边缘特征都滤掉了。后来我习惯先做小范围测试,调好参数再批量处理。
1.4 3D视觉系统知识框架
下面这张图,是我自己总结的3D视觉系统知识框架。你把它记在心里,后面30章的内容,都是围绕这个框架展开的。
1.5 本章小结
这一章,我们聊了三个核心问题:
- 为什么需要3D?——因为2D搞不定高度、遮挡、姿态问题
- 3D相机怎么选?——结构光精度高但怕光,双目便宜但挑纹理,ToF快但精度低
- Halcon3D能做什么?——从采集、预处理、测量到匹配定位,一条龙
我个人习惯,每开始一个新项目,第一件事就是画上面那张框架图。把选型、标定、算法、应用四个环节理清楚,后面才不会走偏。