ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

双翌视觉引导机械手大视野抓取:标定流程与角度补偿全解析

双翌视觉引导机械手大视野抓取:标定流程与角度补偿全解析 双翌视觉系统配合机械手做大视野定位抓取是我最近半年调试最多的一个场景。单目标带角度抓取听起来不算复杂但真正落地的时候从硬件选型、手眼标定、旋转中心标定到角度纠偏公式每一步都有坑。今天把这个项目从需求到量产的完整链路拆开讲一遍包括标定流程、公式推导、节拍优化和现场踩坑记录给正在做类似项目的朋友一个可以直接抄作业的参考。1. 项目需求与整体设计思路拆解1.1 大视野定位到底在解决什么问题先说项目背景。客户产线要做一个自动上料工位机械手从不规则摆放的来料区域内抓取一个金属结构件然后放到后段的加工治具上。来料区域大概有400mm x 300mm也就是说相机的视野必须覆盖整个来料区域否则机械手根本不知道往哪走。这里就引出大视野定位的第一个难点视野大意味着单个像素对应的物理尺寸变大精度会被稀释。举个例子500万像素相机2448 x 2048拍400mm x 300mm的视野单像素对应的物理尺寸大概是0.16mm左右。如果只做位置定位这个精度勉强够用但如果目标本身带角度偏差机械手抓取时要补偿旋转那角度误差在旋转半径末端会被放大可能直接导致抓偏或者撞料。所以这个项目的核心不是“能不能看见”而是“看见之后怎么算得准、抓得住”。单目标的意思是每次拍照只识别一个目标点不做多目标匹配也不用对整张图做特征遍历视觉处理速度快非常适合节拍要求高的单工位场景。配合机械手的角度补偿实现对歪斜摆放物料的准确抓取。1.2 为什么选用固定向上相机方案而不是机械手末端相机视觉系统和机械手的配合方式行业里主要有两种固定相机常见为向上或向下固定安装和手眼相机装在机械手末端。这个项目选的是固定向上相机原因有两个。一是视野需求大。末端相机跟着机械手走每次拍照只能覆盖很小的局部区域大量依赖机械手“盲走”到预抓取位置附近才能开始识别对来料位置的容错性很差。而固定大视野相机一次就能看到整个来料区域的全局机械手只需要按视觉给出的坐标直接过去逻辑简单直接。二是精度控制更容易。末端相机在机械手运动过程中会引入抖动误差和重复定位误差而固定相机只要安装稳定标定一次就能保持长期稳定。双翌视觉系统在这种场景下配合固定相机标定工具链成熟九点标定、旋转中心标定、对位工具都是直接可用的。项目选用的是固定向上相机加机械手吸嘴抓取的架构。料盘或来料区在相机视野上方物料平放相机从下方透过透明托板或直接对着治具拍照识别。这种方案在3C、小五金装配、注塑件上料里非常常见结构紧凑而且每次拍照位置可以固定为机械手的一个拍照位逻辑完全可控。1.3 整体工作流程与核心指标设定整个系统的运行流程可以拆成五步机械手从来料区吸取物料移动到固定拍照位相机上方。相机触发拍照双翌视觉系统识别目标特征计算物料在像素坐标系下的坐标和角度。视觉系统将像素坐标转化为机械手坐标系坐标并输出角度补偿量。机械手接收偏移值结合旋转中心标定结果和当前角度解算出最终抓取目标位姿。机械手带着旋转补偿移动到下料位完成放置。这个流程里我定了三个核心指标定位精度正负0.3mm以内角度补偿精度正负0.3度以内单次视觉处理到输出坐标的时间不超过80ms。后面所有的标定、公式推导、参数调试都是围绕这三个指标展开的。2. 硬件选型与视觉系统配置细节2.1 相机、镜头、光源的选型逻辑大视野定位最忌讳“先买相机再想精度”。正确顺序是先定精度需求再倒推相机分辨率和镜头焦距。这个项目视野长边400mm精度要求正负0.3mm那么单像素物理尺寸至少要0.1mm以下才能保证亚像素处理后有足够余量。我选了500万像素黑白相机2448 x 2048分辨率靶面2/3英寸算下来长边单像素约0.16mm。单看这个数值其实超不过正负0.1mm但配合灰阶重心提取亚像素算法实际定位稳定性能达到0.05像素左右也就是物理精度约0.008mm余量非常充足。镜头方面用的是8mm定焦工业镜头。选焦距有一个简单公式焦距 工作距离 x 靶面尺寸 / 视野尺寸。如果工作距离大约400mm靶面长边8.8mm视野长边400mm算出来焦距约8.8mm所以8mm镜头基本贴合。光圈我建议收到F8到F11之间边缘畸变会明显改善聚焦要在大视野场景下格外认真因为景深不够的话边缘模糊会直接毁掉标定结果。光源用的是环形低角度白色光。因为物料表面是金属有反光正光会形成大面积过曝。低角度环形光打在金属表面形成漫反射特征轮廓边缘清晰干净对后续BLOB分析非常有利。2.2 双翌视觉系统的标定工具与操作逻辑双翌视觉软件里最常用的两个工具定位和标定模块分别是九点标定也叫N点标定和旋转中心标定。打开软件后在标定工具里选择九点标定界面会引导你手动或半自动采集九个点的像素坐标和机械手坐标软件内部自动算出一个仿射变换矩阵。这个矩阵负责把像素坐标转换成机械手坐标。重点说一下九点标定的实操细节。建议的九个点不一定要铺满整个视野但至少覆盖机械手实际去抓取的目标区域。如果相机视野边缘有畸变而标定点只集中在中心边缘区域坐标转换后误差会很大。我习惯标定范围比实际抓取范围大10%到15%给边缘误差留出缓冲。双翌软件对需要重新标定的判定条件一般在参数变更时才会重置。你换了相机位置、换了镜头焦距、动了相机高度都必须重标。只是光源亮度变了通常不影响标定结果但会影响识别效果。2.3 拍照触发方式与信号链路配置拍照触发我推荐用硬件触发不要用软件持续触发。原因很简单机械手走到拍照位后会给出一个IO信号相机拍照并处理处理完视觉软件通过TCP或IO输出结果。这样能保证每次拍照时物料都处于同一高度、同一姿态避免软件触发导致的时序错乱。这里有个关键参数机械手到位信号延迟到相机曝光之间的时间差。机械手刚到拍照位时通常还有微小抖动残余直接拍照图像模糊特别是低角度环形光下会更明显。我设置了机械手到位后延时80到100ms再触发拍照让振动衰减到可以忽略的程度。这个延时看似浪费但对大视野精度来说非常值得。3. 手眼标定与旋转中心标定实操全流程3.1 手眼标定九点标定的完整操作步骤这一步是整个系统精度的地基做不扎实后面全白费。我用的是传统九点标定双翌软件里操作步骤如下在机械手工具末端装一支尖锐标定针确保针尖正好在法兰中心线上。在相机视野范围内用机械手示教九个点。我习惯按3x3矩阵排列每个点间距大约30mm到50mm覆盖范围略大于实际抓取区域。每走一个点记录当前的机械手坐标同时让相机拍一张图在图像上标记针尖的像素坐标。九个点都记录完在双翌软件标定界面里输入对应的像素坐标和机械手坐标软件自动拟合出变换矩阵输出标定结果和残差。残差非常关键。双翌软件会给出每个点的换算误差。如果某个点误差明显大于其他点大概率是机械手走了绝对坐标但针尖没对齐或者图像标记位置偏了。需要重新走那个点不要强行用。我一般要求残差小于0.1mm才继续下一步不然角度补偿算出来会放大误差。静态九点标定只适合固定相机且机械手姿态保持不变的场景。如果机械手需要变换姿态去抓料比如Z轴高度变化必须做动态标定也就是每个标定点用目标抓取姿态去走拍摄高度和实际抓取高度保持一致。这一点很多人忽略最后发现坐标总是偏其实就是拍照高度和抓取高度不一致导致的。3.2 旋转中心标定的原理与实操带角度抓取必须做旋转中心标定这是整个项目里最容易被轻视、又最容易出问题的地方。机械手旋转末端吸嘴或夹爪一定有一个旋转中心这个中心在机械手坐标系里的位置往往不等于法兰中心。如果不用旋转中心标定视觉给出一个角度偏差时你只旋转末端目标位置会绕着错误的中心旋转抓取中心直接跑偏。旋转中心标定的原理其实很简单在机械手末端装一个标定针或吸嘴用机械手的旋转功能旋转几个角度记录每个角度下末端参考点的位置拟合出一个圆的圆心。这个圆心就是旋转中心在机械手坐标系中的坐标。操作步骤如下让机械手末端回到某个固定参考点一般就在相机视野中心附近示教为Home点。在双翌软件里打开旋转中心标定工具让机械手按角度步进旋转常见做法是当前角度、旋转正30度、旋转负30度三个点就能拟合圆心我习惯做五到七个点更稳定。每个角度位置停下来用相机拍标定针尖的像素坐标并记录。把多组坐标输入标定工具软件拟合出旋转中心在机械手坐标系的坐标。有个重要细节旋转中心标定前必须先完成九点标定因为需要把像素坐标转换为机械手坐标才能进行圆拟合。旋转多角度时吸嘴要保持高度一致Z轴不要变只在平面内旋转。还有一个实操技巧标定针装上去之后要确认针尖在机械手旋转时画出的圆尽可能小。如果针尖本身不在法兰中心线上标定出的旋转中心其实是个偏心圆会影响精度。装上标定针后手动旋转机械手看着针尖是否只自转不画圈有画圈就先调整工装。3.3 旋转中心标定结果的应用与双翌坐标关系旋转中心标定完成后得到的是旋转中心在机械手坐标系下的坐标Rx, Ry。在后续角度抓取时这个坐标的作用是当机械手要旋转一个角度来补偿物料角度偏差时需要把旋转中心的坐标一起代入坐标补偿公式否则旋转之后抓取位置会偏移。双翌软件对旋转中心标定结果的使用有两种方式。一种是在视觉输出里直接配置旋转中心坐标软件在输出补偿坐标时自动叠加旋转补偿另一种是视觉只输出像素坐标和角度由上位机PLC或机器人程序里做旋转补偿计算。两个方案我都用过强烈推荐第一种把旋转中心坐标写死在视觉系统里可以减少机器人程序里的变量和出错机会。这里还要注意旋转方向的正负定义。双翌视觉系统输出的角度正方向通常和图像坐标系Y轴方向有关在和机械手做对接之前务必先确认机械手正方向旋转和图像角度正方向是否一致。如果反了后果就是角度差越大抓偏越严重。这个检查不需要调试程序一个简单的测试方法把一个有方向特征的目标物放偏一点跑一遍完整流程看抓取结果偏了通过软件里角度符号取反来修正一次就能对正。4. 角度纠偏与抓取位解算的核心公式与实现4.1 坐标变换与角度补偿公式推导这个案例里视觉的输出是三部分目标在图像中的像素坐标u, v目标相对模板的角度差theta。经过九点标定变换得到目标在机械手坐标系下的坐标TX, TY和角度theta。机械手实际抓取的目标点位姿按下式计算。设旋转中心标定得到的旋转中心在机械手坐标系下的坐标为Rx, Ry。在机械手当前没有旋转补偿时视觉输出的目标点相当于机械手要移动到的位置。设这一步机械手先移动到目标位置TX, TY然后末端旋转角度theta。如果直接旋转目标会绕旋转中心转theta角实际抓取点偏移到新位置。所以正确的顺序是先把目标点相对旋转中心转负的theta角得到机械手应该去的补偿位置GX, GY然后在到达这个补偿位置后末端再旋转theta角这时目标点就回到了真正的抓取位置。公式如下dx TX - Rx dy TY - RyGX Rx dx cos(-theta) - dy sin(-theta) GY Ry dx sin(-theta) dy cos(-theta)机械手收到目标坐标GX, GY到达后旋转角度theta抓取。这套公式的本质是“先平移再绕旋转中心旋转”很多人写成“先旋转再平移”那个也能用但需要额外补偿旋转带来的位置变化公式复杂容易错。我推荐上面的写法逻辑简单机械手也容易实现。注意上面用的负角度是因为我们要在机械手旋转之前把目标“预移”到旋转后的反向位置。4.2 角度防抖与阈值判断单目标带角度抓取里有个容易被忽视的问题当目标本身的姿态接近水平或垂直时角度计算结果会变得极不稳定。这是因为特征方向提取算法在接近0度或90度时丝级噪声也会导致角度值跳变。如果直接拿这个跳变的角度去做旋转补偿机械手会不停乱转。我的处理方案是设置角度防抖阈值和解算平滑。双翌软件里可以设定一个角度小范围阈值比如正负0.1度当角度在这个区间内时强制归零不做旋转补偿。另外可以在视觉脚本里做中值滤波连续几次拍照取角度中间值滤掉单次跳变。这个方法在调试现场帮了大忙。另外提醒一点如果在抓取时目标角度本身很小但你要判断“有没有角度偏差”一定不要拿视觉输出角度去直接和0比要结合机械手当前实际角度做差值再做防抖。4.3 视觉坐标系与机械手坐标系的镜像与方向问题很多第一次做视觉引导机械手的人会卡在一个问题上视觉输出的X增加方向机械手实际运动方向可能正好相反比如机械手Y轴向上视觉Y轴向下导致越追越偏。这个问题的根源就是坐标系没有对齐或者镜像关系没有处理。我用双翌软件做对接时会先把机械手JOG到视野中心的正上方然后手动移动机械手X正方向观察相机画面里参考点在图像中的移动方向判断出坐标轴的对应关系。如果发现某个轴方向相反直接在通讯输出变量里做取反或者交换X/Y。注意这里不能简单改标定矩阵系数因为角度旋转的正负也会随之变化。更稳妥的做法是在九点标定之前的准备阶段先把图像坐标系和机械手坐标系的XY方向统一这样标定出来的矩阵就是最直观的“像素X对应机械手X像素Y对应机械手Y”后面所有调试都省心。具体做法是旋转相机安装角度使图像画面里的X轴方向和机械手X轴方向重合然后想办法让Y轴也一致如果做不到完全一致再通过软件镜像翻转。5. 机械手节拍优化与精度验证5.1 节拍优化从拍照到抓取的时间账视觉引导项目最后比拼的常常不是精度而是节拍。这个项目客户要求单次抓放循环在5秒以内。机械手运动时间大约占了3.5秒剩下留给视觉处理、IO通信和余量的只有1.5秒。双翌系统单次拍照到输出坐标的时间在500万像素图全图处理、单目标场景下实测大约是60到80ms500万像素图全图处理加BLOB特征提取加坐标变换大约60ms这完全够用。真正的耗时大头在机械手走位和到位稳定延时上。每一段运动之间的停顿、IO响应延迟、夹爪动作时间都要逐个抠。我做的几个节拍优化措施如下。第一在保证精度的前提下尽可能缩短机械手到位到拍照触发的稳定延时从100ms缩短到60ms多测几次不抖就稳定下来。第二视觉处理和机械手运动做流水线并行也就说机械手带着上个物料去下料的同时相机对等在上料位的下个物料进行拍照和识别。这需要双翌软件开启异步处理模式提前获取下一料坐标。第三PLC握手协议精简不要一个字节一个命令反复确认尽量用一条指令包完成“请求坐标加返回坐标”。5.2 精度验证方法静态与动态双重校验标定做完、程序跑通之后必须要做定量精度验证。我通常分三步做。第一步静态验证。把标定针或一个标准工件放在相机视野内的不同位置机械手按照视觉引导去走到达后记录实际位置和目标位置之间的偏差每个角度都测几组覆盖视野中心和边缘。重点看边缘区域如果边缘误差大可能是九点标定覆盖范围不够或者镜头畸变补偿没开。第二步是角度验证。放一个有明显方向特征的长条工件手动放歪几个角度让视觉识别并输出角度机械手做旋转补偿后放置到固定治具检查治具里工件是否准确贴合。这一步同时验证了旋转中心标定和角度补偿公式的正确性。第三步是连续运行验证。跑50次以上统计位置误差的均值和标准差。均值偏大说明有系统性偏差可能是旋转中心标定有误差或者公式符号有问题标准差偏大说明随机误差大需要检查机械手重复定位精度、相机曝光稳定性、光源抖动。我做完静态加动态验证后最终实测位置误差均值在正负0.15mm内角度误差控制在正负0.2度内满足客户要求。5.3 旋转中心标定精度对整个系统的影响实测这个项目里我做过一个对比试验不重标定旋转中心仅仅在软件里把旋转中心坐标人为偏移1mm然后让机械手执行一个45度的角度补偿抓取最终抓取位置偏移了多少数据下来很吓人大约0.85mm。也就是说旋转中心1mm的标定误差在45度旋转时会导致近1mm的抓取偏差直接超差。所以如果你发现系统在小角度抓取时正常大角度抓取时明显偏位十有八九是旋转中心标定不准不是视觉定位问题。这时候不要急着调模板调光源老老实实回到标定流程把旋转中心重新标一遍。旋转中心标定的精度有一个简单的验证方法标定完成后让机械手带吸嘴分别旋转0度、10度、20度、30度每次都在相机下拍一张照片记录针尖位置。拟合这些位置形成的圆计算每点到圆心的距离标准差。如果标准差小于0.1mm说明标定合格。6. 常见问题与排查技巧实录6.1 大视野边缘坐标偏移严重这是大视野项目最容易翻车的点。现象是目标在视野中心时抓得很准一旦放到边缘偏差大到几个毫米。原因基本是镜头畸变没有被补偿标定矩阵是全局线性变换无法处理畸变造成的非线性拉伸。解决办法有几种。优先在双翌软件里打开镜头畸变校正工具。这个工具利用标定板的特征点计算出畸变系数并校正整个图像。校正后再做九点标定坐标精度会明显提升。如果畸变校正效果仍不理想换用低畸变工业镜头或者缩小视野。双翌软件的畸变校正常常需要专用标定板配合标定板要平整放在视野内不同位置多拍几组软件自动计算出畸变模型参数。我的经验是大视野镜头的边缘畸变在F8光圈下通常小于3像素换算成物理尺寸0.48mm如果不校正根本达不到正负0.3mm的精度要求。所以畸变校正是必做步骤不要省。6.2 角度输出与机械手实际抓取方向不一致这个坑我见过太多次了。视觉输出角度是30度机械手也转了30度但放下去的工件明显方向不对。原因通常是机械手的零点角度和视觉模板的零点角度不一致或者视觉角度正方向和机械手角度的正方向定义不同。排查方法是做一个角度对齐测试。将一个工件放在视野里先手动旋转机械手让吸嘴贴合工件记录此时机械手的角度值同时在视觉系统里记录当前识别到的角度值两者相减得到的就是零点偏差。把这个偏差写进视觉输出或机械手程序里做补偿。这一步看起来简单但能省下大把调试时间。6.3 吸嘴旋转后吸附位置偏移有时候视觉输出位置和角度都对吸嘴转了之后物料在吸嘴上发生滑移放置时位置不对。这个不是视觉的问题是吸取工艺的问题。物料比较重、吸盘直径偏小、或者物料表面不平整旋转加速度一大就会滑。应对办法是在机械手旋转加速曲线里加入平滑过度。同时检查吸嘴端面是否清洁、真空度是否足够必要时在吸嘴端面增加一层软胶垫增大摩擦力。机械手旋转时尽量用小角度快速旋转逼近最后用较小速度到位减小惯性冲击。还有一个经验吸嘴旋转时尽量让物料重心落在旋转中心轴线上偏离越大旋转时滑移越明显。6.4 标定结果短期漂移刚标定完精度很好第二天开机发现整个坐标都偏了。这种情况90%是机械振动导致相机松动。固定相机的支架不能太单薄至少用铝合金型材加加强筋不能直接用那种细杆挂相机。每次开机后跑一个标准件做快速验证发现偏差就检查机械结构。另一个容易忽略的是温度影响。金属支架在环境温度变化时热胀冷缩大视野下累积误差可能超过0.2mm。车间温控不好又没有恒温措施的话建议定期重新标定。有些项目我把九点标定的周期设为每周一次实际用下来效果不错。7. 项目经验总结与扩展应用思路做完了这个项目我最大的感受是视觉引导机械手系统的成败往往不在算法多高深而在标定是否扎实、时钟同步是否可靠、坐标系是否统一。双翌视觉系统的上手门槛不算高但如果对坐标变换原理理解不透出问题时排查起来会非常痛苦。建议做类似项目的朋友在最开始就把旋转中心标定的准确性和标定后的验证做成标准流程固定下来每次上线前跑一遍。宁愿多花十分钟标定也不要让产线因为角度偏移停线两小时去排查问题。这套方案后续还可以复用到类似场景。比如双目标或多目标定位只需要在视觉程序里增加循环识别逻辑要求更高精度的小视野场景可以换成远心镜头配合小视野标定板思路完全一样。另外如果来料高度有波动就需要增加高度方向的数据比如加一个激光位移传感器或者在机械手末端装测距模块角度补偿公式则要扩展为三维旋转矩阵。还有一点值得提双翌视觉系统和主流机器人品牌如四大家族和国产主流品牌都有现成通讯模块做TCP/IP或Socket对接非常方便。如果是在老产线上改造尽量走TCP通信灵活性和可维护性都优于硬接线IO方式。最后一个小技巧送给大家调试阶段在机械手上加一个“视觉引导避让模式”当视觉坐标计算出的抓取点超出机械手运动范围时系统自动暂停并报警不要硬跑。这个逻辑看着简单但能救你无数次特别是在程序刚上线、还在试运行的时候能有效杜绝撞机事故。
返回列表