Skip to content

[bug] DeltaLimitApprover can amplify rot6d rotation deltas in displacement pose modes #150

Description

@jeqcho

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions