4、标定板设计:棋盘格与AprilTag、圆形标定板(Calibao)、多传感器通用标定板设计原则

标定板这东西,说白了就是给传感器看的「尺子」。你想想看,传感器要校准,总得有个已知尺寸的参照物吧?我这些年经手过的项目,从单目相机到激光雷达,从热成像到事件相机,几乎每个系统都离不开一块靠谱的标定板。

但问题来了——不同传感器对「参照物」的要求完全不一样。相机喜欢高对比度的角点,激光雷达需要高反射率的特征,深度相机又怕反光太强。嗯,这里面的门道,我今天跟你好好聊聊。

4.1 棋盘格标定板:经典但别踩坑

棋盘格,最经典的标定工具。我刚开始做视觉SLAM那会儿,用的就是A4纸打印的棋盘格。便宜、简单、角点检测算法成熟,OpenCV里直接调findChessboardCorners就行。

但棋盘格有个致命问题——方向模糊性。你拍一张棋盘格照片,旋转180度后,角点坐标完全一样。这就导致标定结果可能整体偏转180度,尤其在多相机系统中,外参直接崩掉。

我曾经踩过的坑: 有一次做双目相机标定,左相机和右相机各自检测棋盘格角点,结果一个检测到了正常方向,另一个检测到了旋转180度的方向。最后标出来的基线长度是负的……排查了整整两天才发现是棋盘格方向歧义导致的。

怎么解决?我建议用非对称棋盘格,比如一边是偶数格,一边是奇数格。或者干脆在棋盘格角落加一个标记点,用来指示方向。

另一个要注意的是棋盘格尺寸。我个人的经验是:

  • 室内标定:格子边长20-30mm,7×9或8×11格
  • 室外远距离:格子边长50-100mm,格数少一些
  • 微距/小视场:格子边长5-10mm,用高精度玻璃基板

打印棋盘格时,记得用哑光纸。亮面纸反光严重,尤其在强光下,角点检测会飘。我见过有人用相纸打印,结果标定出来的内参误差大了三倍。

4.2 AprilTag:鲁棒性更强的选择

AprilTag是密歇根大学搞出来的视觉基准标记系统。说白了,就是给每个标记一个「身份证号」。你拍到一个AprilTag,不仅能知道它的角点位置,还能知道它是几号标记、朝向哪个方向。

这比棋盘格强在哪?

  • 单帧可用:一个AprilTag就能解算位姿,棋盘格至少需要拍到完整图案
  • 方向唯一:每个Tag有编码,不存在180度歧义
  • 部分遮挡也能用:只要检测到足够多的码元,就能恢复ID和位姿

AprilTag有不同家族(family),比如Tag16h5、Tag25h9、Tag36h11。数字代表码元数量和最小汉明距离。我一般用Tag36h11,鲁棒性最好,误检率极低。

我的使用习惯: 在多传感器标定中,我会把多个AprilTag拼成一块大板子。每个Tag有独立ID,这样即使只拍到部分板子,也能知道拍到的是哪个区域。这在激光雷达和相机联合标定时特别有用——激光点云可能只扫到板子的一角。

生成AprilTag的代码很简单,用官方库就行:

# 安装AprilTag库
pip install apriltag

# 生成Tag图像
from apriltag import apriltag
import cv2
import numpy as np

# 生成Tag36h11家族的ID为0的Tag
tag = apriltag("tag36h11", 0)
tag_image = tag.generate(tag_size=200)  # 200x200像素
cv2.imwrite("tag36h11_0.png", tag_image)

打印AprilTag时,注意黑色边框要完整。我见过有人为了省纸,把Tag的白色边框裁掉了,结果检测率直接掉到50%以下。白色边框是解码的必要区域,千万别动。

4.3 圆形标定板(Calibao):高精度之选

圆形标定板,也叫Calibao(Calibration Board的简称)。它用圆形图案代替棋盘格的角点,检测的是圆心位置。

为什么用圆?因为圆心的亚像素定位精度比角点高。角点检测受图像梯度影响大,而圆心的椭圆拟合可以做到0.1像素甚至更高精度。我在做高精度工业相机标定时,棋盘格标出来的重投影误差0.3像素,换成圆形标定板直接降到0.08像素。

但圆形标定板也有坑——透视畸变。你拍一个圆,在图像上变成椭圆,圆心位置会偏移。这个偏移量跟圆的半径、相机视角有关。好在OpenCV的findCirclesGrid函数已经做了补偿,但前提是圆的半径要准确输入。

标定板类型 精度 鲁棒性 适用场景
棋盘格 中等(0.3-0.5像素) 高(角点检测成熟) 通用标定、快速验证
AprilTag 中等(0.3-0.5像素) 极高(抗遮挡、方向唯一) 多传感器、部分遮挡场景
圆形标定板 高(0.05-0.15像素) 中等(受光照影响大) 高精度标定、工业视觉

圆形标定板的布局也有讲究。我建议用非对称排列,比如行和列的圆数量不同,或者圆的大小交替变化。这样能避免方向歧义,也方便自动检测时确定坐标系。

4.4 多传感器通用标定板设计原则

好了,前面聊了三种标定板,各有优劣。但实际项目中,我们往往需要同时标定多个传感器——相机+激光雷达+IMU+深度相机。这时候就需要一块「通用标定板」,让所有传感器都能看到共同的特征。

我总结了几条设计原则,都是血泪换来的:

  1. 多模态特征共存:板子上同时要有视觉特征(棋盘格/AprilTag)和几何特征(平面、边缘)。激光雷达看不到图案,但能扫到平面和边缘。
  2. 高反射率差异:激光雷达需要反射率差异来区分特征。我一般用黑色哑光背景+白色高反射材料做图案。这样激光雷达点云中,白色区域的反射率明显高于黑色区域。
  3. 尺寸适中:板子太小,远距离看不清;板子太大,近距离拍不全。我一般按「最近工作距离下,板子占图像面积的1/4到1/3」来设计。
  4. 刚性背板:板子必须平整,不能弯曲。我见过有人用泡沫板做标定板,结果稍微一弯,标定出来的外参全是错的。建议用铝合金板或亚克力板做基底。
  5. 可拆卸设计:不同传感器可能需要不同的特征。我习惯把AprilTag和棋盘格做成可替换的模块,插在同一个背板上。

我推荐的一种通用标定板方案:

  • 基底:3mm厚铝合金板,表面喷黑色哑光漆
  • 视觉特征:中心贴一个Tag36h11的AprilTag(边长50mm)
  • 几何特征:板子四角贴白色高反射陶瓷片(直径20mm)
  • 辅助特征:板子边缘贴反光条,用于激光雷达检测边界

这样一块板子,相机能看到AprilTag,激光雷达能扫到陶瓷片和边缘,深度相机能看到平面。所有传感器都能找到共同参考点。

嗯,最后说一句。标定板设计没有「万能方案」,关键是根据你的传感器组合和工作距离来定制。我每次做新项目,都会先画一块板子,打印出来试拍几张,看看检测效果,再调整尺寸和布局。迭代个两三次,基本就能找到最优解。

你想想看,标定板是传感器融合的第一步。这一步走稳了,后面的联合标定、数据融合才能顺风顺水。别在这上面省功夫。