1. 固定相机视觉引导的门槛到底在哪:先想清楚这三点再动手
做机器视觉这行快十年了,经手的视觉引导项目少说也有几十个,每次新项目一启动,最容易被卡住的就是标定这一步。特别是用海康VisionMaster做固定相机视觉引导的场景——工件随便放在视野里,相机拍一张,告诉机器人“往左多少、往右多少、转多少度再去抓”——听起来特别简单,但实际一做就发现,标定出来的映射关系怎么都对不上,要么X方向偏了,要么角度转了方向,项目交付一拖再拖。
其实固定相机视觉引导这件事,绝大多数问题都不是算法的问题,是你没搞明白整个系统的逻辑链路。视觉系统做的事本质上只有一件事:把图像里的像素坐标换算成机器人能用的世界坐标。而这个“换算关系”的建立过程,就是标定。至于示教,则是在标定完成之后,把视觉输出的坐标正确转换为机器人动作指令的过程。这两个东西一旦放在一起做,任何一个环节有偏差,最后出来的抓取点位就是错的。
这篇文章我不打算给你堆理论,就按我自己实际做项目时的思路,把固定相机视觉引导从方案评估、硬件准备、标定实操到示教对接的完整链路捋一遍。所有坑都是我踩过的,所有步骤都是可以直接照着做的。如果你正准备用海康VisionMaster做固定相机的视觉引导项目,这篇应该能帮你省掉至少一周的调试时间。
先说清楚三件事。
第一,固定相机方案的适用边界。固定相机,也叫eye-to-hand,相机安装在工作区域上方或者侧方,视野覆盖机器人的工作范围。它适合的场景是:目标物在相机视野内随意摆放,机器人负责抓取、定位、装配,且机器人本身的运动精度已经达标。如果你需要在机械臂末端装相机,让相机跟着机械臂走到工件跟前再拍照定位,那属于eye-in-hand,方案逻辑完全不同,不在本文讨论范围。
第二,精度预期。固定相机方案的精度由三块组成:相机的像素分辨率、标定建立的坐标映射精度、以及机械臂本身的重复定位精度。前两者属于视觉系统的误差,第三块是机器人本体的误差。很多新手拿到一个精度不达标的结果,第一反应是怀疑标定参数不对,但实际上机械臂的绝对定位误差和重复定位误差是两个不同的概念,后者才影响视觉引导的最终精度。你标定完以后,让机器人走一个重复点,本身就有正负0.05毫米的抖动,那视觉再怎么调,也不可能突破这个物理上限。
第三,海康VisionMaster里“标定”这个词其实被用得很泛。它包含内参标定(畸变矫正)、手眼标定(固定相机场景下就是九点或多点映射标定)、旋转中心标定等多个不同用途的工具。很多网上教程把这几个概念混在一起讲,你跟着做完也不知道自己到底在标什么,出了问题更不知道去查哪一个环节。所以下面的内容我会把每种标定拆开来,说清楚各自解决什么问题、在什么时机做、怎么验证结果对不对。
2. 标定前必须确认的硬件条件:这部分省事,后面全还回来
2.1 相机安装角度和高度直接决定标定方案的复杂程度
安装固定相机时,业内默认的黄金标准是相机光轴与工作台面垂直。这样拍出来的图像畸变最小,像素坐标与物理坐标之间的换算关系最简单,九点标定用一个仿射变换矩阵就能描述得很准。但现实中很多项目根本没有条件做到完全垂直——设备空间有限,相机只能斜着装,或者要避开机械臂的运动干涉区。
相机一旦存在安装倾角,图像里的正方形会变成梯形,这时用九点标定的仿射变换去拟合,精度就会打折。倾角在5度以内通常问题不大,倾角超过10度,你就要考虑在VisionMaster里先用“畸变标定”工具做一遍透视矫正,再做位置标定。否则高精度要求下,视野边缘区域的定位误差可能直接到好几毫米。
另一个重要参数是安装高度。相机离工作台越近,视野越小,像素分辨率越高,精度上限越高,但你能覆盖的区域也越小。这个要根据工件的摆放范围和来料位置精度来权衡。我见过不少项目,为了追求高精度把相机装得很低,结果来料稍微偏一点就跑到视野外,反而频繁报警停机。
我的建议是:先用公式做一轮精度预算。假设你的视野范围是400mm×400mm,用的是500万像素相机(分辨率2448×2048),横向像素精度就是400/2448,约0.163毫米每像素。再考虑亚像素边缘提取和圆心拟合通常能做到0.1到0.2像素的重复精度,视觉系统的重复精度大约在0.02到0.03毫米。如果这还没有达到你的最终要求,那就该换更高分辨率的相机,或者缩小视野,而不是指望标定算法创造奇迹。
2.2 光源选型和安装位置:九点标定里最容易埋雷的一环
光源的重要性在标定阶段常常被忽略。很多人标定的时候用环境光凑合拍,标定板图案也清晰,就以为没问题。但实际生产时,工件的材质反光、表面纹理、环境光的明暗变化,都会让定位算法的提取结果产生偏移。
固定相机方案里用得最多的是环形光源和条形光源。环形光源打在反光物体上容易产生环形反光带,如果正好覆盖了你要提取的特征边缘,圆心拟合就会偏。条形光源照射方向性强,适合表面有凹凸纹理的工件,但会产生阴影,阴影侧的边缘位置不可信。背光源能得到最干净的工件轮廓剪影,但只能用在透光或者外轮廓定位的场景。
所以标定之前,一定要把生产时用的光源方案先定下来,用生产时的打光方式去拍标定板。标定板是平面图案,反光特性与真实工件可能完全不同,因此更稳妥的做法是:标定板采用的材质和表面处理尽量与工件接近,或者直接在标定板上贴与工件同材质的反光膜,防止光源效果差异导致标定结果和实际使用不一致。
标定板的平整度、清洁度也需要注意,表面有划痕、灰尘、指纹都会造成特征点的像素坐标提取偏差,直接污染标定结果。有条件的话,标定板最好单独存放在防尘盒里,不要和工具混放,也不要用手直接触摸表面。
2.3 机器人原点与坐标系方向的一致性核对
固定相机标定本质上是建立图像像素坐标到机器人基础坐标系(或工具坐标系)坐标的映射关系。这意味着,在标定过程中,你告诉VisionMaster的“机器人坐标”必须来自同一个坐标系基准。很多项目翻车就翻在这里:标定时用的是机器人基坐标系下的坐标,但后面实际下发引导指令时,用的是某个用户坐标系或者工具坐标系下的坐标,两者有平移和旋转偏差,视觉算出来的点位自然就是错的。
这里建议在项目启动阶段就把坐标系约定写清楚:使用机器人基坐标系作为视觉输出坐标的统一基准。如果你的项目需要在某个用户坐标系下操作,也应该在标定前定义好,并用标定工具确认坐标系方向与图像坐标系的对应关系。通常像素坐标的X轴向右,Y轴向下,而机器人坐标系的X轴、Y轴方向取决于你的安装方式,标定完成后一定要验证一下:图像中向右移动,机器人坐标的X值是增大还是减小,Y值同理。这一步验证只需要移动一个标定点就知道,但能帮你避免整个映射方向搞反的尴尬。
3. VisionMaster里的标定工具到底怎么选:内参、九点、旋转中心别搞混
3.1 内参标定解决的是镜头畸变问题,不是位置映射问题
在固定相机视觉引导里,内参标定常常被跳过。原因是很多人的视野不大,镜头畸变在中心区域不明显,九点标定拟合的映射矩阵会“吸收”一部分畸变误差。但如果你的视野比较大,或者用的是短焦镜头,畸变在图像边缘非常明显,这时不做内参标定,只靠多点映射去拟合,精度就会在边缘区域崩掉。
海康VisionMaster的标定模块里,内参标定工具通常需要拍摄一组不同角度的标定板图像(建议15到20张),标定板采用棋盘格或圆点阵图案,然后软件会计算出相机的焦距、主点坐标和畸变系数(径向畸变k1、k2,切向畸变p1、p2)。完成之后,在后续的图像处理流程里,先对原始图像做畸变矫正,再做位置映射,精度会比直接九点标定高一个档次。
需要提醒的是,内参标定时标定板在视野里的覆盖范围要尽量大,四个角和中心都要有标定板图案,这样才能让畸变模型拟合得准确。同时,标定板要在不同倾斜角度下拍摄,不能全部平面正对相机。这个过程如果在项目调试现场做,注意保证环境光稳定,不要有强光直射镜头,否则拍出来的标定板图像亮度不均,角点提取容易出现跳动。
海康VisionMaster具体界面上,内参标定和畸变标定可能是两个入口,不同版本的软件菜单名称会有差异。你只要记住,目的都是计算内参矩阵和畸变系数,输出结果通常是一份标定参数文件,后面每个图像处理流程都要加载这份参数。
3.2 九点标定的完整流程:从摆放标定板到记录点的正确姿势
九点标定是固定相机视觉引导里用得最多的位置标定方法。它的本质是最小二乘拟合一个从像素坐标到机器人坐标的映射关系(通常是仿射变换,6个自由度,最少3个点就能解,但9个点可以平均误差和检查异常点)。VisionMaster里提供的“N点标定”工具,支持输入最多几十个点对,每个点对包含一个像素坐标和一个机器人坐标。
标准操作流程是这样的:
- 在相机视野范围内,找一个平整的标定板(带圆点阵列的比较好,圆心提取精度高)。
- 在机器人末端装一个尖锐的针尖或者专用标定针,针尖长度和方向要固定,并在机器人示教器里设置好工具坐标系,确认针尖的TCP(工具中心点)坐标准确。
- 手动移动机器人,让针尖对准标定板上第一个圆点的圆心,记录当前机器人坐标(X1, Y1)。
- 在VisionMaster里拍摄一张图像,用标定工具提取同一个圆点的圆心像素坐标(u1, v1),与机器人坐标组成一对点。
- 依次移动机器人到第2到第9个圆点,重复步骤3-4,记录9组点对。
- 在VisionMaster标定工具里输入全部点对,点击计算,得到映射矩阵并保存。
看着不复杂,但实际执行的时候有一个关键细节:每一步都要确认针尖确实对准了圆心。肉眼判断是有误差的,建议用机器人自带的微动模式,把速度降到最低,以1mm甚至0.5mm的步距微调。如果有条件,可以用放大镜或者直接在标定板圆点上方做视觉比对,提高对准精度。针尖对准误差是九点标定精度损失的主要来源之一,这一步的误差会直接进入最终定位结果。
另外九个点的分布要尽量覆盖整个视野范围,不要只在中间一小块区域采集。映射矩阵在采集点覆盖范围内的精度最高,覆盖范围之外的区域属于外推,误差会明显增大。理想情况下,九个点应该在视野的九个方位:四角、四边中点、中心,形成3×3的网格。
3.3 旋转中心标定:固定相机引导方向用的,别和位置标定混为一谈
很多固定相机项目不只是定位XY位置,还要输出一个角度偏移量,让机器人旋转到和工件一致的角度再抓取。这时候就需要做旋转中心标定。
旋转中心标定的目的是找到机械臂旋转轴心在图像坐标或机器人坐标下的位置。在VisionMaster里,通常会提供一个“旋转中心标定”工具,它要求你拿着一个特征标记(可以是工件本身或标定针),在图像视野内做几次不同角度的旋转,记录特征点在图像中的位置变化,然后拟合出旋转中心坐标。
做这一步时有个容易忽略的点:旋转时的参考点必须始终在相机视野内,而且每次旋转都要以同一个TCP为旋转中心。如果你的机器人示教器支持设定旋转中心点坐标,先在工作台面上示教一个点A,然后让机器人绕A点旋转一定角度(例如0度、30度、60度、90度各拍一次),每次拍完记录特征标记在图像里的像素位置,得到一系列点,它们分布在同一个圆弧上,这个圆弧的圆心就是旋转中心。
旋转中心标定做完以后,视觉系统输出的坐标应该包含三个分量:X、Y、角度。机器人在执行时,先把基准示教点平移到视觉输出的XY位置,再绕旋转中心旋转对应的角度,这样抓取就能对准任意姿态的工件。这部分的逻辑在对接调试里最容易乱,后面我专门用一节来讲。
4. 标定做完精度不对,按这个顺序排查,别再乱试了
4.1 第一步,先验证视觉重复精度,排除提取算法抖动
当你发现视觉引导的点位总是不准,先不要动标定参数,做一次静态重复性测试。让一个工件固定不动,连续拍20次,观察视觉系统输出的XY角度有没有明显的波动。如果每次输出的XY偏差超过0.1毫米——这个值要结合你的视野大小去衡量,例如视野400mm下0.1毫米大约0.6像素——那说明图像提取环节不稳定,先排查光源、曝光时间、工件表面状态,而不是怀疑映射矩阵。
图像提取不稳定的常见原因有这么几个:一是曝光时间太短,图像偏暗,边缘对比度不足;二是自动曝光没有关闭,环境光变化时曝光时间自动调整,导致特征点提取位置漂移;三是工件表面有反光,部分帧反光位置变化造成提取跳动;四是工件上有油污、水渍、毛刺等,导致边缘位置不稳定。
我习惯的做法是,在现场调试时把所有图像参数全部固定,关掉自动曝光、自动白平衡,锁定增益值。只有把图像变成完全可控的输入,后面的定位算法才能稳定输出。
4.2 第二步,检查机械臂自身的重复定位精度和负载状态
如果视觉输出稳定,但机器人实际走到目标点后仍然偏了,那就要怀疑机械臂本身。先让机器人走一个固定的空间点,来回走10次,用百分表或者激光测距仪打表,确认机器人的重复定位精度是否达标。很多六轴机械臂在低负载下重复精度是正负0.02毫米,但一旦装了比较重的夹具或工件,末端变形会导致实际精度下降。
还有一个很容易踩的坑是:标定时机器的负载状态和实际生产时的负载状态不一致。标定时机器人末端只装了一根细针,后面实际抓取时换上了沉重的气动夹爪,手臂的姿态和挠度变化会改变末端实际到达的位置。这种情况下,标定的映射关系本身没错,但机器人坐标的物理含义变了。解决方案是尽量用实际生产的工具去标定,或者先用配重模拟实际工具的重量和重心位置。
4.3 第三步,用“线扫描验证法”检查映射矩阵的方向和比例是否正确
这个验证方法很简单但很有效。在视野内画一条已知长度的线段(比如标定板上两个圆点之间的间距),让机器人从线段一端走到另一端,同时视觉系统输出对应的像素坐标变化。比较两组数据:
- 像素坐标的X方向变化量和机器人坐标的X方向变化量之间的比例,应该接近一个常数,这就是像素当量(每个像素对应的物理尺寸)。
- 像素坐标的Y方向和机器人坐标的Y方向同理。
- 像素坐标的X方向变化,应该只引起机器人坐标X或Y中的一个方向变化,如果发现像素X方向变化同时引起了机器人X和Y两个方向的大幅变化,说明映射矩阵可能引入了很大的旋转分量——除非你的相机安装角度确实有较大的倾斜。
如果方向或比例不对,先检查标定时“机器人坐标”和“像素坐标”的点对有没有记录错位。我遇到过一个项目,操作人员按顺序记录了9个点,但记录到第5个点时,把像素坐标记到了第6行的位置,导致整体映射矩阵扭曲,怎么调都调不好。这种低级错误用线扫描验证法很快就能暴露出来。
4.4 第四步,标定板Z向高度与工件实际高度不一致导致的系统性偏差
固定相机虽然拍的是二维图像,但镜头成像是有透视效果的。标定时标定板平放在台面上,Z高度是台面高度;工件如果比较高,比如一个高度50毫米的料块,它的表面在图像中的位置和平面标定板的成像位置是有偏移的。
在光轴垂直于台面的理想情况下,Z向高度差不会带来XY方向的偏差。但在光轴有倾角的场景下,高度每差1毫米,图像里的位置就可能偏移0.1毫米甚至更多。很多项目的标定结果在实验室台面上是准的,一上到实际产线,工件高度变了,精度立刻不行了。
遇到这种情况,要么把标定板垫高到和工件表面同一高度再标定,要么在软件里做高度补偿。如果同一个项目里有多款不同高度的工件,最好的办法是分别标定存储多套参数,生产时根据工件类型切换对应标定参数。海康VisionMaster支持参数组切换,这个功能在项目变更频繁时非常实用。
5. 从标定到示教:视觉输出的坐标,怎么变成机器人能用的动作指令
5.1 先明确“示教”的两个层面:基准点位示教和视觉引导逻辑设计
“示教”这个词在项目里容易造成歧义。一种理解是用示教器手动走点,把机器人作业的基准位置记录下来,这个叫基准点位示教;另一种理解是编写视觉引导的逻辑,让机器人根据视觉结果自动调整动作,这个叫引导逻辑设计。两个都做对了,整个视觉引导才能顺畅跑起来。
基准点位示教是在做视觉引导之前就必须完成的。机器人虽然能根据视觉坐标自动移动,但它的所有中间路径点、抓取前后的安全点、放置点都需要提前示教好。视觉输出的坐标不是一个绝对目标点,而是相对于某个基准位置(也就是“基准示教点”)的偏移。这是视觉引导项目的核心设计思想:机器人先走示教好的基准点,然后根据视觉给出的偏移量(DX、DY、D角度)叠加修正,再执行抓取动作。
这么设计的好处是显而易见的:即使视觉系统偶尔输出异常,机器人也不会跑飞太远,因为它的动作基准是示教点,视觉只是做微调修正。同时不同的工件摆放位置,视觉输出的偏移量只是小幅变化,机器人的运动路径始终保持稳定可控。
5.2 在VisionMaster里创建视觉引导方案的流程编排
海康VisionMaster做视觉引导方案,本质上是一个流程图的编排。我以一个典型的上料引导抓取场景为例,给你一个可以直接参考的流程顺序:
- “图像源”模块:连接相机。这里要注意触发方式的选择,如果用硬触发(外部IO触发或者机器人发出的触发信号),要确认相机端和PLC/机器人端的信号线接对了,触发延迟小于运动节拍要求;如果软件触发,要注意是否会造成节拍瓶颈。
- “图像预处理”模块:加载内参标定结果,做畸变矫正。如果图像对比度不足,加灰度变换、滤波等预处理算子。但切记预处理算子尽量少,每加一个都是在增加处理耗时和不确定性,项目上线以后要维护的就是这一串流程。
- “位置标定”模块:加载前面保存的九点标定映射文件,将后续定位算子输出的像素坐标自动转换为机器人坐标。这一步是流程编排里最关键的一环,一定要确认这个模块在流程中的位置是在定位算子之前还是之后——它应该作用在定位结果上,而不是作用在图像上。
- “定位”模块:根据工件特征选择合适的定位算子。固定相机引导场景里,最常用的是“模板匹配”加“圆心/边缘提取”的组合。模板匹配负责找到工件的粗略位置和旋转角度,圆心拟合或边缘拟合负责精确定位。海康VisionMaster的模板匹配工具对旋转和缩放的支持比较好,但要注意模板训练时选择的特征要稳定,不要选择容易受光照变化影响的部分。
- “坐标变换”模块:将定位算子输出的像素坐标加上旋转中心偏移量,输出最终的XY和角度值。这里要用到之前旋转中心标定的结果。
- “结果输出”模块:把最终的XY角度值,通过TCP/IP或者Modbus协议发送给机器人或PLC。
流程搭完之后,一定要先用VisionMaster自带的“模拟运行”功能,加载几张实际拍到的图片跑一遍,确认每个模块的输出都合理,再连上机器人联调。不要一上来就真实抓取,万一视觉坐标异常,机器人一下就怼到设备上,轻则报警,重则撞坏工装。
5.3 通信协议对接和格式转换:最容易出低级错误的地方
视觉系统算出了坐标,还要能送出去给机器人。海康VisionMaster支持多种通信方式,最常用的是TCP/IP Socket和Modbus TCP。以TCP/IP为例,视觉系统作为服务端(Server)监听一个端口,机器人作为客户端(Client)主动连接,连接成功后,视觉系统按照约定的报文格式把坐标数据发给机器人。
报文格式一定要提前和电气工程师、机器人工程师对清楚,包括多少字节一个坐标值、是浮点数还是整型、是大端还是小端、坐标系旋转方向是否一致、角度单位是弧度还是度、要不要带符号位。这些任何一个不匹配,机器人收到的就是乱码或者错误坐标。我亲眼见过一个项目,双方都以为是IEEE754标准的4字节浮点数,结果机器人那边按字符串解析,数据错到离谱,排查了整整一天。
还有一点要强调:视觉结果的使能信号。视觉系统输出坐标Data之后,最好还要输出一个“结果有效”的信号位。机器人只有在收到“有效”信号之后才读取坐标数据、执行运动指令,否则等待或者报警。这能防止相机拍到空料区或者识别失败时,机器人拿到一个旧数据或者随机数据去执行,造成撞机事故。
5.4 引导逻辑里的安全保护:角度归零、区域判定、置信度阈值
在引导逻辑里加安全保护,是我做每个项目都不会省略的环节。
角度归零:当视觉输出的角度偏移很小时(小于0.1度),直接输出0,防止机器人因为微小的角度修正而做无谓的旋转动作,浪费时间也增加机械磨损。
区域判定:视觉定位结果如果落在视野边缘或者超出预设的工作区间,标识为“定位失败”,不输出坐标。原理是映射矩阵在视野边缘的精度较差,超出范围的目标点不适合直接引导抓取。
置信度阈值:模板匹配算子会输出一个分数,代表匹配的可信程度。设置一个阈值,低于阈值的直接判定为“找不到目标”。这个阈值要根据实际测试结果来设,设得太高容易误报找不到,设得太低容易把错误的匹配结果当正确输出。
这些保护逻辑在VisionMaster里都可以通过“分支判断”或“结果判定”模块实现。虽然多花一点配置时间,但在生产中最能救命的往往不是标定精度多高,而是异常情况下系统能不出错地停下来。
6. 项目落地的最后一公里:联调、验收、还有那些没人告诉你的细节
6.1 联调期的分阶段验证:先静态验证,再做空跑,最后才实际抓料
整个系统搭建完毕,进入联调阶段。我建议按照三个阶段循序渐进,不要一上来就全自动运行。
阶段一是静态验证。机器人不动作,工件摆几个不同位置,视觉系统输出坐标,手动用示教器让机器人走到视觉给出的位置,观察针尖与工件特征点的偏差。一般来说偏差在正负0.5毫米以内就算系统联通了,如果偏差很大,回头按第4节的排查流程走一遍。
阶段二是空跑验证。机器人带夹具空跑,走到视觉给出的点位,确认路径无碰撞、节拍满足要求。这时特别要注意机器人在不同姿态下到达点位后,视觉计算出的XY和实际抓取面之间有没有干涉,因为视觉计算的是工件表面位置,但机器人末端夹具有一个Z向高度,会不会在下降过程中顶到工件或者工装,需要在示教路径里留好安全余量。
阶段三才是实际抓料。先放少量工件试运行,观察几次成功率,再逐渐增加速度和负载。如果中途出现偶发失败,抓取位置偏了,第一件事是去翻视觉日志,看那一次视觉输出的是多少,机器人实际执行的是多少,偏差在哪一环,不要盲目调标定。
6.2 验收要点:不仅看准确率,还要看稳定性、可维护性、异常恢复
项目验收时,除了看抓取成功率,我还会额外关注三个问题。
第一,系统长时间运行的稳定性。连续运行一两个小时后,相机发热会导致图像噪点增加,光源亮度衰减,这些都会影响视觉精度。验收时最好连续测试,模拟真实生产节拍,记录每小时的视觉失败次数。
第二,故障恢复的便利性。万一视觉系统或机器人异常停机,重新上电启动后,通信是否自动恢复?标定参数是否会丢失?图像参数是否能一键加载?这些问题,在验收报告里都应该有明确说明。
第三,备件和参数备份。现场调试完成后,一定要把相机参数、光源亮度、VisionMaster方案文件、标定数据全部导出备份,存放在项目资料目录里。不要觉得这是小事,很多项目运行半年后,某天相机坏了,换新相机后要重新调试,参数备份能帮你快速恢复,不至于重走一遍全部流程。
6.3 几个日常维护里最容易被忽略的坑:清洁、固定、环境光
最后分享几个运维阶段的高频问题。
一是镜头清洁。现场粉尘大,镜头上有灰就会在图像上留下暗斑或模糊区域,边缘提取产生伪特征。最好制定一个镜头清洁周期,用专业镜头纸和无水酒精轻轻擦拭,不要用普通纸巾,会把镀膜擦花。
二是相机固定螺栓的松动。现场设备振动不可避免,相机支架的螺栓用久了会松动,哪怕只有0.1毫米的位移,在像素级精度下都是非常大的偏差。建议在标定完成后,在相机支架和安装底座的相对位置打上记号漆,每次巡检时看一眼记号有没有错位,一眼就能发现是否松动。
三是环境光的变化。很多厂房白天和夜晚的光照条件完全不同,窗口阳光直射时的光强和晚上开灯时的光强可能差好几倍。如果图像处理管线中没有做足够的光照归一化,白天调好的参数,晚上可能就跑偏。条件允许的话,在相机外围加装遮光罩,或者在软件里做灰度归一化处理,把环境光的影响降到最低。
7. 写在最后的经验:标定是一次性的,精度是设计出来的
做了这么多项目之后,我个人最深的体会是:标定这件事,技术本身并不复杂,复杂的永远是它背后那些看不见的条件约束。你的相机安装、光源方案、坐标系约定、机器人负载状态、通信协议,任何一个环节的设计失误,最后都会以“标定不准”的形式暴露出来。所以与其反复折腾标定参数,不如在项目前期就把这些条件钉死,让标定在一个可控、干净的环境里进行。
还有一个经常被忽略的认知:标定完成后,视觉系统的精度上限就已经锁定了。标定只是把你的硬件条件转换成一个可用的数学模型,它不会帮你提升精度,只会如实反映你的硬件水平。如果你的现场硬件安装有倾斜、光源有反光、机械臂有负载变形,再好的标定算法也只能把这些误差平均化,不可能消除。真正的精度,是你在设计阶段就规划出来并且控制住的,不是靠后期标定调出来的。
如果你正准备上一个固定相机视觉引导的新项目,或者手头项目标定卡住了,建议把这篇文章里提到的排查顺序过一遍,从视觉重复性到机械臂精度,再到映射矩阵方向,大概率问题就出在其中的某一环。项目做得多了会发现,视觉引导系统从来没有玄学问题,所有看起来奇怪的现象,背后都有一个非常具体的、可以被排查出来的原因。