2. 机器人视觉引导任务建模
在上一节中,我们已经明确了视觉引导系统的整体定位:它不是一个孤立的图像处理程序,而是连接“感知”与“动作”的中间层。本节要解决的核心问题是:如何把一个真实的机器人作业任务,拆解成视觉系统能够处理的输入输出、坐标系关系和节拍约束。如果这一步没有做清楚,后面的标定、手眼转换、路径规划都会失去依据。
一、三类典型任务的本质差异
抓取、装配、码垛虽然都叫“视觉引导”,但它们对视觉系统的要求并不相同。理解差异,是任务建模的起点。
抓取(Pick):目标是从散乱或有序的物料中,找到一个可抓取位姿,并引导机器人末端到达该位姿完成夹取。视觉的核心输出是目标位姿(X, Y, Z, Rx, Ry, Rz),其中 Z 和姿态往往由抓取策略决定,而不是由目标本身唯一决定。例如平面放置的工件,视觉只需给出平面位置和绕 Z 轴旋转角,抓取高度由夹具长度和工件厚度推算。
装配(Assemble):目标是把两个或多个零件以特定配合关系组合。视觉不仅要定位,还要判断配合间隙、插入方向、对位偏差。装配任务对姿态精度要求远高于抓取,通常需要亚毫米级重复定位,且往往需要多视角或力觉辅助。视觉输出除了位姿,还可能包括偏差量(Δx, Δy, Δθ),供机器人做微调补偿。
码垛(Palletize):目标是把工件按预定垛型逐层摆放。视觉的核心任务不是“找工件”,而是确认来料位置、校验垛型、检测放置结果。码垛的节拍压力通常最大,视觉系统必须在极短时间内完成定位和判断,且要能处理来料姿态不一致的情况。
二、输入输出与坐标系定义
任何视觉引导任务,都可以用一组输入输出关系来描述。输入包括:相机图像、机器人当前位姿、工件型号与抓取策略、标定参数。输出包括:目标在机器人坐标系下的位姿、抓取/放置动作指令、以及置信度或异常标志。
坐标系定义是任务建模中最容易出错的部分。一个完整的视觉引导系统通常涉及以下坐标系:
- 像素坐标系(Image):图像行列坐标,单位 pixel,原点在图像左上角。
- 相机坐标系(Camera):原点在相机光心,Z 轴沿光轴指向场景,单位 mm。
- 标定板/工件坐标系(Object):定义在工件或标定板上的局部坐标系,用于描述目标位姿。
- 机器人基坐标系(Base):机器人本体基准,所有运动指令最终都转换到该坐标系。
- 工具坐标系(Tool):定义在末端执行器上,描述夹爪或吸盘的中心点与方向。
视觉引导的本质,就是建立从像素 → 相机 → 机器人基座 → 工具的坐标变换链。在 HALCON 中,这一链通常由 vector_to_hom_mat3d、hom_mat3d_compose 等算子构建,最终得到一个 4×4 齐次变换矩阵。需要特别注意的是:旋转方向的正负号必须与机器人控制器约定一致。例如绕 Z 轴逆时针为正还是顺时针为正,不同品牌机器人可能不同,必须在建模阶段明确并写入文档。
三、任务流程与节拍约束
任务建模的第三个维度是时间。视觉引导系统必须在机器人运动周期内完成“拍照—处理—输出”的全过程,否则就会成为产线瓶颈。
以典型的抓取任务为例,一个完整循环包括:机器人移动到拍照位 → 触发相机 → 图像采集 → 视觉处理 → 位姿计算 → 机器人移动到抓取位 → 夹取 → 放置。其中视觉处理时间通常要求控制在 100~300 ms 以内,高速产线甚至要求 50 ms 以下。
节拍约束会直接影响算法选择。例如:
- 若工件特征简单、背景干净,可用
find_shape_model做模板匹配,单次耗时约 10~30 ms。 - 若工件表面无纹理,需用 3D 点云配准,耗时可能上升到 200~500 ms,此时必须考虑降采样或 ROI 裁剪。
- 若来料姿态随机,需要多角度搜索,可通过金字塔层级和角度步长来平衡速度与精度。
精度约束同样需要量化。抓取任务通常要求 ±0.5 mm 的定位精度;装配任务可能要求 ±0.05 mm;码垛对绝对精度要求较低,但对重复精度要求高,通常要求 ±0.2 mm。这些指标必须在建模阶段明确,并作为后续标定和验证的依据。
四、建模交付物:任务定义表
为了让任务建模的结果可执行、可验证,建议在项目初期产出一份视觉引导任务定义表。它不是管理文档,而是后续标定、编程和验收的技术依据。以下是一个抓取任务的示例字段:
| 字段 | 示例值 | 说明 |
|---|---|---|
| 任务类型 | 平面抓取 | 抓取/装配/码垛 |
| 工件 | 金属法兰盘,直径 80 mm | 尺寸、材质、特征 |
| 视觉输出 | X, Y, θz | Z 由夹具厚度推算 |
| 坐标系 | Eye-to-Hand,基座坐标系 | 手眼关系与目标坐标系 |
| 精度要求 | ±0.3 mm,±0.5° | 重复定位精度 |
| 节拍要求 | 视觉处理 ≤ 150 ms | 从触发到输出 |
| 异常处理 | 未识别 → 报警并跳过 | 置信度阈值 0.7 |
这张表的价值在于:它把“视觉引导”从一个模糊的概念,变成了可测量、可验收的工程对象。当后续出现定位偏差时,可以逐项排查是标定问题、算法问题还是节拍导致的降采样问题,而不是盲目调参。
五、从任务到 HALCON 实现的映射
任务建模完成后,才进入 HALCON 实现阶段。此时,建模结果会直接决定算子选择和参数配置。例如:
- 若任务定义表要求“平面抓取、±0.3 mm”,则标定环节应使用高精度标定板,并采用
calibrate_hand_eye做手眼标定,而不是简单的九点标定。 - 若节拍要求 ≤ 150 ms,则模板匹配应限制在 ROI 内,并设置合适的
MinScore和NumMatches,避免全图搜索。 - 若异常处理要求置信度阈值 0.7,则
find_shape_model的MinScore应设为 0.7,并在结果为空时触发报警逻辑。
换句话说,任务建模不是“写文档”,而是把真实作业需求翻译成视觉系统的技术规格。没有这一步,后面的代码再漂亮,也可能因为坐标系定义错误或节拍不达标而无法上线。
本节的核心结论可以概括为三句话:先定义任务要回答什么问题,再定义坐标系和变换链,最后用节拍和精度约束筛选算法。这三步做完,视觉引导系统的骨架就已经立起来了。