2、视觉系统标定:相机内参标定、手眼标定原理、标定板使用、标定结果验证方法
视觉系统标定,说白了就是给机器人的眼睛配一副准确的“眼镜”。
我见过太多项目,机械臂抓不准,最后排查下来,80%的问题都出在标定上。不是相机没标好,就是手眼关系没算对。嗯,这一章咱们就把这块硬骨头啃下来。
核心结论:标定不准,后面所有视觉引导都是空中楼阁。我建议你花70%的时间做标定,30%的时间调抓取逻辑。
2.1 相机内参标定——给相机做“视力检查”
相机内参,就是描述相机本身光学特性的参数。包括焦距、主点坐标、畸变系数这些。
为什么要标定内参?因为镜头不是完美的。你想想看,一个理想的小孔成像模型,现实中根本不存在。镜头有畸变,像素有偏移,这些都需要通过内参来修正。
内参标定的核心步骤:
- 准备标定板——棋盘格或圆点阵,尺寸要精确测量
- 采集多角度图像——至少15-20张,覆盖视野各个区域
- 提取角点——算法自动找棋盘格角点
- 计算内参——用张正友标定法求解
- 验证重投影误差——误差小于0.5像素才算合格
我的经验:采集图像时,标定板要倾斜、旋转、远近都拍一拍。我曾经有个项目,只拍了正对着相机的图像,结果标定出来的畸变参数完全不对,抓取边缘物体时偏差了3mm。后来补拍了倾斜角度,问题就解决了。
内参标定的数学本质,其实就是求解一个3x3的矩阵:
内参矩阵 K = [fx 0 cx]
[0 fy cy]
[0 0 1]
其中:
fx, fy —— 焦距(像素单位)
cx, cy —— 主点坐标(图像中心偏移)
实际项目中,我习惯用OpenCV的cv2.calibrateCamera()函数。代码很简单,但要注意输入的世界坐标点要精确到毫米级。
2.2 手眼标定原理——让眼睛和手“认识”彼此
内参标定解决的是“相机怎么看世界”,手眼标定解决的是“相机看到的和机器人手的位置有什么关系”。
手眼标定分两种场景:
- 眼在手上(Eye-in-Hand):相机装在机械臂末端,跟着手走
- 眼在手外(Eye-to-Hand):相机固定安装,看机械臂干活
我做过的大部分项目都是眼在手上。为什么呢?因为灵活。相机跟着末端走,可以近距离观察目标,精度更高。
手眼标定的核心公式:
AX = XB
其中:
A —— 机器人末端的两次位姿变换关系
B —— 相机看到的标定板两次位姿变换关系
X —— 我们要求解的相机到机器人末端的变换矩阵
这个公式看着简单,但求解起来挺讲究。我建议用Tsai两步法或者基于四元数的方法,稳定性更好。
注意:手眼标定对运动质量要求很高。我曾经遇到过标定结果反复跳动的情况,排查了半天,发现是机器人运动时关节有微小回差。后来我让机器人走大角度运动,标定结果就稳定了。
2.3 标定板使用——别小看这块板子
标定板,说白了就是一块印着已知图案的平板。常见的有棋盘格和圆点阵两种。
| 类型 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 棋盘格 | 角点提取简单、精度高 | 对光照敏感、边缘易模糊 | 室内、光照可控 |
| 圆点阵 | 抗噪能力强、适合大角度 | 圆心提取稍复杂 | 光照变化大、大倾角 |
使用标定板的几个要点:
- 板子要平整,不要弯曲。我见过有人用打印纸贴在不平的纸板上,标定出来误差大得离谱
- 尺寸要精确测量,误差控制在0.1mm以内
- 表面不要反光,亚光材质最好
- 定期检查板子有没有磨损或污渍
避坑指南:我曾经用一张A4纸打印的棋盘格做标定,结果因为纸张受潮变形,标定出来的内参每天都不一样。后来换了陶瓷标定板,问题就再没出现过。嗯,标定板这东西,真不能省。
2.4 标定结果验证方法——别急着用,先验一验
标定完就急着上项目?我劝你慢一点。验证这一步,能帮你省下后面几天的排查时间。
验证方法分三步:
- 重投影误差检查
- 把标定板上的3D点投影到图像上
- 计算投影点和实际提取点的像素距离
- 平均误差应小于0.5像素,最大误差不超过1像素
- 重复性测试
- 固定标定板位置,重复标定10次
- 看内参和手眼矩阵的波动范围
- 波动超过5%就要怀疑标定质量
- 实际抓取验证
- 放一个已知位置的目标物体
- 用视觉引导机械臂去抓
- 测量实际抓取点和理论点的偏差
- 偏差在1-2mm内算合格
我的习惯:每次标定完,我都会做一个“三点验证”。在视野内选三个不同位置的点,让机器人去指。如果三个点都指准了,我才放心往下走。这招帮我排过不少雷。
2.5 本章知识体系
下面这张图,是我自己总结的视觉标定知识框架。你看一眼,心里就有谱了。
这张图把整个视觉标定的脉络理清楚了。你从内参开始,一步步走到验证,每一步都踩实了,机械臂抓取的成功率自然就上去了。
最后说一句:标定这件事,急不得。我见过太多人为了赶进度,草草标定就上线,结果后面花了两倍的时间来排查问题。嗯,磨刀不误砍柴工,标定这步走稳了,后面就顺了。