Repository navigation
v3.4.0
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 everystep_size, and up to
every IK candidate of a draw becomes a root instead of 3. - To get the old behaviour, set
edge_resolution=Noneandmax_per_draw=3. max_per_drawnow acceptsNone. C++:PlannerConfig::max_per_drawis
std::optional<int>, andedge_resolutiondefaults to 0.05.
Changed
-
max_per_drawdefaults toNone, keeping every candidate of a draw
(#186). A parameter study chose this. It is inbenchmarks/ablation/,
run withtools/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_drawandstep_sizeon pick, 20 seeds each; - confirmation: the shortlist on 100 fresh seeds;
- generalization: transport and the door.
Only
max_per_drawbeat 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_drawtakesNoneor 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
fromnum_tree_roots(#168). - screening: 240 settings of
-
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_resolutiondefaults to 0.05 rad, independent ofstep_size(#204).
It is the spacing of collision checks along an edge, a joint-space distance.
It used to default tostep_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=Nonestill meansstep_size. C++:
PlannerConfig::edge_resolutiondefaults to 0.05.