在线标定板生成器

生成可直接打印的棋盘格标定板,矢量输出、物理尺寸按毫米定义。页面自带 100mm 校验尺——打印完用直尺量一下,就知道打印机有没有偷偷缩放。 全部在浏览器本地生成,不上传文件、不用注册。

快速预设
几何参数

填的是内侧角点数,不是方格数。8×6 方格的板 → 填 7 和 5。

A4 建议 20mm;追精度可用 15mm,但要保证视野边缘也能拍到角点。
纸张与打印
OpenCV 参数
import cv2
import numpy as np

pattern_size = (7, 5)   # 内侧角点 (列, 行)
square_size  = 0.02            # 米

# 物体坐标:z=0 平面上的角点网格
objp = np.zeros((pattern_size[0] * pattern_size[1], 3), np.float32)
objp[:, :2] = np.mgrid[0:pattern_size[0], 0:pattern_size[1]].T.reshape(-1, 2) * square_size

ok, corners = cv2.findChessboardCorners(gray, pattern_size, None)

预览

预览随屏幕缩放,实际尺寸以打印结果为准
棋盘格标定板 7×5 内角点,方格 20mm棋盘格标定板 · 8×6 方格 · 7×5 内角点方格边长 20 mm · 板尺寸 160×120 mm · A4 纵向 · 请按 100% 实际尺寸打印100 mm 校验尺用直尺量,必须正好 100 mm若长度不符,说明打印机做了缩放:关闭「适合页面 / Fit to page」,缩放设为 100% 后重新打印。OpenCV patternSize=(7, 5) · squareSize=0.02 m · SLAM Toolkit
方格数
8×6
内侧角点
7×5(35 个)
板物理尺寸
160×120 mm
纸张
A4 纵向

这个生成器有什么不一样

  • 矢量,不是位图。PDF 和 SVG 里每个方格都是矢量矩形,物理尺寸由毫米直接定义,不经过位图缩放。位图在放大时会插值边缘,角点亚像素定位会被这条模糊边影响。
  • 100mm 打印校验尺。绝大多数「标定精度不对」的问题,根因是打印机把页面缩到了 96%。尺子放在同一张纸上,量一下就知道该不该重打。
  • 显式区分角点与方格。表单只接受内侧角点数,同时把方格数、总角点数算给你看,避免把 8×6 填成 patternSize。
  • 参数直出。patternSize 和以米为单位的 squareSize 直接写成可复制的代码,不用再手算 20mm → 0.02。

打印检查清单

  1. 下载 PDF,用 Adobe Acrobat / 系统预览打开(不要在浏览器里直接打印,多一层缩放)。
  2. 缩放设为 100% / 实际尺寸,关闭「适合页面」「缩放以适合可打印区域」。
  3. 纸张选对:选的纸张必须和纸盒里实际装的纸一致,否则驱动会重新排版。
  4. 量校验尺:打印后立刻用直尺量页面上的 100mm 尺,偏差超过 0.5mm 就重打,不要凑合。
  5. 贴板:把纸贴到硬质平板(铝板、亚克力)上,四角压平。纸张翘曲会让平面假设失效,这是仅次于缩放的误差来源。

不要塑封、不要覆膜。光面会让角点附近出现高光溢出,棋盘格的黑白边界变糊; 塑封膜本身也有厚度和形变。需要耐用就直接打印在哑光纸或 KT 板上。

常见坑

  • 把方格数填成内角点:8×6 方格的板,patternSize 是 (7, 5),填成 (8, 6) 会一直检测失败。
  • 打印机缩放:表现为「所有标定结果都系统性偏大/偏小」,跟相机无关,先量校验尺。
  • 角点没覆盖图像边缘:全部挤在画面中间时,畸变参数(k1、k2、p1、p2)外推会很差,重投影误差好看但实际畸变没标出来。
  • 用同一张板既标内参又做手眼:手眼标定的板位姿需要尽量分散、朝向变化大,和内参标定的「铺满画面」是两种取图策略。
  • 只在一个距离上标定:焦距和主点会和其他距离强耦合,至少在 2–3 个距离各采一组。

常见问题

「内侧角点」和「方格数」有什么区别?

方格数是板上一共有多少个小格子;内侧角点是被黑格和白格共用的内部交叉点。一张 8×6 方格的棋盘格板,内侧角点是 7×5,共 35 个。OpenCV 的 findChessboardCorners 和 calibrateCamera 用的是角点数,也就是 patternSize=(7, 5)——这是新手最容易填错的一项。

打印出来量校验尺不是 100mm,怎么办?

说明打印机做了页面缩放。在打印对话框里关闭「适合页面 / Fit to page」,把缩放设为 100%(实际尺寸),并确认选择的纸张和实际装入的纸张一致。浏览器打印默认值经常是 96% 左右,会让整张标定板等比缩小约 4%,你的方格边长就不再是设定的值。

方格边长应该选多大?

内参标定一般 20–30mm,板子要能覆盖整幅图像,尤其是边缘区域。手眼标定或小视野场景可以用 10–15mm,但要保证相机在最近工作距离下仍能清晰拍到至少 5×5 个角点。方格太小会在远处检测不到,太大又难以覆盖视野边缘。A4 打印建议 20mm 左右。

为什么生成的 PDF 里说明文字是英文?

PDF 在浏览器端用 jsPDF 生成,它自带的字体不含中文字形,强行写中文会输出乱码。为了保证这张板的几何完全正确、不引入风险,PDF 内的说明文字暂时保持英文,网页界面仍然是中文。后续会嵌入中文字体子集。

生成的文件会上传到服务器吗?

不会。整个生成过程在你的浏览器里完成,这个页面没有后端接口,你的参数只会出现在你自己浏览器的地址栏里(方便分享配置),不会发往任何服务器。

支持 ChArUco 和 AprilTag 吗?

暂不支持,但已在计划内。ArUco / AprilTag 依赖官方字典的精确位图,位错一位就会静默检测失败——所以要先接入并逐个验证字典,而不是凭印象生成,验证通过再上线。

这个标定板能用于 LiDAR 与相机联合标定吗?

可以用于相机内参标定,以及以棋盘格为参照的雷达-相机外参初值。但 LiDAR 对靶标材质和反射率敏感,普通打印纸板的点云质量较差,联合标定更适合用 ChArUco 板或专用靶标。在线版的雷达-相机联合标定工具在路线图里。

相关