2. 机器人视觉引导任务建模

在上一节中,我们已经明确了视觉引导系统的整体定位:它不是一个孤立的图像处理程序,而是连接“感知”与“动作”的中间层。本节要解决的核心问题是:如何把一个真实的机器人作业任务,拆解成视觉系统能够处理的输入输出、坐标系关系和节拍约束。如果这一步没有做清楚,后面的标定、手眼转换、路径规划都会失去依据。

一、三类典型任务的本质差异

抓取、装配、码垛虽然都叫“视觉引导”,但它们对视觉系统的要求并不相同。理解差异,是任务建模的起点。

抓取(Pick):目标是从散乱或有序的物料中,找到一个可抓取位姿,并引导机器人末端到达该位姿完成夹取。视觉的核心输出是目标位姿(X, Y, Z, Rx, Ry, Rz),其中 Z 和姿态往往由抓取策略决定,而不是由目标本身唯一决定。例如平面放置的工件,视觉只需给出平面位置和绕 Z 轴旋转角,抓取高度由夹具长度和工件厚度推算。

装配(Assemble):目标是把两个或多个零件以特定配合关系组合。视觉不仅要定位,还要判断配合间隙、插入方向、对位偏差。装配任务对姿态精度要求远高于抓取,通常需要亚毫米级重复定位,且往往需要多视角或力觉辅助。视觉输出除了位姿,还可能包括偏差量(Δx, Δy, Δθ),供机器人做微调补偿。

码垛(Palletize):目标是把工件按预定垛型逐层摆放。视觉的核心任务不是“找工件”,而是确认来料位置、校验垛型、检测放置结果。码垛的节拍压力通常最大,视觉系统必须在极短时间内完成定位和判断,且要能处理来料姿态不一致的情况。

任务建模的第一步,不是打开 HALCON 写算子,而是用一句话写清楚:视觉系统要回答什么问题? 抓取回答“工件在哪、怎么抓”;装配回答“对得准不准、差多少”;码垛回答“放得对不对、下一块放哪”。

二、输入输出与坐标系定义

任何视觉引导任务,都可以用一组输入输出关系来描述。输入包括:相机图像、机器人当前位姿、工件型号与抓取策略、标定参数。输出包括:目标在机器人坐标系下的位姿、抓取/放置动作指令、以及置信度或异常标志。

坐标系定义是任务建模中最容易出错的部分。一个完整的视觉引导系统通常涉及以下坐标系:

  • 像素坐标系(Image):图像行列坐标,单位 pixel,原点在图像左上角。
  • 相机坐标系(Camera):原点在相机光心,Z 轴沿光轴指向场景,单位 mm。
  • 标定板/工件坐标系(Object):定义在工件或标定板上的局部坐标系,用于描述目标位姿。
  • 机器人基坐标系(Base):机器人本体基准,所有运动指令最终都转换到该坐标系。
  • 工具坐标系(Tool):定义在末端执行器上,描述夹爪或吸盘的中心点与方向。

视觉引导的本质,就是建立从像素 → 相机 → 机器人基座 → 工具的坐标变换链。在 HALCON 中,这一链通常由 vector_to_hom_mat3d、hom_mat3d_compose 等算子构建,最终得到一个 4×4 齐次变换矩阵。需要特别注意的是:旋转方向的正负号必须与机器人控制器约定一致。例如绕 Z 轴逆时针为正还是顺时针为正,不同品牌机器人可能不同,必须在建模阶段明确并写入文档。

视觉引导任务建模:输入输出与坐标变换链 输入 • 相机图像(2D/3D) • 机器人当前位姿 • 工件型号与抓取策略 • 标定参数(手眼矩阵) • 节拍与精度要求 视觉处理与坐标变换 1. 图像预处理 → 特征提取 2. 目标识别 → 像素位姿 3. 像素 → 相机坐标(标定) 4. 相机 → 机器人基座(手眼) 5. 基座 → 工具坐标(TCP) 输出 • 目标位姿(X,Y,Z, Rx,Ry,Rz) • 抓取/放置指令 • 偏差补偿量 • 置信度/异常标志 坐标系变换链(以 Eye-to-Hand 为例) 像素坐标系 Image (u,v) 相机坐标系 Camera (Xc,Yc,Zc) 机器人基坐标系 Base (Xb,Yb,Zb) 工具坐标系 Tool (TCP) 标定 手眼矩阵 TCP 关键约定:旋转正方向、单位(mm/rad)、手眼关系(Eye-to-Hand / Eye-in-Hand)必须在建模阶段明确并写入文档。 HALCON 中常用算子:vector_to_hom_mat3d、hom_mat3d_compose、affine_trans_point_3d。

三、任务流程与节拍约束

任务建模的第三个维度是时间。视觉引导系统必须在机器人运动周期内完成“拍照—处理—输出”的全过程,否则就会成为产线瓶颈。

以典型的抓取任务为例,一个完整循环包括:机器人移动到拍照位 → 触发相机 → 图像采集 → 视觉处理 → 位姿计算 → 机器人移动到抓取位 → 夹取 → 放置。其中视觉处理时间通常要求控制在 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, θzZ 由夹具厚度推算
坐标系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,并在结果为空时触发报警逻辑。

换句话说,任务建模不是“写文档”,而是把真实作业需求翻译成视觉系统的技术规格。没有这一步,后面的代码再漂亮,也可能因为坐标系定义错误或节拍不达标而无法上线。

本节的核心结论可以概括为三句话:先定义任务要回答什么问题,再定义坐标系和变换链,最后用节拍和精度约束筛选算法。这三步做完,视觉引导系统的骨架就已经立起来了。