Halcon手眼标定核心:一文搞懂‘位姿’(Pose)与4个关键坐标系闭环

张开发
2026/4/20 13:48:29 15 分钟阅读

分享文章

Halcon手眼标定核心:一文搞懂‘位姿’(Pose)与4个关键坐标系闭环
Halcon手眼标定中的位姿与坐标系闭环从理论到实战在工业自动化领域机器视觉与机器人协同作业已成为智能制造的核心环节。而实现这一协同的关键在于精确的手眼标定技术——让机器人知道它的眼睛相机看到的世界与它的手末端执行器之间的空间关系。Halcon作为业界领先的机器视觉算法库其手眼标定功能被广泛应用于各类工业场景。本文将深入剖析Halcon手眼标定中的核心概念——位姿Pose与四个关键坐标系形成的闭环系统帮助工程师们从原理层面理解并掌握这一关键技术。1. 坐标系基础理解空间关系的语言任何三维空间中的定位问题本质上都是坐标系之间的转换问题。在Halcon手眼标定中四个关键坐标系构成了完整的空间描述体系标定板坐标系obj附着在标定板上的坐标系通常作为世界坐标系使用。其原点一般定义在标定板的中心Z轴垂直于标定板平面。相机坐标系cam以相机光心为原点Z轴沿光轴方向的坐标系。这是相机眼中的三维世界。工具坐标系tool固定在机器人末端执行器上的坐标系描述工具在空间中的位置和姿态。基坐标系base机器人本体的参考坐标系所有机器人运动都是相对于此坐标系进行的。表四个关键坐标系的特性对比坐标系描述典型运动状态参考对象obj标定板坐标系动态随标定板移动物理标定板cam相机坐标系静态相机固定相机光学中心tool工具坐标系动态随机器人运动末端执行器base基坐标系静态机器人底座这四个坐标系形成了一个完整的闭环从标定板到相机从相机到机器人基座从基座到工具最后工具再回到标定板。理解这个闭环是掌握手眼标定的关键。2. 位姿描述坐标系关系的通用语言位姿Pose是Halcon中描述坐标系之间相对位置和姿态的核心数据结构。一个完整的位姿包含6个自由度平移分量x, y, z描述坐标系原点之间的相对位移旋转分量rx, ry, rz描述坐标系轴之间的相对旋转在Halcon中位姿通常表示为[x, y, z, rx, ry, rz]的数组形式。需要注意的是相对性位姿总是描述一个坐标系相对于另一个坐标系的变换。例如Pose_cam_obj表示标定板坐标系相对于相机坐标系的位姿。单位一致性Halcon中平移分量默认以米为单位而许多工业机器人使用毫米为单位实际应用中需注意单位转换。旋转表示Halcon使用欧拉角rx, ry, rz表示旋转遵循特定的旋转顺序通常为ZYX顺序。关键算子应用# 位姿与齐次矩阵相互转换 hom_mat3d : pose_to_hom_mat3d(pose) # 位姿转齐次矩阵 pose : hom_mat3d_to_pose(hom_mat3d) # 齐次矩阵转位姿 # 位姿组合运算 pose_compose : pose_compose(pose1, pose2) # 组合两个位姿变换 pose_invert : pose_invert(pose) # 求逆位姿提示在实际项目中建议将关键位姿变量命名明确体现其相对关系如Pose_cam_obj比简单的Pose1更易于理解和维护。3. 动静坐标系划分手眼标定的逻辑核心手眼标定问题根据相机安装位置不同分为两种模式眼在手外Eye-to-Hand和眼在手上Eye-in-Hand。本文重点讨论眼在手外场景其核心特征是静态坐标系相机坐标系cam和机器人基坐标系base在标定过程中保持固定动态坐标系标定板坐标系obj和工具坐标系tool会随着机器人运动而变化这种动静划分直接影响标定流程的设计机器人带动标定板运动到不同位置在每个位置采集图像并记录相机检测到的标定板位姿Pose_cam_obj机器人当前的工具位姿Pose_base_tool通过多组数据求解相机相对于机器人基座的位姿Pose_base_cam标定数据采集的关键步骤确保标定板在相机视野内清晰可见机器人带动标定板在相机视野范围内进行多姿态运动每个姿态下采集图像并检测标定板获取Pose_cam_obj读取机器人当前Pose_base_tool确保数据有效性标定板检测成功机器人位姿稳定4. 闭环求解从理论到Halcon实现四个坐标系形成的闭环关系可以用数学公式表示为Pose_base_cam ∘ Pose_cam_obj Pose_base_tool ∘ Pose_tool_obj其中∘表示位姿的组合运算。Halcon提供了专门的手眼标定算子calibrate_hand_eye来求解这个方程# 典型的手眼标定流程 NumPoses : 10 # 建议至少10个不同位姿 for Index : 1 to NumPoses by 1 // 移动机器人到第Index个位姿 move_robot_to_pose(Index) // 采集图像并检测标定板 grab_image(Image) find_calibration_target(Image, CalibData, Pose_cam_obj) // 获取当前机器人位姿 get_robot_pose(Pose_base_tool) // 收集标定数据 set_calib_data(CalibData, model, general, Index, tool_in_base_pose, Pose_base_tool) set_calib_data(CalibData, model, general, Index, obj_in_cam_pose, Pose_cam_obj) endfor // 执行手眼标定 calibrate_hand_eye(CalibData, Errors, Pose_base_cam)关键参数解析CalibDataHalcon标定数据模型存储所有标定信息Errors输出各标定位姿的残差用于评估标定质量Pose_base_cam输出的相机相对于机器人基座的位姿注意实际应用中标定板的位姿Pose_tool_obj需要预先通过工具坐标系标定确定。这通常需要将标定板固定在工具上通过机械固定或视觉测量确定其相对位姿。5. 实战技巧与常见问题排查基于多个工业项目经验以下实用技巧可显著提升标定成功率标定板选择与放置使用高精度标定板推荐Halcon标准标定板确保标定板在相机视野中占据足够大的区域建议至少1/4视野避免镜面反射和强光直射位姿采集策略覆盖相机视野的不同区域包含不同的旋转角度特别是绕光轴的旋转避免所有位姿共面典型错误排查表常见手眼标定问题及解决方案问题现象可能原因解决方案标定残差大位姿变化不足增加位姿多样性标定结果不稳定机械振动确保机器人完全静止后采集数据标定板检测失败光照条件差调整光源或曝光参数转换后误差大单位不一致检查毫米/米单位转换验证方法使用标定结果进行逆向验证将标定板放在已知位置通过视觉测量和机器人运动验证精度进行端到端测试执行实际抓取或测量任务评估整体系统精度# 标定结果验证示例 // 获取标定板在当前相机下的位姿 find_calibration_target(Image, CalibData, Pose_cam_obj_new) // 计算标定板在基坐标系下的理论位置 Pose_base_obj_expected : pose_compose(Pose_base_cam, Pose_cam_obj_new) // 获取机器人当前实际工具位姿 get_robot_pose(Pose_base_tool_current) // 计算理论值与实际值的差异 Pose_diff : pose_invert(Pose_base_obj_expected) ∘ Pose_base_tool_current在实际项目中遇到的最棘手问题往往是单位混淆。曾经在一个汽车零部件检测系统中由于机器人使用毫米而Halcon使用米导致标定后定位偏差达到1000倍。经过仔细检查才发现是单位转换遗漏。这个教训让我养成了在每次标定前都明确验证单位的习惯。

更多文章