test(cam-lower): Stewart IK end-to-end demo for the lowered 6D schedule #121

Merged
patman merged 4 commits from patman/stewart-e2e into patman/angular-emission 2026-08-24 02:25:28 +00:00 AGit
Owner

SE(3) S-f capstone (test-only, no BUCK target churn). Lowered 6D schedule -> all three Stewart IK orders: analytic-vs-FD on leg derivatives (within one constant-jerk segment), leg-accel C0 across knots (bounded by max|l...|*dt, not bare epsilon), angular mutation guard (zeroing the angular half changes leg streams through the REAL pipeline while translational halves stay identical to 1e-12 — proves the angular half is live end-to-end), measured<=certified on both omega (stiff fixture) and orientation (gentle fixture, is_informative pinned per regime). Deterministic. Opus review PASS.

SE(3) S-f capstone (test-only, no BUCK target churn). Lowered 6D schedule -> all three Stewart IK orders: analytic-vs-FD on leg derivatives (within one constant-jerk segment), leg-accel C0 across knots (bounded by max|l...|*dt, not bare epsilon), angular mutation guard (zeroing the angular half changes leg streams through the REAL pipeline while translational halves stay identical to 1e-12 — proves the angular half is live end-to-end), measured<=certified on both omega (stiff fixture) and orientation (gentle fixture, is_informative pinned per regime). Deterministic. Opus review PASS.
test(cam-lower): Stewart IK end-to-end demo for the lowered 6D schedule
Some checks failed
CI / build-test (pull_request) Failing after 4s
cfd96ade6e
Stack step S-f of the SE(3) angular lowering design
(docs/superpowers/se3-lowering-design.md section 5). New
src/stewart_e2e.rs, a #[cfg(test)] module: no new BUCK target, no new
dependency, no Cargo change -- cam-lower's test target already depends on
//common:common, which owns kinematics::stewart.

Chain: blended rounded rect -> PathEval -> chain -> lower_chained_oriented
with TangentAligned -> fold advance_rigid_body -> platform pose at a 0.4 m
home height -> the three Stewart IK orders. Fully deterministic: fixed
geometry, fixed schedule, no clock and no randomness.

The five assertion groups:

1. Analytic vs finite difference at the top order --
   platform_jerk_to_leg_jerks against a central difference of
   platform_accel_to_leg_accels. Both flanking states are produced by
   advancing FORWARD from the segment's own start knot under that
   segment's constant jerk (sample at h and 3h, difference about 2h), so
   the comparison never leaves one constant-jerk piece and never needs a
   negative dt.
2. Leg acceleration is C0 across knots. Stated so it can actually fail: a
   bare "moved less than epsilon" threshold is wrong, because leg
   acceleration legitimately changes across a step by the integral of leg
   jerk over it. What C0 forbids is a change the bounded jerk cannot
   explain, so the change is compared against max|l'''|*dt. Leg JERK is
   deliberately not asserted continuous -- world jerk is piecewise
   constant by design, so l''' steps at every knot; its peak and total
   variation are reported and bounded instead.
3. Mutation guard: the same path lowered with TangentAligned and with
   Fixed(IDENTITY) must produce measurably different leg-length streams,
   while the translations stay bit-identical so the difference is
   attributable to orientation alone. Without this the whole demo would
   pass with the angular half silently zeroed -- every other assertion
   here still holds if zeta is dropped and the pose kept identity.
4. Measured <= certified for both halves on the demo's own fixture, with
   "true" rebuilt from PathEval and cam_plan::sample directly so it reuses
   nothing the lowering computed.
5. Workspace sanity: all six legs stay in a stated extension band, none
   approaches the zero-length guard, and the smallest leg-Jacobian row
   norm is computed and floor-checked (reported rather than tightly
   asserted -- there is no conditioning API in the tree and inventing one
   is out of scope).

The demo feed is deliberately gentle (50 mm/s, 1 mm blend corridor) for
the reason S-e records: the angular certificate is one kappa-derivative
order looser than the translational one, so a stiff feed makes the
orientation bound vacuous and assertion group 4 unfalsifiable.

Co-authored-by: patman-assist <patrick-ai@kgroo.co>
chore: normalize comments
Some checks failed
CI / build-test (pull_request) Failing after 6s
befe4308c8
Co-authored-by: patman-assist <patrick-ai@kgroo.co>
style: rustfmt --edition 2024 drift fix
Some checks failed
CI / build-test (pull_request) Has been cancelled
38543971a7
Reformats files that predate the runner's current rustfmt; no code changes.

Co-authored-by: patman-assist <patrick-ai@kgroo.co>
merge: sync main into stewart-e2e (post track2 merge)
All checks were successful
CI / build-test (pull_request) Successful in 8m48s
807cb5bf86
Co-authored-by: patman-assist <patrick-ai@kgroo.co>
patman merged commit ffdcd1c764 into patman/angular-emission 2026-08-24 02:25:28 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
patman/KGROO!121
No description provided.