Skip to content

v3.3.0

Choose a tag to compare

@github-actions github-actions released this 05 Oct 05:37
· 19 commits to main since this release
cb2bf7c

Root collection now follows CBiRRT, and it is much cheaper. Over 100 seeds
of the pick demo, every run succeeds (it was 97%), and the median solve drops
from 0.68 to 0.07 s (p90 from 1.69 to 0.18 s). Two changes, each measured
against the one before it with tools/planning_benchmark.py:

  • The start and goal sets keep growing during the search (#196).
  • IK windings of one physical configuration share a collision verdict
    (#200). This gives the same paths, faster.

Migrating from 3.2.0:

  • The same seed gives a different path.
  • goal_bias and start_bias are deprecated, and their meaning changed.
    Prefer goal_sample_probability and start_sample_probability; the old
    names map to them, with a warning, until 4.0.
  • C++ consumers: the PlannerConfig fields are renamed the same way.

The start and goal sets keep growing during the search, as in CBiRRT (#196).
On each tree's turn a weighted coin, the paper's P_sample, either draws new
members of that tree's own start or goal set and adds them as roots, or takes
an ordinary turn toward a random configuration. Until now, roots were
collected once, before the search, and frozen. Measured over 100 seeds per
problem, with both versions interleaved on one machine
(tools/planning_benchmark.py):

  • every run that used to time out now succeeds: pick goes from 97% to 100%
    of seeds, and the TSR-chain crank from 93% to 100%;
  • the slow tail shrinks: pick's p90 goes from 1.69 to 0.84 s (worst case
    from a 30 s timeout to 1.75 s); the crank's p90 from 11.0 to 5.4 s (worst
    case from a 120 s timeout to 12.6 s); transport's p90 from 0.45 to 0.32 s;
  • medians hold or improve, for example pick from 0.68 to 0.54 s, measured
    as root collection plus search;
  • the door, whose up-front roots already connect it in one iteration, is
    unchanged.

Changed

  • Behaviour. The same seed now gives a different path, in both backends.
    Every reference-artifact case keeps its outcome and passes validation;
    native parity holds.

  • Parameters. New start_sample_probability and goal_sample_probability
    (default 0.1) replace start_bias and goal_bias. The meaning changed: the
    old biases steered a turn's extension toward a member of the other tree's
    set. The new probabilities add roots to the tree's own set. A finite set
    never tosses the coin, because its members are all roots already. The old
    names still work until 4.0, mapped to the new ones, with a
    DeprecationWarning that says the meaning changed.

  • Faster root collection, same result (#200). SSIK returns every winding
    of every IK branch: 320 solutions per pick pose, but only about 12
    physically distinct arm poses. Root collection now collision-checks each
    physical configuration once per draw instead of every winding. Pick's root
    collection goes from 0.41 s to 0.03 s, so its median solve drops from 0.53
    to 0.07 s (p90 from 0.80 to 0.18 s). Transport's median drops from 0.14 to
    0.05 s. All 700 benchmark runs give identical paths. This needs two
    declarations, never inferred:

    • the IK solver's revolute_joints (SSIK: every joint);
    • the collision checker's full_turn_invariant (the MuJoCo checkers, when
      every planned joint is a hinge).

    stats["reused_verdicts"] counts the shared verdicts. C++: Sample::key,
    IKSolver::revolute_joints(), StateValidator::full_turn_invariant() and
    SolveStats::reused_verdicts are new.

  • New stat. PlanResult.stats["search_roots"] counts the roots added
    during the search, on both backends.

  • New tool. tools/planning_benchmark.py measures planning time and work
    on realistic problems. benchmarks/ holds the v3.2.0 baseline and this
    change's measurement.

  • C++ consumers. PlannerConfig::goal_bias and start_bias are renamed
    to goal_sample_probability and start_sample_probability, with the new
    meaning. Tree::add_root is new. SolveStats::search_roots is new.