返回专辑
·Johan·3 分钟阅读

AprilTag:便宜的辅助真值

opencv aruco/AprilTag 检测 + solvePnP 给 6DoF;物理尺寸要实测,远距离小 tag 角度噪声涨得快。

AprilTag:便宜的辅助真值

1. 实验室尺子,不是户外主传感器

受控环境里 AprilTag 是廉价地面真值:贴墙标定、手眼验证、重复性测试、产线工位定位。不用它替代激光雷达——远距离、大角度、运动模糊下位姿解算噪声会被当成精度。尺度来自卡尺量的边长,不是库函数魔法。把它当辅助真值,边界写清楚,比夸大精度靠谱。户外同时定位与建图主传感器仍是激光或视觉惯性,标签只做标定和抽检。

2. OpenCV 检测与位姿

预定义字典、检测角点、单标记位姿估计是标准链。标记边长必须是物理边长米,测错直接尺度错——不是大概打印尺寸。多标记用网格板或棋盘混合板加板级位姿估计,点多则深度和旋转可观性更好。亚像素角点细化默认开;模糊图调自适应阈值窗口。可视化画检测框和坐标轴,轴长度与物体单位一致,目视验收和重投影均方根交叉验证。

python
dictionary = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_APRILTAG_36h11)
params = cv2.aruco.DetectorParameters()
params.cornerRefinementMethod = cv2.aruco.CORNER_REFINE_SUBPIX
corners, ids, _ = cv2.aruco.detectMarkers(gray, dictionary, parameters=params)
rvecs, tvecs, _ = cv2.aruco.estimatePoseSingleMarkers(
    corners, marker_length_m, K, dist)

3. 精度因素

标记像素边长小于四十像素时角度噪声涨得快——定最小像素边长操作规程。 grazing 角角点亚像素差,位姿旋转抖。打印纸 warp、墨水扩散使有效边长大零点五到一毫米,远距离尺度敏感。运动模糊角点滑移,别在模糊帧做控制。远距离平移噪声随距离增;部分标记遮挡时板级位姿仍可用,单标记可能深度不可观。共面点解算用专用共面算法,别用迭代法无初值——一百八十度翻转在标签上很常见。

4. 与激光和动作捕捉

AprilTag 适合短距、受控、可重复的六自由度参考。与动作捕捉或激光对比时,报重复性标准差(固定工装一百帧)和标记尺寸随距离曲线。动态场景自动曝光和卷帘快门耦合会让角点抖——曝光和快门是精度的一部分。联合标定相机内参和板位姿可减少流程,但打印质量和平整仍是瓶颈。

5. 字典与误识

常用三十六 h11 字典;标记编号空间与汉明距离决定互误识率。小标记用更高率字典未必更好——物理打印分辨率和对比度是瓶颈。检测参数里最小周长率过滤过小噪声;refine 步骤在模糊图可略稳。我会把物理边长、字典名、角点细化开关写进 yaml,启动时断言与标定板文档一致。

6. 案例:边长测错尺度漂移

某次手眼验证总是偏百分之三——查下来标记长度用了文档值一百毫米,卡尺实测九十七毫米。解算重投影仍低,但平移尺度系统偏。改配置为实测值后与激光对比误差回到毫米级。重投影低不保证度量对;边长是尺度契约。

7. 验收

  • 已知距离留出:位姿误差对地面真值
  • 固定工装一百帧重复性标准差
  • 边长卡尺实测与配置一致
  • 远距小标记大角度切片噪声曲线
  • 共面场景用共面算法,时间跳变检测

AprilTag 是实验室尺子。尺度、视角、打印质量任一条虚,解算再低重投影也不代表能控机器人。

← 全部文章

johan's blog