接入 Studio 多点标定的会话置零与状态记录

支持显式无载荷置零、处理线程内切换模型及完整标定包快照。shared、界面检查与兼容测试通过;Studio 全量仍有一项回放停止时序测试失败。
This commit is contained in:
ykcheungab
2026-10-19 09:47:51 +08:00
parent bc5dfc035d
commit 31750f0f84
19 changed files with 514 additions and 32 deletions
+26
View File
@@ -64,6 +64,32 @@ Dropping a key means migrating those readers first, not tidying up the JSON.
## Verification
### Multi-point force calibration
Finger sessions accept SDK schema 3 files through the existing calibration-file picker and
operator-confirmed SN. The SDK checks processing settings, geometry and coordinate-map identity;
a mismatch blocks loading rather than falling back to raw values. Keep the JSON and its declared
NPZ artifacts together. The file format and supported models are defined in the
[SDK calibration contract](../../../../orisys-sdk/docs/calibration-model-contract.zh.md).
After starting, remove all load and select **Unloaded zero**. Confirm that the next 30 processed
frames are unloaded. Contact, invalid readings or tracker reset cancel an unfinished measurement.
Zero values belong to this session; tracker reset and model replacement require a new zero.
Model replacement is applied between frames on the SDK HHD thread. The rail reports per-axis
zero, contact, coverage and range states; an unavailable newton value stays unavailable while raw
measurements remain accessible. Selecting a tracker reference alone never implies zero load.
For bare-video recomputation, explicitly confirm the unloaded 30-frame interval starting at the
selected reference frame. This choice changes the analysis cache identity; a short or invalid
interval fails the pass. Leave the option unchecked for legacy calibration or when no unloaded
interval has been verified.
Recording format 1.5 appends `calibration_status` and `calibration_reference` JSON columns to
`forces.csv`; existing columns keep their positions. Raw validity and per-axis model validity
are distinct. Recordings store each schema 3 JSON with its artifacts in a directory identified by
the SDK model fingerprint, so recorded calibration remains loadable without the original folder.
Older recordings remain readable and carry no invented zero or model-state information.
`apps/studio/tests/test_sensor_catalog_root.py` asserts the descriptor's fields, that every
declared path is relative and present, that the declared map is the one the running chain derives
for itself (the SDK's `scaled_map_cache_path`, so `_s0.42.npz` and never a neighbouring