physics
真值与容差
「真值」到底指什么、偏差怎么算、容差从哪来——以及为什么残差小不等于标得准。
真值是什么
在虚拟设备里,真值是生成这个场景时用的那组参数本身,不是反推出来的近似:
| 标定链 | 真值 |
|---|---|
| 像素当量 | 由相机内参与工作距离解析算出的 mm/px |
| 手眼 | 场景里相机与工具的位姿变换,配置里直接写着 |
| 内参畸变 | 配置里的 fx, fy, cx, cy, k₁, k₂, p₁, p₂ |
| 振镜场校正 | 生成场畸变时用的那张畸变表 |
| Z 轴焦点 | 光学模型里的最佳焦面位置 |
| 平台几何 | 配置里的正交度、旋转中心 |
所以真值评分不是「用另一种算法再算一遍」,而是拿你的结果和生成器的输入对账。 这是虚拟设备相对真机唯一的、也是决定性的优势。
残差 ≠ 偏差
这是整份文档里最值得记住的一句话。
| 定义 | 说明什么 | |
|---|---|---|
| 残差 | 模型对参与求解的数据的拟合误差 | 模型和数据自洽程度 |
| 偏差 | 你的结果与真值之差 | 标得准不准 |
残差小只说明「你的模型能解释你采的这批数据」。如果数据本身有系统性问题 (畸变没标、全挤在视野中心、单向采集把反向间隙藏了), 残差会很小,偏差会很大。
实验 1 的第 4 步专门让你造出这个现象:把畸变调大,残差 RMS 只从 0.08 px 涨到 0.21 px, 看起来没什么问题,但实际偏差从 0.018 mm 涨到 0.15 mm,直接超差 3 倍。
偏差怎么算
不同链的量纲不同,统一折算成「在标称工作范围上的等效长度偏差」,这样能横向比较:
| 链 | 偏差定义 |
|---|---|
| 像素当量 | |scale_est − scale_true| / scale_true × L_ref,L_ref = 20 mm |
| 手眼 | 一组测试位姿下,预测位置与真实位置的欧氏距离 RMS |
| 内参畸变 | 测试点的重投影误差 RMS(px),另折算成视野边缘的 mm 偏差 |
| 振镜场校正 | 校正后场内残差的 RMS 与 max(µm) |
| Z 轴焦点 | 多次独立标定结果的标准差(µm),以及与真实焦面之差 |
| 平台几何 | 补偿后对角线长度误差(mm/m) |
verify 步骤用的数据必须没参与 solve,否则这些数字全都不作数。
容差从哪来
不是拍脑袋,是从误差预算倒推的。做法:
- 写下最终要保证的指标,比如「贴装位置精度 ±0.05 mm(3σ)」;
- 列出所有贡献项:标定误差、运动误差、视觉重复性、工件本身公差、热漂移;
- 按平方和开方(RSS)合成,因为这些误差互相独立:
σ_total = sqrt(σ_calib² + σ_motion² + σ_vision² + σ_part² + σ_thermal²)
- 给每一项分配预算,使
3σ_total ≤ 0.05 mm。
demo-2axis-vision 的默认预算:
| 贡献项 | 1σ (mm) | 占总方差 |
|---|---|---|
| 标定(C1+C2+C3 合成) | 0.0080 | 36% |
| 运动(重复定位 + 间隙) | 0.0042 | 10% |
| 视觉重复性 | 0.0095 | 51% |
| 工件公差 | 0.0020 | 2% |
| 热漂移(30 分钟内) | 0.0015 | 1% |
| 合计 RSS | 0.0133 | 3σ = 0.040 mm ✓ |
看占比而不是看绝对值:这台机器上视觉重复性占了一半方差, 说明继续优化标定算法收益有限,该去改善光照和圆点尺寸。 误差预算最大的价值就是告诉你别优化错地方。
把这套用到真机上
真机没有真值,但误差预算照样成立,只是验证方式变了:
- 用更高精度的量具当参考(千分表、块规、激光干涉仪、高精度标定板);
- 用一致性代替准确性:同一位置重复测 30 次看分散度;
- 用闭环校验:标定完做一个已知尺寸的动作,量实际结果。
虚拟设备的作用,是让你在已经知道答案的条件下先把方法练熟, 到真机上你才有底气判断「量出来的这个数是不是合理」。
最后更新: 2026/9/21
这页有帮助吗?