3. 采集环境搭建:光照条件、背景要求、相机固定方式、工作距离设定

标定数据采集,说白了就是给相机拍一组“标准照”。环境搭得对不对,直接决定标定成败。我见过太多人拿着畸变严重的图跑来问我“为什么标定老失败”,结果一看——光源乱打,标定板歪着放,工作距离跟实际产线差了十万八千里。嗯,咱们今天就把这事掰扯清楚。

3.1 光照条件:不是亮就行

很多人觉得“光照嘛,够亮就行”。其实不然。标定对光照的要求,跟日常拍照完全两码事。

核心原则:均匀、稳定、无反射

  • 均匀性:标定板表面各区域照度差异 < 10%
  • 稳定性:采集过程中光源不能闪烁或漂移
  • 无反射:标定板表面不能出现高光斑或镜面反射

我个人习惯用漫射LED面光源,配合柔光板使用。有一次在客户现场,他们用环形光直接打标定板,结果棋盘格角点检测总是跳来跳去。我过去一看,每个白色方格中心都反射了一个亮斑——角点坐标全偏了。

小技巧:用手在标定板前晃一下,看阴影是否清晰。如果阴影边缘锐利,说明光源太“硬”,需要加柔光。理想状态是几乎看不到阴影。

常见光源类型对比

光源类型 均匀性 稳定性 适用场景 避坑点
漫射LED面光 ★★★★★ ★★★★★ 通用标定 注意散热,长时间工作会衰减
环形光 ★★★☆☆ ★★★★☆ 小视野标定 容易产生中心亮斑
同轴光 ★★★★☆ ★★★★★ 高反光物体标定 成本高,对角度敏感
自然光 ★☆☆☆☆ ★☆☆☆☆ 不推荐 随时间变化,无法复现

3.2 背景要求:越简单越好

标定板的背景,原则就一条:让标定板从背景里“跳”出来。

我曾经遇到一个案例,工程师把标定板放在黑色橡胶传送带上拍。结果黑色棋盘格跟背景融为一体,边缘检测直接崩了。后来换了白色亚光纸板做背景,问题立刻解决。

注意:背景不能有纹理、图案、渐变。纯色亚光面是最佳选择。颜色选择上,跟标定板最暗/最亮区域形成对比即可——棋盘格就用中性灰,圆点阵就用纯白或纯黑。

背景选择速查表

标定板类型 推荐背景 不推荐背景
黑白棋盘格 中性灰(#808080) 黑色、白色、有纹理表面
圆点阵 纯白亚光 反光面、图案背景
ChArUco板 纯色(灰/白/黑) 带编码图案的背景

3.3 相机固定方式:稳,是第一位的

标定过程中,相机和标定板的相对位置必须稳定。你想想看,如果相机在采集过程中有微振动,拍出来的10张图每张的位姿都不一样,标定结果能准吗?

我推荐用以下方式固定相机:

  1. 刚性连接:相机通过转接板直接固定在铝型材或铸铁平台上
  2. 锁死所有调节机构:如果用了云台或关节臂,确认所有旋钮已锁紧
  3. 避免长悬臂:相机离固定点越远,振动放大越明显
  4. 加装减振垫:如果现场有振动源(如传送带、气动设备),在相机底座下加橡胶减振垫

我的习惯:固定好相机后,用手轻敲相机外壳,观察监视器上的图像是否抖动。如果抖动超过1个像素,说明固定不够牢靠。

3.4 工作距离设定:跟实际应用走

工作距离,就是相机镜头前端到标定板表面的距离。这个距离必须跟实际产线上的工作距离一致。为什么?因为镜头的畸变模型是随物距变化的——你在200mm处标定的参数,拿到300mm处用,误差会放大好几倍。

我记得有个项目,客户在实验室用300mm工作距离标定,产线上实际是250mm。结果测量误差从0.1mm飙到0.5mm。后来重新在250mm下标定,问题解决。

工作距离设定步骤

  1. 测量实际工作距离:用卷尺或激光测距仪,量出产线上相机到被测物体的距离
  2. 按此距离放置标定板:标定板表面与相机镜头前端保持相同距离
  3. 微调对焦:在设定距离下重新对焦,确保标定板图案清晰
  4. 锁定镜头:对焦环和光圈环都要锁死,防止后续松动

重要:如果产线工作距离有波动范围(比如±50mm),建议在范围的两端和中间各采集一组标定数据,做分段标定或景深补偿。

3.5 环境搭建知识体系

下面这张图把环境搭建的四个核心要素串起来了,你可以对照检查自己的搭建方案:

标定环境搭建四要素 标定数据采集环境 光照条件 背景要求 相机固定方式 工作距离设定 均匀 稳定 无反射 纯色 无纹理 高对比 刚性 锁死 减振 与实际产线一致 四要素缺一不可,任何一个出问题 都会导致标定结果偏差

3.6 搭建检查清单

每次搭建完环境,我建议你对照下面这个清单过一遍:

检查项 标准 通过/不通过
光照均匀性 标定板各区域灰度差 < 20(8位图) □
无反射光斑 标定板表面无高光点 □
背景纯色 背景区域灰度标准差 < 5 □
相机固定 轻敲相机,图像抖动 < 1像素 □
工作距离 与实际产线偏差 < 5mm □
对焦清晰度 棋盘格角点亚像素定位稳定 □

最后说一句:环境搭建花10分钟,能省下后面2小时的排查时间。我每次做标定前,都会先花5分钟把环境检查一遍——这个习惯帮我避免了很多低级错误。