Skip to content

v3.4.0

Choose a tag to compare

@github-actions github-actions released this 08 Oct 00:16
· 15 commits to main since this release
9f1b5a1

Defaults set from measurement. Collision checking is finer by default, and
root collection keeps every IK candidate of a draw, which a 240-setting
parameter study found 1.7–1.9× faster on the median, with shorter or equal
paths (#186). On the pick demo, the median solve is now 0.05 s.

Migrating from 3.3.0:

  • Code that relied on the old defaults plans different, denser paths.
    Collision is checked every 0.05 rad instead of every step_size, and up to
    every IK candidate of a draw becomes a root instead of 3.
  • To get the old behaviour, set edge_resolution=None and max_per_draw=3.
  • max_per_draw now accepts None. C++: PlannerConfig::max_per_draw is
    std::optional<int>, and edge_resolution defaults to 0.05.

Changed

  • max_per_draw defaults to None, keeping every candidate of a draw
    (#186).
    A parameter study chose this. It is in benchmarks/ablation/,
    run with tools/planning_benchmark.py sweep / analyze, with a decision
    rule fixed before the data. Stages:

    • screening: 240 settings of num_tree_roots, the sample probabilities,
      max_per_draw and step_size on pick, 20 seeds each;
    • confirmation: the shortlist on 100 fresh seeds;
    • generalization: transport and the door.

    Only max_per_draw beat today's defaults. On fresh seeds, pick's median
    solve is ×0.54 [0.46, 0.65] and its p90 ×0.58 [0.32, 0.92], with paths 12%
    shorter. Under the library's own defaults, pick is ×0.60 and transport
    ×0.53. Since #200, keeping all of a pose's IK solutions is cheap, and they
    give a tree roots on every branch. The other parameters were not better
    than today's values within the CI, so they stay. A sample probability of
    0 is the one setting that breaks the planner (72% success). The door
    keeps its explicit 400 roots: for a fixed grasp, fewer roots made its p90
    2.3–2.5× worse. max_per_draw takes None or an int (C++:
    std::optional<int>). A draw is now visited in random order whenever it
    offers more candidates than can be kept, including when the cap comes
    from num_tree_roots (#168).

  • The door demo reaches the handle first, then opens the door (#198).
    It used to plan the opening first and then reach its start. That start is
    one IK solution, which can lie on a joint winding HOME cannot reach. The
    demo failed at seed 1 that way, and at seed 0 once candidate order
    changed. Reaching any grasp first, then opening from there, succeeded on
    seeds 0–9.

  • edge_resolution defaults to 0.05 rad, independent of step_size (#204).
    It is the spacing of collision checks along an edge, a joint-space distance.
    It used to default to step_size (0.1 rad). On a UR5e with gripper, a point
    can move up to ~1.2 m per radian, so the old default let it move up to
    12 cm between checks and step over thin obstacles. 0.05 rad bounds that to
    ~6 cm. Every shipped demo and reference case already set 0.05, so they are
    unchanged. A problem that relied on the default gets finer checks, is
    slower, and plans different paths. Its returned paths are also denser: the
    planner stores each checked configuration, so there is a waypoint every
    0.05 rad. edge_resolution=None still means step_size. C++:
    PlannerConfig::edge_resolution defaults to 0.05.