跳到正文
PreciSim
concepts

标定链总览

六条链的顺序、依赖关系、各自的判据,以及「链」这个说法的含义。

为什么是「链」不是「一堆标定」

因为它们有依赖顺序,而且前一条做错时,后一条不会报错,只会给出一个看起来合理的错值。

         ┌──────────────────────┐
         │ C3 相机内参与畸变     │  先把「相机看到的」矫正成「几何上正确的」
         └──────────┬───────────┘
                    ↓
         ┌──────────────────────┐
         │ C1 像素当量           │  把像素换算成毫米
         └────┬─────────────┬───┘
              ↓             ↓
   ┌────────────────┐  ┌──────────────────┐
   │ C2 手眼标定     │  │ C4 振镜场校正     │
   └────────┬───────┘  └──────────────────┘
            ↓
   ┌────────────────┐     ┌──────────────────┐
   │ C6 平台几何     │     │ C5 Z 轴焦点       │(独立,但要先有清晰成像)
   └────────────────┘     └──────────────────┘

六条链

# 名称 解什么 依赖 典型判据
C1 像素当量 mm/px、旋转角、非正交量 C3 20 mm 行程偏差 < 0.05 mm
C2 手眼标定 T_Tool_CamT_World_Cam C1 九点残差 RMS < 0.03 mm
C3 相机内参与畸变 fx, fy, cx, cy, k1, k2, p1, p2 重投影误差 < 0.15 px
C4 振镜场校正 场内网格畸变校正表 C1 场内残差 RMS < 15 µm
C5 Z 轴焦点 最佳焦面位置、景深范围 焦点重复性 < 10 µm
C6 平台几何 正交度、旋转中心、平面度 C1、C2 正交度偏差 < 50 µrad

判据里的数字是 demo-2axis-vision 这台虚拟机的默认容差。 真机上按你的精度预算改,改的地方在机台配置里,不在代码里。

每条链的五步是一样的

所有链都实现同一个接口,所以界面、日志、存档、重跑逻辑全部复用:

public interface ICalibrationProcedure
{
    string Id { get; }
    IReadOnlyList<string> DependsOn { get; }   // 依赖的其他链
    Task<CalibResult> RunAsync(CalibContext ctx, IProgress<CalibProgress> p, CancellationToken ct);
}
步骤 做什么 失败时
prepare 检查依赖链是否已完成、器材是否就位、参数是否合法 直接拦住,不要让人跑完 5 分钟才发现依赖没做
acquire 按规划的位姿采集数据 单点失败可重采,不必整条重来
solve 求解,输出参数与残差 残差异常要给出可能原因,不只是数字
verify 用没参与求解的数据回算 这里出偏差数字与 PASS/FAIL
persist 版本化落盘 永远追加,不覆盖,可回滚

verify 用的数据必须没参与 solve。 用同一批数据既求解又验证, 残差一定好看,但什么也没验证——这是标定报告里最常见的自欺欺人。

真值评分:虚拟设备独有

真机上你只有残差,没有真值。虚拟设备知道真值,所以能多给一行:

solve:  mm/px = 0.019823
truth:  mm/px = 0.019841
verify: 20 mm 行程上偏差 0.018 mm,容差 0.05 mm → PASS

这行的意义不是「让数字好看」,而是让你知道残差小到什么程度才算真的准。 很多人第一次发现「残差 0.02 px 但实际偏差 0.3 mm」时,才真正理解了标定。

结果存哪

%ProgramData%\PreciSim\calibration\
  demo-2axis-vision\
    C1-pixel-size\
      2026-09-21T10-24-13.json     ← 每次跑一条记录,永不覆盖
      latest.json                  ← 指向当前生效的那条

每条记录含:参数、残差、真值对照(虚拟设备才有)、采集原始数据的引用、软件版本、操作者。 出了问题要能回溯到「哪次标定开始不对的」,这份存档就是全部依据。

最后更新: 2026/9/21
这页有帮助吗?