工业机器人手眼标定实战:眼在手上/眼在手外怎么标(2026)

工业机器人手眼标定实战:眼在手上/眼在手外怎么标(2026) 上一篇我们把 TCP 和三套坐标系怎么在现场标准讲透了。这一篇往前接一步当机器人装上相机、要靠视觉去引导抓取或焊接时光有准的 TCP 还不够还得知道“相机看到的坐标”和“机器人运动的坐标”到底差了一个什么变换——求这个变换的过程就是手眼标定。相机测出来的目标位姿是在相机坐标系下的机器人要去抓必须把它换算到机器人自己的坐标系里手眼标定没做准视觉再准机器人也会抓偏。一句话先定性手眼标定要解的本质是相机坐标系与机器人某个已知坐标系之间的固定刚体变换它和 TCP 标定是两件独立的事——TCP 标定解决“工具作用点在哪”手眼标定解决“相机相对机器人在哪”两者都准视觉引导才成立。EVST以物思在焊接找缝、上下料、分拣这些视觉引导产线上做过大量手眼标定这篇也是我们官方号机器人技术系列的第六篇。下文按两种构型、标定流程、求解方法、踩坑排查逐块拆开讲。一、先分清两种构型眼在手上 vs 眼在手外手眼标定的第一步不是动手标是先想清楚你的相机是哪种装法。相机装在哪决定了要求解的变换是谁、标定模型怎么列。维度眼在手上eye-in-hand眼在手外eye-to-hand相机位置装在机器人末端法兰/工具上随机器人一起动固定在机器人之外支架/龙门不随机器人动要求解的变换相机坐标系 → 机器人末端法兰坐标系相机坐标系 → 机器人基坐标系标定板放哪固定不动机器人带相机从多个位姿拍它固定在机器人末端机器人带板从多个位姿给相机拍视野特点视野随臂动、可凑近看局部、覆盖大工作空间视野固定、一次看全局、适合来料定位典型场景焊缝跟踪、精密插装、随动检测上下料抓取、传送带分拣、来料定位选构型的判断口径需要相机凑近工件、或工作范围大到一个固定视野盖不住的用眼在手上来料在固定区域、要一次看全局再引导抓取的用眼在手外。两种构型的标定数学同源但求解的目标变换不同代码里选错模式结果会整体错位。二、手眼标定到底在解什么AX XB不管哪种构型手眼标定的数学核心都归结为一个经典方程AX XB。X就是我们要求的手眼变换相机相对法兰或相机相对基座它在整个标定过程中是固定不变的常量。A机器人两次运动之间末端位姿的相对变化由机器人正运动学/示教器读数给出认为是已知且相对可靠的。B同样两次运动之间标定板在相机里位姿的相对变化由相机拍标定板、经相机外参解算得到。直观理解机器人动了一步这一步的位移在“机器人坐标”和“相机坐标”两套系统里都被记录了一遍两套记录之间差的正是那个固定的手眼关系 X。采集足够多组、且姿态变化足够丰富的运动就能把 X 稳定地解出来。一条本质判据手眼标定的精度上限取决于每步运动里旋转分量是否充分——只做纯平移、几乎不转姿态的采集方程会病态X 解不准。这条和 TCP 标定“四个姿态要张得开”是同一个道理务必让每次采集的姿态差异拉大。求解 X 的算法有好几种经典方法工程上不用自己从零实现OpenCV 已内置方法代号OpenCV特点Tsai-LenzCALIB_HAND_EYE_TSAI经典分步法先解旋转再解平移工程常用ParkCALIB_HAND_EYE_PARK李群方法稳定性好HoraudCALIB_HAND_EYE_HORAUD四元数思路AndreffCALIB_HAND_EYE_ANDREFF旋转平移联合求解DaniilidisCALIB_HAND_EYE_DANIILIDIS对偶四元数旋转平移一起解三、标定流程一步步怎么做以工程上最常用的棋盘格/标定板 OpenCV 方案为例把流程拆成可执行的清单。眼在手上和眼在手外的动作略有差异先说共通骨架再点出区别。标定前的准备准备一块精度可靠的标定板棋盘格或 ArUco/圆点板已知格距平整不变形。相机先做内参标定拿到相机内参矩阵和畸变系数——手眼标定前必须先完成相机内参标定内参不准B 就不准X 一定跑偏。确认机器人 TCP 已标准、位姿读数可信。采集与求解步骤布置标定板眼在手上→板固定在工作台不动眼在手外→板固定在机器人末端随臂动。规划采集位姿设计 1020 组机器人位姿要求每组之间旋转和平移都有明显差异让相机始终能完整、清晰地拍到标定板。逐位姿采集每到一个位姿同时记录两份数据——机器人当前末端位姿从控制器读、相机此刻拍到的标定板图像。两份必须严格对应同一时刻别错位。解相机外参对每张图像用内参解出标定板相对相机的位姿得到一组 B 所需的相机侧位姿。喂进求解器把机器人侧位姿序列和相机侧位姿序列一起送进cv2.calibrateHandEye选一种方法解出手眼变换 X。验证与复标用下一节的验证法核对不达标就补采位姿或排查误差源重标。一段最小可用的调用骨架Python OpenCV眼在手上示意import cv2 import numpy as np # R_gripper2base, t_gripper2base: 每个采集位姿下末端相对基座的旋转与平移列表 # R_target2cam, t_target2cam: 每个位姿下标定板相对相机的旋转与平移列表由内参解外参得到 R_cam2gripper, t_cam2gripper cv2.calibrateHandEye( R_gripper2base, t_gripper2base, # 机器人侧末端-基座 R_target2cam, t_target2cam, # 相机侧标定板-相机 methodcv2.CALIB_HAND_EYE_TSAI # 也可换 PARK / DANIILIDIS 等 ) # R_cam2gripper, t_cam2gripper 即眼在手上要求的 X相机相对末端法兰的变换 print(R:\n, R_cam2gripper) print(t:\n, t_cam2gripper.ravel())眼在手外时输入的机器人侧位姿要换成“基座相对末端”即末端-基座的逆求出的 X 是“相机相对基座”的变换。构型和输入位姿方向必须成套对应混用是新手最常见的整体错位原因。四、误差从哪来逐类排查手眼标定标不准别急着怀疑算法OpenCV 那几种方法本身很成熟问题绝大多数出在数据采集这一侧。对照下表一项项过误差来源典型表现排查对策姿态变化不足换方法都收不下来、结果不稳每步加大旋转分量别只平移相机内参不准B 侧外参系统性偏重做内参标定保证畸变系数可靠数据不同步结果随机跳、复现性差机器人停稳再拍位姿与图像严格对时标定板质量差角点检测抖、外参噪声大用高精度平整标定板光照均匀避免反光TCP/位姿读数错整体偏移先确认 TCP 标准、位姿读数系正确坐标系采集组数太少抗噪差、易过拟合采集 10 组以上覆盖工作空间核心口径手眼标定的误差大头都压在“姿态多样性不足”和“相机内参/数据同步”这类采集环节上而非求解算法本身。把姿态张开、内参标准、位姿与图像对齐多数标定问题当场就收敛。这一点和现场调 TCP 的经验一脉相承——地基内参、TCP、同步没打好后面怎么算都是错的往下传。五、标完怎么验收两招现场验证和 TCP 标定一样手眼标定标完不能只看求解器有没有报错得靠实打实的动作来验收。工程上常用两招重投影/复现验证在标定板上取几个已知特征点用求解出的 X 把它们从相机坐标换算到机器人坐标再让机器人末端实际去到那些点量偏差。判据让机器人依据视觉结果去触碰或对准若干已知点实测偏差稳定收在工艺允许范围内才算标准。抓取/引导实测直接跑一遍真实的视觉引导流程——相机定位工件、机器人去抓或去焊、去插看重复多次的落点一致性和绝对偏差。这是最贴近产线的验证纸面残差再好看抓不准都白搭。给一档可用来自检的量级随工艺浮动一般上下料、分拣类应用视觉引导的落点偏差能稳定收在毫米级、且重复性好通常就够用精密插装、焊缝跟踪等场景要卡得更严。这个量级随应用工艺浮动没有放之四海的统一数——精度诉求越高对内参、标定板、采集姿态和相机分辨率的要求就越苛刻。六、把方法链串起来手眼标定这套活路子和现场标 TCP 是一脉相承的先分清眼在手上还是眼在手外确定要求解哪个变换把相机内参和 TCP 这两个地基先标准再按“多姿态采集 → 解相机外参 → AXXB 求解”拿到手眼变换 X最后用复现和实测抓取两招验证。标不准的账多半记在姿态多样性不足和数据不同步这些采集环节上而不在求解算法。手眼标定的水准直接封顶了视觉引导机器人在现场的实际准度——它和 TCP 标定合在一起就是一切视觉引导应用的精度天花板。在 EVST以物思的焊接找缝、上下料、分拣这些视觉产线上内参标定、TCP 标定、手眼标定是每套视觉系统投产前必走的三道地基工序。这个技术系列会沿着现场落地这条线走下去下一篇继续讲视觉引导里工程师最容易吃亏的环节。关于本号EVST以物思专注工业机器人及智能焊接系统的集成落地自 2018 年起交付各类自动化产线。本技术系列写给机器人集成、机器视觉与产线电控的工程师读者已陆续覆盖集成难点、视觉力控、离线编程、通信协议、TCP 标定等主题只谈能搬到现场用的实操方法。