Describe the bug
DeltaLimitApprover treats _LIMITABLE_ROT = {none, rot6d} as safe to clamp per dimension in every pose mode. For absolute orientations that is the point of the set. But in a displacement pose mode (eef_delta_pose), a rot6d value is a rotation whose no-op is (1, 0, 0, 0, 1, 0), not the zero vector.
Per-dimension clamping toward a symmetric ±max_delta box drags the identity columns toward zero. After the Gram-Schmidt orthonormalization every consumer applies, the result can be an arbitrary large rotation, so the delta limiter can amplify a rotation instead of limiting it. Same failure class as clamping quaternion deltas, which #144 review flagged: any representation whose identity is not at the origin cannot be box-clamped safely.
Expected behavior
The limitable set should be mode-dependent rather than a single frozenset:
- absolute pose modes:
{none, rot6d} (current behavior, correct)
- displacement pose modes:
{none, euler_xyz, axis_angle}, refusing rot6d and quat_* with a message explaining the identity-not-at-origin problem
Notes
Pre-existing behavior, not a regression: eef_delta_pose with rot6d already reached the displacement clamp path before #144. Fixing it is a behavior change for any embodiment currently declaring rot6d deltas, so it needs a CHANGELOG entry and a conformance test alongside the approver unit tests.
Describe the bug
DeltaLimitApprovertreats_LIMITABLE_ROT = {none, rot6d}as safe to clamp per dimension in every pose mode. For absolute orientations that is the point of the set. But in a displacement pose mode (eef_delta_pose), arot6dvalue is a rotation whose no-op is(1, 0, 0, 0, 1, 0), not the zero vector.Per-dimension clamping toward a symmetric
±max_deltabox drags the identity columns toward zero. After the Gram-Schmidt orthonormalization every consumer applies, the result can be an arbitrary large rotation, so the delta limiter can amplify a rotation instead of limiting it. Same failure class as clamping quaternion deltas, which #144 review flagged: any representation whose identity is not at the origin cannot be box-clamped safely.Expected behavior
The limitable set should be mode-dependent rather than a single frozenset:
{none, rot6d}(current behavior, correct){none, euler_xyz, axis_angle}, refusingrot6dandquat_*with a message explaining the identity-not-at-origin problemNotes
Pre-existing behavior, not a regression:
eef_delta_posewithrot6dalready reached the displacement clamp path before #144. Fixing it is a behavior change for any embodiment currently declaring rot6d deltas, so it needs a CHANGELOG entry and a conformance test alongside the approver unit tests.