修正朝上判断、接触高度与过期姿态目标

朝上判断误用平台轴、接触高度报旋转前数值、多点对准复用缓存姿态,且多点会话被复核入口拒绝;
现按修正计划改正并接通 autocal-multipoint-1.0 只读复核,缺失帧源如实报告而不补零。

离线验证:新回归在 dc5a6f8 上失败、此处通过,panel_check 通过,两截图点接触高度复现
19.0510 / 21.5781 mm;实机项未做,详见 .scratch/autocal-motion-fix/verification.md。
This commit is contained in:
ykcheungab
2026-10-15 06:52:28 +08:00
parent 5339624ffa
commit bcc55a3b97
29 changed files with 2179 additions and 209 deletions
+12 -6
View File
@@ -53,7 +53,7 @@ With the corrected envelope, solved by closed form
| Envelope | Worst residual | Within 0.5 deg | In range |
|---|---|---|---|
| pitch 360 deg, **yaw +-180 deg** (the machine) | **1.2e-06 deg** | 100% | **1032 / 1032** |
| pitch 90 deg, **yaw +-180 deg** (the machine) | **1.2e-06 deg** | 100% | **1032 / 1032** |
Every vertex is reachable, and the residual is at the floating-point floor rather
than at any clamp. The "0.21 deg worst, genuinely clamped vertex" claim above was
@@ -65,11 +65,17 @@ the reachability evidence. Whether they help *repeatability* — a shorter pitch
move, a better-conditioned contact — is a separate bench question, not a
kinematic one.
One thing the corrected solve did surface: **51 of 1032 vertices end inverted**,
whichever closed-form branch is chosen, because the tool direction is
antiparallel to the sensor's own up axis. That is the tool-polarity question, it
needs the bench, and it is *not* visible in the residual. See
`inverse-kinematics.md` → *Still open*.
**Correction (motion-correction-plan.zh.md task 1).** This note used to claim that
**51 of 1032 vertices end inverted** whichever branch is chosen, because the tool
direction was antiparallel to the sensor's own up axis. That count came from
`uprightness` comparing a platform axis through `to_sensor(np.eye(3)[1])`, which is
the sensor's own **-Z** — a horizontal axis — so a body rolled about the vertical
was reported as turned over. Measured against the post-mount nominal up (the tool
axis) no exported vertex is inverted, and the corrected flag changes no vertex's
branch selection. What did invert poses was the `approach_sign` polarity bug
recorded above; the residual could not see it, and neither could that up test. See
`inverse-kinematics.md` → *the face is aimed at +Z* and *the two exact poses of one
normal*.
## What was wrong before, and why it is worth recording