FANUC机器人2D视觉引导:坐标系规划、标定与抓取偏移全流程拆解
2026/9/23 15:51:19 网站建设 项目流程

简介:针对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_NUMUTOOL_NUM是跟着程序走的坐标系声明。UFRAME(User Frame)定义工件在哪、工件坐标系怎么摆,UTOOL(Tool Frame)定义工具中心点 TCP 在哪、姿态怎么偏。2D 视觉应用里,这两行要放在程序的最开头,让机器人明确“这一段程序我该用哪套尺子”。FANUC 机器人有个隐蔽毛病:如果程序开头不显式指定坐标系,它会默认沿用上一次运行过的程序留下的坐标系设置。这就意味着一旦上一个程序用的是另一套坐标系,当前程序点位会整体乱掉,机器人要么跑偏,要么直接报坐标错乱故障。

原文档里强调“此坐标系的序号不应被用作视觉示教时的坐标系”,这句话是整套流程的命门。A1 程序里用的是 2 号坐标系,视觉示教时单独做一套 3 号坐标系,两套编号必须分开。原因是视觉标定的本质,是把相机看到的像素坐标换算成机器人坐标系下的位移量,换算关系完全依赖 TOOL 和 USER 坐标系这两个基准。如果日常抓件程序和视觉示教共用同一个坐标系编号,视觉补偿量算出来后叠加的位置会自相矛盾。

我一般在项目开始前先把编号规划写进调试记录:1 号留给基础动作,2 号给 A1 示教程序,3 号给视觉坐标系。这个习惯看起来繁琐,但能省掉后续一半以上的坐标错乱排查时间。

1: UFRAME_NUM=2 ; 2: UTOOL_NUM=2 ;

这两行是 A1 程序的开头,作用是强制指定程序使用的 USER 坐标系和 TOOL 坐标系。UFRAME_NUM=2表示用户坐标系选 2 号,UTOOL_NUM=2表示工具坐标系选 2 号。这里的 2 号只是“锚点”,用来保证 A1 里记录的 P1、P2 点每次都落在同一个参考框架下,不参与视觉换算。

2.2 A1 程序前两行:示教阶段的位置锚点

A1 程序是整个视觉调试的“量位置”程序。在放置工件到抓取工位、确认工件在相机成像区域内之后,需要手动移动机器人到两个关键位置并记录:

1: UFRAME_NUM=2 ; 2: UTOOL_NUM=2 ; 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 点阵板标定与误差范围:标定完成前别碰它

点阵板标定是整个视觉系统的“坐标基准”建立过程。完整流程如下:

  1. 安装定位针到手爪上,示教 TOOL 坐标系(避开 A1 里使用的坐标系号,比如做 TOOL3)。
  2. TOOL 坐标系做完之后,定位针不许拆掉。
  3. 把示教用的点阵板放到工件上,通过电脑观察,让点阵板尽量在相机成像区域中心。
  4. 示教 USER 坐标系(比如 USER3),此时点阵板位置就固定成了视觉系统的工件坐标系基准。
  5. 在网页里按照图二到图四的步骤,设定标定示教点阵板的相关参数。
  6. 观察标定页面的数据误差范围,确认在可接受区间内。

这里有两个铁律: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_NUM=3 ; 2: UTOOL_NUM=3 ;

这里必须用视觉示教时建立的 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_NUM=3 和 UTOOL_NUM=3 的前两行,确保坐标系从头到尾一致。我把这个习惯固化成一条注释写在程序开头:“改坐标系前,先跑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 页面核对允许区域覆盖范围。这套流程走完,视觉抓取项目基本不会再因为低级错误返工。希望这个拆解能帮你在现场少走一段弯路。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询