返回主站|会员中心|保存桌面

ABB机器人备品配件服务商    

ABB机器人备件,ABB示教器,ABB伺服电机,ABB减速机,ABB通讯...

站内搜索
 
新闻分类
  • 暂无分类
联系方式
  • 联系人:吴经理
  • 电话:18576370666
友情链接
首页 > 新闻中心 > 如何实现ABB机器人与视觉系统的自动标定?
新闻中心
如何实现ABB机器人与视觉系统的自动标定?
发布时间:2025-12-10        浏览次数:3        返回列表

ABB 机器人与视觉系统的自动标定是消除手眼安装误差、实现视觉坐标到机器人基坐标精准映射的核心环节,核心分为「手眼标定(Eye-in-Hand/Eye-to-Hand)」和「坐标转换自动校准」两大类型,以下结合 ABB 机器人的 RAPID 编程、视觉系统工具链(如 Halcon / 康耐视 VisionPro),给出标准化自动标定流程、关键配置和实战案例,覆盖主流工业场景。

一、先明确标定类型(核心前提)

根据相机安装方式,自动标定分为两种核心模式,需先匹配现场硬件布局:

标定类型相机安装位置适用场景标定核心目标
Eye-to-Hand(眼在手外)固定在机器人工作区域旁 / 机架上静态抓取、流水线质检标定「相机坐标系→机器人基坐标系」转换矩阵
Eye-in-Hand(眼在手上)安装在机器人末端法兰 / 夹爪上动态抓取、复杂路径定位标定「相机坐标系→机器人工具坐标系」转换矩阵 + 手眼关系

二、自动标定核心原理

  1. 标定物:使用标准标定板(如棋盘格、圆点阵,ABB 推荐高精度陶瓷标定板,精度 ±0.01mm);

  2. 核心逻辑

    • 机器人带动标定板(Eye-to-Hand)或相机(Eye-in-Hand)移动到 N 个(≥6 个)不同姿态;

    • 视觉系统采集每个姿态下标定板的像素坐标,机器人记录自身关节坐标 / 笛卡尔坐标;

    • 视觉软件(如 Halcon)或 ABB RobotStudio 通过算法(如张正友标定法、LM 优化)自动计算坐标转换矩阵;

    • 矩阵写入机器人系统变量,实现视觉坐标到机器人坐标的实时自动转换。

三、标准化自动标定流程(以 Eye-to-Hand 为例,最常用)

步骤 1:硬件与环境准备

  1. 标定板选型:根据工作距离选择(如工作距离 500mm→选 20×15 棋盘格,格子尺寸 10mm);

  2. 相机安装固定:Eye-to-Hand 模式下将相机固定在机器人工作区域上方,确保标定板移动范围完全覆盖相机视野;

  3. 通讯预配置

    • 机器人与视觉 PC 通过以太网建立 TCP/IP 通讯(RobotStudio 配置 IP,与视觉 PC 同一网段);

    • 视觉软件开启 Socket 服务(如 Halcon 设置端口 5000,机器人作为客户端连接);

    • 机器人端定义标定相关变量(如num cali_pose{6,6}存储 6 个姿态的坐标,mat3 cali_mat存储转换矩阵)。

步骤 2:视觉系统单目标定(先校准相机自身)

自动标定前需先完成相机内参标定(消除镜头畸变),以 Halcon 为例:

  1. 打开 Halcon「Calibrate Camera」助手,选择标定板类型(与实际匹配);

  2. 采集 10~15 张不同角度 / 距离的标定板图像(手动移动标定板,或机器人自动移动);

  3. 软件自动计算相机内参(焦距、主点、畸变系数),保存为camera_param文件。

步骤 3:机器人端自动移动程序编写(RAPID)

编写 RAPID 程序,控制机器人带动标定板移动到预设的 6 个以上姿态,每个姿态触发视觉采集:

rapid

PROC Auto_Cali_Move()
    ! 初始化变量
    num pose_idx:=1;          ! 姿态索引
    num cali_poses{6,3}:=[[500,300,200],[550,350,200],[500,400,200],[450,350,200],[500,300,250],[500,400,250]]; ! 6个标定姿态的X/Y/Z坐标
    robtarget cali_tgt;       ! 标定目标位姿
    bool cali_ok:=FALSE;      ! 标定完成标志

    ! 循环移动到每个标定姿态
    WHILE pose_idx<=6 DO
        ! 1. 机器人移动到当前标定姿态
        cali_tgt.trans.x:=cali_poses[pose_idx,1];
        cali_tgt.trans.y:=cali_poses[pose_idx,2];
        cali_tgt.trans.z:=cali_poses[pose_idx,3];
        cali_tgt.rot:=Quaternion(0,0,1,0); ! 姿态角(可根据需求调整)
        MoveJ cali_tgt, v100, z50, tool0;  ! 关节移动到目标位姿
        WaitTime 0.5;                      ! 稳定后触发视觉采集

        ! 2. 发送触发信号给视觉系统(Socket通讯)
        SocketSend("Trigger_Cali",5000);   ! 发送“触发标定”指令到视觉PC端口5000

        ! 3. 接收视觉反馈的标定板像素坐标
        SocketRecv(cali_pix[pose_idx,1],cali_pix[pose_idx,2],5000); ! 接收X/Y像素坐标

        ! 4. 记录机器人当前笛卡尔坐标
        cali_robot[pose_idx,1]:=cali_tgt.trans.x;
        cali_robot[pose_idx,2]:=cali_tgt.trans.y;
        cali_robot[pose_idx,3]:=cali_tgt.trans.z;

        pose_idx:=pose_idx+1;
    ENDWHILE

    ! 5. 发送所有数据给视觉系统,请求计算转换矩阵
    SocketSend("Calc_Matrix",5000);
    SocketSendArray(cali_robot,cali_pix,5000); ! 发送机器人坐标和像素坐标数组

    ! 6. 接收视觉返回的转换矩阵并保存
    SocketRecvMat(cali_mat,5000);             ! 接收3×4转换矩阵
    PersSet("Cali_Matrix",cali_mat);          ! 保存到永久变量,供抓取程序调用
    cali_ok:=TRUE;
ENDPROC

步骤 4:视觉系统自动计算转换矩阵(Halcon 示例)

视觉 PC 接收机器人坐标和像素坐标后,通过 Halcon 自动计算「像素坐标→机器人坐标」转换矩阵:

hdevelop

! 1. 读取机器人发送的坐标数据
read_socket_data ('192.168.1.100', 5000, Robot_XYZ, Pixel_XY)

! 2. 转换坐标格式(像素→世界)
gen_calib_data ('calibration_object', 1, 1, CalibDataID)
set_calib_data_cam_param (CalibDataID, 0, 'area_scan_division', CameraParam) ! 加载相机内参
set_calib_data_calib_object (CalibDataID, 0, 'calibration_object_descr_3d.txt') ! 加载标定板3D描述

! 3. 遍历所有标定姿态,添加标定数据
for Index := 0 to 5 by 1
    ! 机器人坐标(世界坐标)
    X := Robot_XYZ[Index,0]
    Y := Robot_XYZ[Index,1]
    Z := Robot_XYZ[Index,2]
    ! 添加标定点
    find_calib_object (Image, CalibDataID, 0, 0, Index, [], [])
    set_calib_data_observ_points (CalibDataID, 0, 0, Index, Row, Column, [])
! 4. 自动计算手眼转换矩阵
calibrate_cameras (CalibDataID, Error)
get_calib_data (CalibDataID, 'camera', 0, 'extrinsic', CamPose) ! 外参(转换矩阵)

! 5. 将矩阵发送给ABB机器人
send_socket_data ('192.168.1.101', 5000, CamPose)

步骤 5:机器人端坐标转换与验证

  1. 抓取视觉实时发送的物料像素坐标(如pix_x=1200, pix_y=800);

  2. 调用保存的转换矩阵,将像素坐标转换为机器人坐标:

    rapid

  3. PROC Pix2Robot(num pix_x, num pix_y, OUT rob_x, OUT rob_y, OUT rob_z)
        ! 加载标定矩阵
        cali_mat:=PersGet("Cali_Matrix");
        ! 矩阵运算:机器人坐标 = 像素坐标 × 转换矩阵 + 偏移量
        rob_x:=pix_x*cali_mat[1,1] + pix_y*cali_mat[1,2] + cali_mat[1,4];
        rob_y:=pix_x*cali_mat[2,1] + pix_y*cali_mat[2,2] + cali_mat[2,4];
        rob_z:=pix_x*cali_mat[3,1] + pix_y*cali_mat[3,2] + cali_mat[3,4];
    ENDPROC
  4. 验证:机器人移动到转换后的坐标,检查是否精准对准标定板中心(误差≤0.1mm 为合格)。

四、Eye-in-Hand 模式自动标定(补充)

若相机安装在机器人末端,需额外标定「工具坐标系与相机坐标系」的关系,核心差异:

  1. 标定板固定在工作台,机器人带动相机绕标定板移动 6~8 个姿态;

  2. 视觉采集每个姿态下标定板的像素坐标,机器人记录工具坐标系的位姿;

  3. Halcon 中调用calibrate_hand_eye函数,自动计算手眼矩阵(HandEyeMat);

  4. 机器人端最终坐标转换:机器人基坐标 = 工具坐标 × 手眼矩阵 × 像素坐标转换矩阵

五、ABB 官方工具:RobotWare 视觉标定包(简化版)

若使用 ABB 官方视觉集成方案(如与康耐视 / 基恩士合作),可直接调用 RobotWare 的「Visual Calibration」功能包,实现一键自动标定:

  1. 在 RobotStudio 中安装视觉标定插件;

  2. 示教器中进入「Calibration→Visual Calibration」,选择标定类型(Eye-in-Hand/Eye-to-Hand);

  3. 按照向导提示,确认标定板参数、相机 IP;

  4. 点击「Auto Calibrate」,机器人自动移动并完成标定,矩阵自动保存到系统变量$VISION_CALIB_MAT

六、常见问题与优化

标定异常现象排查 / 优化方向
标定误差>0.5mm1. 标定板未固定(增加工装);2. 标定姿态数量不足(≥8 个);3. 相机曝光不稳定(设为手动曝光);4. 机器人未做精度补偿(执行 MasterCal)
自动标定中途中断1. 通讯超时(延长 Socket 超时时间至 2000ms);2. 标定板超出相机视野(调整移动范围);3. 像素坐标识别失败(清洁标定板 / 调整光源)
标定后抓取偏差随位置变化1. 相机安装松动(重新紧固);2. 转换矩阵未考虑机器人姿态补偿(添加姿态修正项);3. 镜头畸变未校准(重新做相机内参标定)

七、实战优化技巧

  1. 标定姿态规划:姿态需覆盖相机视野的四角 + 中心,避免集中在同一区域;

  2. 光源优化:使用环形光源 / 同轴光源,确保标定板边缘清晰,无反光 / 阴影;

  3. 自动重标定:编写定时标定程序(如每天开机后自动执行),补偿机械磨损导致的偏差;

  4. 误差补偿:对标定结果做线性拟合,修正系统误差(如rob_x = rob_x + 0.05)。

收缩
  • QQ咨询

  • 电话咨询

  • 18576370666
  • 添加微信客服