Repository navigation
v3.3.0
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_biasandstart_biasare deprecated, and their meaning changed.
Prefergoal_sample_probabilityandstart_sample_probability; the old
names map to them, with a warning, until 4.0.- C++ consumers: the
PlannerConfigfields 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_probabilityandgoal_sample_probability
(default 0.1) replacestart_biasandgoal_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
DeprecationWarningthat 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_verdictsare new. - the IK solver's
-
New stat.
PlanResult.stats["search_roots"]counts the roots added
during the search, on both backends. -
New tool.
tools/planning_benchmark.pymeasures planning time and work
on realistic problems.benchmarks/holds the v3.2.0 baseline and this
change's measurement. -
C++ consumers.
PlannerConfig::goal_biasandstart_biasare renamed
togoal_sample_probabilityandstart_sample_probability, with the new
meaning.Tree::add_rootis new.SolveStats::search_rootsis new.