1. 手眼标定基础理解“眼在手外”与“眼在手上”在工业自动化领域手眼标定是连接视觉系统与机械运动系统的关键桥梁。简单来说它解决的是“相机看到的点”和“机械手实际位置”之间的坐标转换问题。根据相机安装位置的不同手眼标定主要分为两种模式眼在手外Eye-to-Hand相机固定在工作区域上方像一位居高临下的观察者。这种模式下相机视野范围大适合检测静态物体或大范围运动轨迹。我曾在点胶机项目中采用这种布局相机能同时监控整个PCB板上的点胶位置。眼在手上Eye-in-Hand相机安装在机械臂末端如同给机器人装上了移动的眼睛。这种配置在贴合工艺中特别实用相机可以跟随机械手移动近距离观察待贴合部件的细节。两种模式的核心差异在于坐标系的转换关系。眼在手外模式下需要建立的是相机坐标系到机器人基坐标系的固定映射而眼在手上则需要考虑相机随机械臂运动时的动态坐标转换。实际选择时我通常会考虑以下因素工作空间大小眼在手外适合大范围精度要求眼在手上通常精度更高机械结构限制有些场景无法固定相机2. 硬件准备与九点标定板制作九点标定的准确性很大程度上取决于标定板的质量。根据我的经验一个合格的标定板需要满足材质选择推荐使用厚度2mm以上的阳极氧化铝板这种材料热膨胀系数低我在高温车间实测形变小于0.01mm。如果预算有限也可以用高精度印刷的亚克力板替代但要注意环境湿度影响。图案设计标准的3×3圆形阵列是最佳选择圆直径建议为视野范围的1/8~1/10。我曾试过十字标靶但圆心检测的重复精度比十字交点高约30%。安装要求眼在手外标定板必须与机器人末端工具保持平行建议使用精密水平仪调整倾斜角度超过1°就会引入明显误差眼在手上需要设计专用夹具确保标定板在机械臂运动过程中不发生晃动这里分享一个自制标定板的参数表格参数项推荐值允许误差圆直径10mm±0.02mm圆心距25mm±0.05mm表面粗糙度Ra≤0.8μm-圆度≤0.01mm-3. 眼在手外模式九点标定全流程3.1 图像采集与圆心定位首先将标定板放置在机器人工作范围内保持与相机光轴垂直。我习惯用以下Halcon代码进行圆心检测read_image (Image, calib_9points.jpg) * 使用稳健的阈值分割方法 binary_threshold (Image, Region, max_separability, dark, UsedThreshold) * 形态学处理消除噪点 opening_circle (Region, RegionOpening, 3.5) * 精确提取圆形特征 shape_trans (RegionOpening, Circles, outer_circle) * 获取圆心坐标 area_center (Circles, Area, Row, Column)关键技巧照明要均匀我常用环形光源漫射板组合确保亮度差异不超过10%采集多张图像取平均值可以降低随机噪声影响对圆心坐标进行排序确保与机械手运动顺序一致Z字形是最稳妥的方案3.2 机械坐标记录要点控制机器人TCP末端依次对准每个圆心时要注意工具坐标系必须提前校准好我遇到过因工具坐标系偏差导致整体标定失败的情况移动速度建议设为50mm/s以下高速运动可能引起振动误差每个点停留至少0.5秒确保位置完全稳定记录坐标的典型格式robot_x : [100.0, 50.0, 0.0, 100.0, 50.0, 0.0, 100.0, 50.0, 0.0] robot_y : [0.0, 0.0, 0.0, 50.0, 50.0, 50.0, 100.0, 100.0, 100.0]3.3 矩阵计算与验证使用Halcon的核心算子进行变换矩阵计算vector_to_hom_mat2d (image_row, image_col, robot_x, robot_y, HomMat2D)验证阶段我通常会随机选取3个未参与标定的验证点计算像素坐标到机械坐标的转换误差要求X/Y方向误差均小于0.3个像素按500万像素相机计算约合0.015mm保存矩阵时建议添加时间戳write_tuple (HomMat2D, calib_matrix_date_time().tup)4. 眼在手上模式的特殊处理眼在手上模式的最大挑战是相机随机械臂运动带来的坐标系变化。我在SCARA机器人项目中发现几个关键点标定板固定要求必须牢固固定在工作平台上我曾用磁力表座固定时发生微移导致后续所有产品出现0.5mm偏差运动路径规划保持标定板始终在相机视野中心区域避免机械奇异点位置各轴应单独运动测试确认无干涉数据采集技巧每个点位采集3次取平均值记录时包含机械臂各关节角度用于后期诊断典型代码结构* 移动机械臂到第1个点 move_robot_to_position(1) * 延时确保稳定 wait_seconds(0.3) * 采集图像 grab_image (Image) * 计算圆心 find_calib_points(Image, row1, col1) * 记录机械坐标 get_robot_position(robot_x1, robot_y1)5. 标定结果优化与故障排查5.1 常见误差来源根据我的调试经验误差主要来自机械背隙特别是老旧设备相机镜头畸变建议先做镜头校正温度变化连续工作4小时后建议重新验证5.2 精度提升技巧加权标定法对中心区域点赋予更高权重* 定义权重矩阵 weights : [1.0, 1.2, 1.0, 1.2, 1.5, 1.2, 1.0, 1.2, 1.0] * 带权重的标定 create_matrix(9,1,weights,WeightMatrix) hom_vector_to_hom_mat2d(image_row,image_col,robot_x,robot_y,WeightMatrix,HomMat2D)多位置验证法在不同Z轴高度验证确保三维空间一致性动态补偿技术对于高速应用可以建立速度-误差补偿模型5.3 典型故障处理问题1标定后出现系统性偏移检查工具坐标系是否正确确认标定板与机器人基坐标系的关系问题2边缘点误差明显增大可能是镜头畸变未校正检查机械臂在该位置的重复精度问题3矩阵计算失败检查输入数据是否有NaN值确认点数不少于4组建议始终用9点在最近的一个显示屏贴合项目中通过采用加权标定温度补偿我们将定位精度从±0.1mm提升到了±0.03mm产品良率直接提高了8个百分点。这让我深刻体会到好的标定不仅是技术活更需要现场调试经验的积累。
Halcon手眼标定实战:从“眼在手外”到“眼在手上”的九点标定全流程拆解
发布时间:2026/5/26 18:23:22
1. 手眼标定基础理解“眼在手外”与“眼在手上”在工业自动化领域手眼标定是连接视觉系统与机械运动系统的关键桥梁。简单来说它解决的是“相机看到的点”和“机械手实际位置”之间的坐标转换问题。根据相机安装位置的不同手眼标定主要分为两种模式眼在手外Eye-to-Hand相机固定在工作区域上方像一位居高临下的观察者。这种模式下相机视野范围大适合检测静态物体或大范围运动轨迹。我曾在点胶机项目中采用这种布局相机能同时监控整个PCB板上的点胶位置。眼在手上Eye-in-Hand相机安装在机械臂末端如同给机器人装上了移动的眼睛。这种配置在贴合工艺中特别实用相机可以跟随机械手移动近距离观察待贴合部件的细节。两种模式的核心差异在于坐标系的转换关系。眼在手外模式下需要建立的是相机坐标系到机器人基坐标系的固定映射而眼在手上则需要考虑相机随机械臂运动时的动态坐标转换。实际选择时我通常会考虑以下因素工作空间大小眼在手外适合大范围精度要求眼在手上通常精度更高机械结构限制有些场景无法固定相机2. 硬件准备与九点标定板制作九点标定的准确性很大程度上取决于标定板的质量。根据我的经验一个合格的标定板需要满足材质选择推荐使用厚度2mm以上的阳极氧化铝板这种材料热膨胀系数低我在高温车间实测形变小于0.01mm。如果预算有限也可以用高精度印刷的亚克力板替代但要注意环境湿度影响。图案设计标准的3×3圆形阵列是最佳选择圆直径建议为视野范围的1/8~1/10。我曾试过十字标靶但圆心检测的重复精度比十字交点高约30%。安装要求眼在手外标定板必须与机器人末端工具保持平行建议使用精密水平仪调整倾斜角度超过1°就会引入明显误差眼在手上需要设计专用夹具确保标定板在机械臂运动过程中不发生晃动这里分享一个自制标定板的参数表格参数项推荐值允许误差圆直径10mm±0.02mm圆心距25mm±0.05mm表面粗糙度Ra≤0.8μm-圆度≤0.01mm-3. 眼在手外模式九点标定全流程3.1 图像采集与圆心定位首先将标定板放置在机器人工作范围内保持与相机光轴垂直。我习惯用以下Halcon代码进行圆心检测read_image (Image, calib_9points.jpg) * 使用稳健的阈值分割方法 binary_threshold (Image, Region, max_separability, dark, UsedThreshold) * 形态学处理消除噪点 opening_circle (Region, RegionOpening, 3.5) * 精确提取圆形特征 shape_trans (RegionOpening, Circles, outer_circle) * 获取圆心坐标 area_center (Circles, Area, Row, Column)关键技巧照明要均匀我常用环形光源漫射板组合确保亮度差异不超过10%采集多张图像取平均值可以降低随机噪声影响对圆心坐标进行排序确保与机械手运动顺序一致Z字形是最稳妥的方案3.2 机械坐标记录要点控制机器人TCP末端依次对准每个圆心时要注意工具坐标系必须提前校准好我遇到过因工具坐标系偏差导致整体标定失败的情况移动速度建议设为50mm/s以下高速运动可能引起振动误差每个点停留至少0.5秒确保位置完全稳定记录坐标的典型格式robot_x : [100.0, 50.0, 0.0, 100.0, 50.0, 0.0, 100.0, 50.0, 0.0] robot_y : [0.0, 0.0, 0.0, 50.0, 50.0, 50.0, 100.0, 100.0, 100.0]3.3 矩阵计算与验证使用Halcon的核心算子进行变换矩阵计算vector_to_hom_mat2d (image_row, image_col, robot_x, robot_y, HomMat2D)验证阶段我通常会随机选取3个未参与标定的验证点计算像素坐标到机械坐标的转换误差要求X/Y方向误差均小于0.3个像素按500万像素相机计算约合0.015mm保存矩阵时建议添加时间戳write_tuple (HomMat2D, calib_matrix_date_time().tup)4. 眼在手上模式的特殊处理眼在手上模式的最大挑战是相机随机械臂运动带来的坐标系变化。我在SCARA机器人项目中发现几个关键点标定板固定要求必须牢固固定在工作平台上我曾用磁力表座固定时发生微移导致后续所有产品出现0.5mm偏差运动路径规划保持标定板始终在相机视野中心区域避免机械奇异点位置各轴应单独运动测试确认无干涉数据采集技巧每个点位采集3次取平均值记录时包含机械臂各关节角度用于后期诊断典型代码结构* 移动机械臂到第1个点 move_robot_to_position(1) * 延时确保稳定 wait_seconds(0.3) * 采集图像 grab_image (Image) * 计算圆心 find_calib_points(Image, row1, col1) * 记录机械坐标 get_robot_position(robot_x1, robot_y1)5. 标定结果优化与故障排查5.1 常见误差来源根据我的调试经验误差主要来自机械背隙特别是老旧设备相机镜头畸变建议先做镜头校正温度变化连续工作4小时后建议重新验证5.2 精度提升技巧加权标定法对中心区域点赋予更高权重* 定义权重矩阵 weights : [1.0, 1.2, 1.0, 1.2, 1.5, 1.2, 1.0, 1.2, 1.0] * 带权重的标定 create_matrix(9,1,weights,WeightMatrix) hom_vector_to_hom_mat2d(image_row,image_col,robot_x,robot_y,WeightMatrix,HomMat2D)多位置验证法在不同Z轴高度验证确保三维空间一致性动态补偿技术对于高速应用可以建立速度-误差补偿模型5.3 典型故障处理问题1标定后出现系统性偏移检查工具坐标系是否正确确认标定板与机器人基坐标系的关系问题2边缘点误差明显增大可能是镜头畸变未校正检查机械臂在该位置的重复精度问题3矩阵计算失败检查输入数据是否有NaN值确认点数不少于4组建议始终用9点在最近的一个显示屏贴合项目中通过采用加权标定温度补偿我们将定位精度从±0.1mm提升到了±0.03mm产品良率直接提高了8个百分点。这让我深刻体会到好的标定不仅是技术活更需要现场调试经验的积累。