Skip to content

SRS/jointlock: reachable in-limits poses can return [] on tight-limit redundant 7R (swivel-vs-limits coverage) #359

Description

@siddhss5

Problem

For a redundant 7R arm with narrow joint limits, solve(T, respect_limits=True) (the default) can return [] on a reachable, in-limits pose. Measured on OpenArm (joints 5,6 limited to ±0.785 rad):

Arm empty rate, 200 in-limits poses, respect_limits=True
OpenArm L (seven_r.srs, 16 swivels) ~28%
OpenArm L (seven_r.srs, 48 swivels) ~26%
OpenArm L (jointlock.seven_r) ~62%
iiwa14 (wide limits) 0%

Root cause: the redundancy (elbow swivel) is sampled at 16 points over [-π, π]. When the arm's limits admit only a narrow swivel arc, the sampled solutions all fall outside limits and get filtered, even though an in-limits IK exists (the pose was generated from an in-limits q). Denser swivel sampling barely helps (16→48: 28%→26%), so it's not pure undersampling — the in-limits arc is genuinely narrow for many poses.

Not a regression, not the rescue's job

Possible directions

  • Redundancy resolution toward the in-limits swivel arc: solve for the swivel value(s) that place the limit-binding joints inside limits (an interval intersection over the swivel circle), then sample within that arc instead of uniformly over [-π, π].
  • Or a targeted densification pass when the uniform sweep yields no in-limits solution.
  • Document as a completeness caveat in the interim (matches the existing per-solver caveat pattern).

Discovered while wiring #358.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions