1. 课程导入与3D视觉工程认知
在二维机器视觉中,相机把三维世界投影成平面图像,我们处理的是像素坐标、灰度与边缘;而在3D机器视觉中,我们真正关心的是物体在空间中的位置、姿态、尺寸与形变。HALCON作为MVTec推出的机器视觉算法库,把3D视觉能力组织成一条从数据采集、点云处理、表面匹配到机器人手眼标定的完整技术链。学习本课程的目标,不是记住若干算子名称,而是建立"空间数据如何被获取、表达、计算并最终驱动执行机构"的工程认知。
1.1 HALCON 3D视觉技术体系
HALCON的3D能力可以按数据形态分为三条主线。第一条是基于2D成像的3D测量,包括激光三角测量、结构光、光度立体和Shape-from-Shading,其输出通常是深度图或视差图,再转换为X、Y、Z坐标。第二条是点云与网格处理,HALCON用ObjectModel3D对象承载点云,支持滤波、配准、分割、拟合平面与圆柱等几何基元。第三条是3D匹配与位姿估计,包括基于表面的3D匹配(Surface-Based Matching)和基于形状的3D匹配,输出的是刚体变换位姿,可直接交给机器人执行抓取。
这三条主线并非孤立。典型工程链路是:标定相机与手眼关系 → 采集深度或点云 → 预处理与分割 → 匹配或拟合得到位姿 → 坐标变换到机器人基坐标系 → 引导抓取或检测。理解这条链路上每一环的输入输出与误差来源,比孤立地调通某个算子更重要。
1.2 典型工业应用场景
3D视觉在工业现场的价值,往往体现在2D无法解决的场景。第一类是无序抓取:料框中零件随机堆叠,2D只能看到最上层轮廓,而3D点云可以分割出每个零件的表面并估计其六自由度位姿,引导机械臂避障抓取。第二类是装配引导:例如将连接器插入插座,需要同时知道位置和姿态,位姿误差通常要求控制在0.2mm与0.5°以内。第三类是在线尺寸测量:对铸件、钣金件测量平面度、孔位、台阶高度,3D点云可直接拟合基准平面并计算偏差。第四类是表面缺陷检测:利用光度立体恢复表面法向,检测划痕、凹坑等对光照方向敏感的缺陷。
不同场景对精度、节拍和鲁棒性的要求差异很大。例如无序抓取更看重位姿估计的鲁棒性和节拍(通常要求单次识别在1s以内),而尺寸测量更看重标定精度与点云密度。工程上必须先明确指标,再选择传感器与算法路线,而不是先选算法再补指标。
1.3 课程学习路径
本课程按"认知—基础—核心—集成—实战"推进。前几章建立3D视觉与HALCON体系认知,并完成开发环境搭建;随后进入相机模型、标定、点云数据结构等基础;中段集中讲解3D匹配、位姿估计、手眼标定等核心能力;后段通过无序抓取、尺寸测量等综合案例,把算法串成可交付的工程方案。学习时建议每章都在HALCON中实际运行示例,观察中间结果,而不是只读代码。
1.4 开发环境搭建
HALCON 3D开发通常使用HDevelop进行算法验证,再用C++/C#或Python调用导出程序。安装时需注意:HALCON版本与许可证(License)必须匹配,3D相关算子(如surface_matching、object_model_3d系列)需要相应模块授权。建议安装HALCON 20.11或更高版本,并确认HALCONROOT与HALCONARCH环境变量正确。
以Windows + HDevelop为例,验证环境是否可用的最小流程如下:
read_image (Image, 'particle')
get_image_size (Image, Width, Height)
* 生成一个简单3D对象模型,验证3D算子可用
gen_object_model_3d_from_points ([0,1,0,1], [0,0,1,1], [0,0,0,0], ObjectModel3D)
get_object_model_3d_params (ObjectModel3D, 'num_points', NumPoints)
* 若 NumPoints = 4,说明3D模块授权与运行环境正常
clear_object_model_3d (ObjectModel3D)
若在C++中调用,需在项目属性中配置包含目录$(HALCONROOT)\include、库目录$(HALCONROOT)\lib\$(HALCONARCH),并链接halconcpp.lib。Python用户可通过pip install mvtec-halcon安装,导入halcon后即可调用算子。首次运行建议先用HDevelop跑通示例,再迁移到目标语言,避免在环境问题上消耗过多时间。
完成本章后,你应当能够说清HALCON 3D视觉的三条技术主线、它们之间的数据流关系,能够列举至少四类典型工业应用并说明其精度与节拍诉求,并已在本机成功运行一个包含3D算子的最小程序。这些是后续所有章节的公共基础。