FANUC机器人2D视觉引导:坐标系规划、标定与抓取偏移全流程拆解
简介针对FANUC机器人2D视觉成像应用整理的技术文档面向工业机器人调试工程师及自动化集成人员介绍了利用视觉系统完成工件定位与抓取的完整实施方案。内容从新建程序A1指定用户坐标系与工具坐标系开始逐步讲解网线连接、视频设定页配置、摄像头安装位置调整、曝光时间设置、点阵板标定与误差范围设定并以程序A2为例演示趋近点、抓取点、退出点的记录和视觉偏差角度读取、坐标变换等关键步骤。压缩包内含1个doc文档大小约2.09MB截图与文字穿插便于按目录索引学习目前已有113人学习浏览。文档还特别提醒坐标系序号不能与视觉示教混用、标定完成前勿移动点阵板等易错点有助于缩短现场调试周期、降低上手门槛。1. FANUC 机器人 2D 视觉成像真正决定成败的是坐标系纪律生产线上换型之后机器人抓不准、人工示教点位又费时间很多团队会直接上视觉引导。FANUC 机器人的 2D 视觉成像应用单点成像就是解决这个问题的标准方案一个固定相机、一块点阵板、两个程序让机器人拿到工件的像素偏移和绕 Z 轴的转角自动修正抓取位置。这套方案调试下来你会发现识别算法本身几乎不用碰真正让项目翻车或顺利的是坐标系编号的规划和操作顺序的执行纪律。适合正在调试 FANUC 视觉抓取项目的电气工程师、维护人员和刚接手视觉应用的现场调试人员。2. 坐标系规划先行UFRAME/UTOOL 的编号原则与 A1/A2 分工2.1 为什么 UFRAME/UTOOL 编号不能随手填在 FANUC 机器人程序里UFRAME_NUM和UTOOL_NUM是跟着程序走的坐标系声明。UFRAMEUser Frame定义工件在哪、工件坐标系怎么摆UTOOLTool Frame定义工具中心点 TCP 在哪、姿态怎么偏。2D 视觉应用里这两行要放在程序的最开头让机器人明确“这一段程序我该用哪套尺子”。FANUC 机器人有个隐蔽毛病如果程序开头不显式指定坐标系它会默认沿用上一次运行过的程序留下的坐标系设置。这就意味着一旦上一个程序用的是另一套坐标系当前程序点位会整体乱掉机器人要么跑偏要么直接报坐标错乱故障。原文档里强调“此坐标系的序号不应被用作视觉示教时的坐标系”这句话是整套流程的命门。A1 程序里用的是 2 号坐标系视觉示教时单独做一套 3 号坐标系两套编号必须分开。原因是视觉标定的本质是把相机看到的像素坐标换算成机器人坐标系下的位移量换算关系完全依赖 TOOL 和 USER 坐标系这两个基准。如果日常抓件程序和视觉示教共用同一个坐标系编号视觉补偿量算出来后叠加的位置会自相矛盾。我一般在项目开始前先把编号规划写进调试记录1 号留给基础动作2 号给 A1 示教程序3 号给视觉坐标系。这个习惯看起来繁琐但能省掉后续一半以上的坐标错乱排查时间。1: UFRAME_NUM2 ; 2: UTOOL_NUM2 ;这两行是 A1 程序的开头作用是强制指定程序使用的 USER 坐标系和 TOOL 坐标系。UFRAME_NUM2表示用户坐标系选 2 号UTOOL_NUM2表示工具坐标系选 2 号。这里的 2 号只是“锚点”用来保证 A1 里记录的 P1、P2 点每次都落在同一个参考框架下不参与视觉换算。2.2 A1 程序前两行示教阶段的位置锚点A1 程序是整个视觉调试的“量位置”程序。在放置工件到抓取工位、确认工件在相机成像区域内之后需要手动移动机器人到两个关键位置并记录1: UFRAME_NUM2 ; 2: UTOOL_NUM2 ; 3: J P[1] 100% FINE ; ! 趋近点工件正上方安全高度 4: J P[2] 100% FINE ; ! 抓取点手爪实际抓取工件的位姿P[1] 是趋近点记录的是机器人带着手爪移动到工件正上方、且手爪自由运动时不会碰到相邻工件的位置。P[2] 是抓取点记录的是手爪准确抓住工件的实际位置。这两个点必须按照“先看得到再够得着”的顺序来先移动机器人到能抓的位置再抬起来确认不干涉分别记录。这样后续视觉程序 A2 里机器人才知道该先飞到哪个高度再往下抓。这里有一个现场常见的误用有人图省事只用 P[1] 一个点把趋近和抓取合并。结果机器人每次都以全速冲向工件抓取瞬间手爪姿态稍微偏一点就直接撞飞工件。视觉系统能给的是“偏多少”的修正值给不了“从哪开始减速”的安全距离趋近点必须单独记录。2.3 P1 与 P2 的记录顺序先看得到再够得着记录点位之前有一个物理前提工件要尽量落在相机成像区域的中心位置且整体全部落在视野里。这个要求不是让操作员随手摆的。相机镜头的边缘畸变在 2D 视觉里是客观存在的工件越靠近视野边缘识别到的像素偏差被镜头畸变放大得越厉害最终换算到机器人坐标系的偏移量误差也越大。中心位置畸变最小像素量和实际位移量的比例关系最稳定。另一个细节是抬高机械手位置时要确认手爪在此高度下自由运动不会和其他工件发生干涉。这条在原文中专门标注过实际操作中很多新手会在记录 P[1] 时忽略了旁边料盘里的其他工件等到跑自动时机器人路径一换手爪直接扫过相邻工件。记录 P[1] 之前我习惯手动把机器人从这个点往 X、Y、Z 三个方向各移动一段距离确认没有碰撞风险再定稿。3. 视觉参数标定曝光时间、点阵板与误差范围的那些细节3.1 连接测试与页面入口先 ping 通再谈参数视觉系统的硬件连接是调试的第一步。用网线把电脑和机器人控制柜连接起来然后在电脑浏览器里打开视觉设定网页。做连接测试时现场老手的习惯是先在电脑上把本机 IP 设为与控制柜同网段用 ping 命令测一下通断确认链路没问题再开页面。这样能明确区分“网络没通”和“页面打不开”两类问题不会在浏览器里干等转圈。打开网页后能看到相机的实时画面。FANUC 的视觉设定页面里参数项不少但现场真正需要改的其实非常有限。原文档里反复强调“只需要更改”“其他不要更改”这是有原因的——视觉系统内部很多参数在出厂时就按标准工况设定好了贸然去动反而会把原本稳定的识别搞坏。我自己的经验是能不动就不动每次只改一个参数改完立刻做验证记录前后差异。3.2 曝光时间的调整逻辑亮度不是越亮越好曝光时间是视觉参数里真正需要动手调的项目。调整方法在设定页面把光标划过工件特征区域的最亮点观察页面显示的灰度值 g目标值是 200 左右。这个值与光照强度、快门速度、增益都有关系页面给出的是综合效果。灰度值 g表现处理建议小于 100图像偏暗工件边缘细节丢失特征提取不稳定先补光源再适当增加曝光100 ~ 250正常区间特征边缘清晰保持不要反复调大于 250过曝特征区域发白边缘中心漂移降低曝光或减弱光源调曝光时最容易犯的错是把画面调到“人眼看着舒服”。视觉系统识别的不是人眼观感而是灰度梯度。工件特征区域最亮点在 200 左右既保证了边缘对比度又给反光留了裕量。如果环境光变化明显比如靠近窗户的工位我会按一天中最亮时段作为基准调整曝光再加遮光罩把外部光变化压住。3.3 点阵板标定与误差范围标定完成前别碰它点阵板标定是整个视觉系统的“坐标基准”建立过程。完整流程如下安装定位针到手爪上示教 TOOL 坐标系避开 A1 里使用的坐标系号比如做 TOOL3。TOOL 坐标系做完之后定位针不许拆掉。把示教用的点阵板放到工件上通过电脑观察让点阵板尽量在相机成像区域中心。示教 USER 坐标系比如 USER3此时点阵板位置就固定成了视觉系统的工件坐标系基准。在网页里按照图二到图四的步骤设定标定示教点阵板的相关参数。观察标定页面的数据误差范围确认在可接受区间内。这里有两个铁律TOOL 坐标系做完之后不能拆定位针USER 坐标系做完之后不能移动点阵板。拆了针手爪的实际工具中心点就算不准移了板视觉像素和机器人坐标的换算关系整体漂移。标定误差的观察原文档专门用了一页图说明通常误差在 0.5 像素以内可以直接使用超过 1 个像素就要检查相机固定螺丝是否松动、点阵板是否平整贴合、光源是否有反光干扰。3.4 移走点阵板的时机set.ref.pos 的先后关系标定流程里最容易被忽略的是操作顺序。原文档明确写着图七完成之后才可以做图六页面里的 set.ref.pos在做完这一步之前任何时间移动示教用的点阵板都会造成错误。这个顺序的逻辑是标定页面里的参数设定和误差确认是在“板子在当前位置”的前提下完成的set.ref.pos 是把当前点阵板的位置固化进视觉系统的基准参考。如果板子已经动过了再做 set.ref.pos固化进去的是一个已经偏移的基准等于标定从头错到尾。我在现场见过最惨的一次翻车就是操作员在标定误差页面看了两眼数据觉得没问题顺手把点阵板拿起来看看背面型号然后问“下一步是啥”。重新走完整遍标定流程多花了一个多小时。从那以后我给出的注意事项只有一句话图七没完板子不许碰。4. 从示教到程序落地A2 的趋近点、抓取点与退出点编写4.1 A2 的程序骨架换坐标系后重复记录标定完成后进入实际抓取程序的编写阶段。新建程序 A2开头两行指定 A2 使用的坐标系1: UFRAME_NUM3 ; 2: UTOOL_NUM3 ;这里必须用视觉示教时建立的 3 号坐标系不能沿用 A1 的 2 号。原因是视觉系统计算出的偏移量是基于 3 号坐标系基准的A2 只有切到 3 号坐标系视觉偏移值才能直接叠加到点位数据上。如果沿用 2 号坐标系等于用另一套尺子去量同一个偏移结果必然偏。A2 里要记录三个点趋近点、抓取点、退出点。记录方式比较特殊——不是直接在 A2 里手动移动机器人到位而是先运行 A1 程序让机器人自动到达 A1 记录的物理位置再进入 A2 程序运行前两行指定坐标系在当前机器人位置记录新点。为什么反复强调“前两行必须运行”因为要保证 A2 记录点位时机器人当前所处的坐标系状态和程序运行时的坐标系状态一致。我在实际调试中见过不运行前两行直接记录点位的情况结果 A2 里的点位数值看着正常一跑起来机器人朝完全错误的方向运动吓出一身冷汗。4.2 每个点后面的语句怎么插CHOIC 与视觉偏移量的叠加记录完 A2 里的点位后需要在每行后面插入视觉偏差处理语句。操作方法是把光标移到每行末尾按 CHOIC 键在弹出菜单里选择要插入的指令。原文档图示里对应的典型代码如下1: J P[1] 100% FINE ; ! 趋近点机器人先安全飞到工件上方 2: PR[1]VI[1].OFFSET ; ! 读取视觉系统返回的位置偏移量 3: CALL INVERSE(1,2) ; ! 坐标变换把视觉偏移换算到当前坐标系 4: CALL INVERSE(2,1) ; ! 变换回执行坐标系保证角度读取基准正确 5: R[1]PR[1,6] ; ! 取出绕Z轴的转角偏差存到R[1] 6: L P[2] 100mm/sec FINE ; ! 带偏移走向实际抓取点趋近点上一般不叠加视觉偏移机器人先按示教位置飞过去到达拍照位置后再读取视觉数据。抓取点执行时视觉偏移已经通过 PR[1] 叠加进去了。实际项目中有些调试人员会把视觉读取放在 A1 程序里做A2 只负责执行运动两种做法都能跑通但原文档的路径是 A2 内直接处理这样程序结构更紧凑少一次跨程序的数据传递。退出点的记录方法和趋近点完全一样先运行 A1 让机器人到达工件上方再进入 A2 记录点位。退出点的高度一般不低于趋近点保证手爪抓走工件后抬升时不会撞到料盘边缘。4.3 A1 与 A2 的协作流程为什么调试时两个程序来回切A1 和 A2 的配合逻辑很多新手一开始转不过弯。简单说A1 是“带路程序”A2 是“作业程序”。调试阶段A2 里的点位不是凭空示教的而是靠着 A1 已经把机器人带到了正确的物理位置A2 再在当前位姿下记录点位数据。这套流程保证的是“物理位置一致、坐标系不同”的两套数据之间能够正确换算。如果直接在 A2 里手动移动机器人记录点位会遇到一个问题A2 用的是 3 号坐标系手动移动时机器人按照 3 号坐标系的姿态推算运动路径和 2 号坐标系下记录的物理位置会有偏差。用 A1 带路机器人的实际位置和 A2 记录时的位姿完全一致再切换坐标系记录点位数据才是对的。跑自动程序时也一样每次循环开始都要先执行 UFRAME_NUM3 和 UTOOL_NUM3 的前两行确保坐标系从头到尾一致。我把这个习惯固化成一条注释写在程序开头“改坐标系前先跑A1前两行”。5. 视觉调试避坑六条真实翻车记录与排查思路5.1 定位针拆早和点阵板碰动两个最容易的坐标系翻车踩坑一定位针拆得太早抓取位置整体偏移。现象视觉识别、标定误差看着都正常机器人也能走到工件附近但抓取位置固定偏一个方向偏差大小不随工件在视野里的位置变化。原因标定完成后手爪上的定位针被操作员顺手拆了。TOOL3 坐标系是以定位针针尖为参考示教的拆针后机器人按 TOOL3 计算工具中心点实际抓取的中心位置已经变了。视觉系统算出的像素偏移依然准但换算到机器人坐标时基准的 TCP 偏了结果就是整体偏移。解决重新装上定位针重做 TOOL3 坐标系标定完成前把定位针锁在工具柜里谁都不许拆。踩坑二点阵板被碰动抓取位置飘忽不定。现象视觉识别正常但抓取偏差不固定有时偏左有时偏右误差范围能到十几毫米。原因USER3 坐标系是以点阵板位置为基准示教的板子一旦移动整个坐标系基准就歪了。视觉系统每帧照片里工件的位置其实是对的但换到机器人坐标系时因为工件坐标系原点偏了转换结果就跟着飘。解决把示教板移回原位重新标定 USER3并画出放置标记线标定完成前用警示胶带围一圈禁止人员跨入。5.2 曝光和成像问题视觉时好时坏的“玄学”踩坑三曝光参数和环境光互相打架识别时好时坏。现象早上调试时一切正常下午同一套参数开始频繁找不准特征点灰度值波动大。原因工位靠近窗户自然光角度和强度随时间变化曝光是按早上环境光调的下午光线一变灰度值直接从 200 掉到 120 左右特征提取丢点。解决调整曝光到灰度 200 后再选一天中最亮时段验证最大灰度不超过 250。给相机加遮光罩工位增加固定的 LED 光源把环境光的影响压到最低。踩坑四反光工件过曝边缘中心漂移。现象金属工件表面有镜面反射相机画面里工件特征区域一块块刺眼的亮斑识别出的中心点每次都有零点几毫米的跳动。原因正向光源在金属表面形成镜面反射局部灰度直接拉满到 250 以上特征边缘被高光区域吞噬。解决把光源从正向改成低角度环形光让反射光不再直接进相机镜头重新调曝光保证特征区域灰度在 200 附近。5.3 坐标系与 DCS 的问题程序报错不一定在视觉踩坑五A1 前两行没运行机器人直接报故障停住。现象调试时手动运行 A1 程序机器人不动作控制柜直接报坐标系相关报警终端屏幕提示位置数据异常。原因A1 程序前两行是坐标系指定行如果没运行就直接手动移动或执行后续点位机器人使用的是上一次运行程序残留的坐标系状态可能和 A1 里记录点位的坐标系基准不一致机器人认为当前点位在空间上不可达。解决先把光标移到程序第一行按下运行键执行前两行坐标系指定语句再继续后续操作。这个动作要形成肌肉记忆每次打开 A1 和 A2 程序都强制走一遍。踩坑六开启 DCS 后视觉运动被系统拦截报警。现象视觉抓取过程中机器人突然急停控制柜弹系统报警常见伴随 SYST-212 这类需要应用 DCS 参数的信息。程序在视觉偏移叠加后的位置判定为超出安全区域。原因DCS安全距离控制的允许区域是按原始位姿规划的视觉偏移可能把目标点推出允许区域之外机器人出于安全策略强制停机。解决在 DCS 设定里检查允许区域是否覆盖视觉偏移后的所有可能目标位置留出不少于 50mm 的余量。另一种做法是在 A2 程序里对偏移量做范围判定偏移超过设定阈值时先报警再停机而不是直接让机器人朝不可知的位置运动。6. 偏差角度的读取与应用OFFSET、INVERSE 与 R 寄存器配合6.1 PR[1]VI[1].OFFSET视觉偏置的本质视觉系统算出的原始结果是像素坐标系下的偏差但机器人要直接使用的位置数据必须是机器人坐标系下的增量。VI[1].OFFSET就是完成这个转换的入口它把视觉系统第 1 个视觉指令返回的偏差转成机器人当前坐标系下的偏移量写进位置寄存器 PR[1]。PR[1] 有六个数据位分别对应 X、Y、Z 三个平移量和 W、P、R 三个旋转量。PR[1]VI[1].OFFSET ;这一步完成的瞬间PR[1] 里已经不是“像素差”了而是一组机器人可以直接理解的坐标增量。这也是为什么标定过程里坐标系准确性如此重要——像素差转坐标增量的换算关系完全基于标定时固化的 TOOL3 和 USER3基准歪一点这个 OFFSET 就跟着歪。6.2 R[1]PR[1,6]角度值单独取出来用2D 视觉中工件在平面内的旋转对应机器人坐标系里绕 Z 轴的转动也就是 R 角。PR[1,6] 取的是 PR[1] 的第 6 个数据位即 R 值。把角度值单独取出来放进 R[1] 通用寄存器是为了方便程序里做条件判断比如角度偏差超过 5 度时选择不同的抓取策略。PR 数据位含义典型用途PR[1,1]X 方向偏移平移补偿PR[1,2]Y 方向偏移平移补偿PR[1,3]Z 方向偏移高度补偿PR[1,4]W 角绕 X 轴姿态修正PR[1,5]P 角绕 Y 轴姿态修正PR[1,6]R 角绕 Z 轴2D 平面旋转补偿CALL INVERSE(1,2)和CALL INVERSE(2,1)这两条指令在读取角度前执行作用是把 PR[1] 的数值在视觉示教坐标系与当前执行坐标系之间做一次换算确保取出来的角度值是以实际运动基准为准的而不是示教阶段的中间值。如果控制器里找不到 INVERSE 指令进入菜单选择 F3 的 KAREL 选项找到 INVERSE 程序选择 CONSTANT 后输入数字确认连续两次即可完成注册。从那以后我每次做 FANUC 视觉项目都强制自己走一遍完整流程先规划坐标系编号再验证曝光灰度标定完成后检查点阵板和定位针的状态A1/A2 程序头两行逐一确认最后打开 DCS 页面核对允许区域覆盖范围。这套流程走完视觉抓取项目基本不会再因为低级错误返工。希望这个拆解能帮你在现场少走一段弯路。本文还有配套的精品资源点击获取