Repository navigation
v3.8.0
Motion validation is public, and it is the planner's own check (#230).
sscbirrt.Validator answers for a state, a motion, a path or a timed
trajectory under an explicit policy. The planner returns a path or
trajectory only after that same validator accepts it. Seeded paths differ
from 3.7 because edge subdivision now tolerates rounding.
Added
-
Public motion validation (#230).
sscbirrt.Validatorvalidates a state, one motion or a whole path, and
returns aValidationReport: valid under the reportedValidationPolicy, or the first invalid state with its
segment, fraction, failure kind, contacts (native MuJoCo scene) and violated path-constraint member. It is the
planner's own check:Validator.for_problem(problem, config), in Python and natively (sscbirrt::Validator), with
the native core used when every component lowers.- Motions are raw-linear: the straight line in raw joint values, as runtimes execute it. A continuous joint is never
wrapped, so a half turn or more is validated as the long raw line. PlanResult.validationis the returned path's report. A planner returns a path only after validating it whole;
a path that fails is not returned (failure_reason"Returned path failed final validation", native status
invalid_result). Only checkers that are not invariant to full turns of a continuous joint can fail it.sscbirrt._native.__version__, and aStateValidator::contactshook that witnesses use.
- Motions are raw-linear: the straight line in raw joint values, as runtimes execute it. A continuous joint is never
-
Timed trajectories are validated whole (#230).
Validator.validate_trajectorychecks a trajectory's whole law:- pieces along its source path (
Trajectory.path) at the path's own states within their span; - other pieces at speed-bounded time steps;
- position limits exactly, at every ramp's turning point.
Its witness gives the piece and
time_s. A trajectory that breaks its own invariants raisesMalformedTrajectory.
The smoother accepts a shortcut only if every piece the splice leaves passes this rule, andTrajectory.validation
is the returned trajectory's report. A trajectory that failed would not be returned ("Returned trajectory failed
final validation"). - pieces along its source path (
-
sscbirrt.mujoco.validator(model, data, arm, ...): the validatorplanwith the same arguments applies. -
Evidence for #230.
tools/validation_artifact.pywritestests/reference/validation_evidence.json, and a test holds a fresh run's
verdicts to it. On a small native MuJoCo world it records, for both backends:- an accepted and a rejected path, with the rejection's witness;
- a trajectory along its path (an exact reparameterization), and a trace-changing shortcut through the wall;
- the reports from planning next to the public calls;
- repeated and reordered queries.
tools/geodude_132_evidence.pyreruns the reduced Geodude edge of personalrobotics/ssrobot#132 inside ssrobot and
records the result intests/reference/geodude_132_evidence.json. Its timed trajectory crosses the left gripper
for 4 ms inside a shortcut.- The 3.7 rule and this validator both accept it under the 0.05 policy, and planning and the public call agree.
- The miss is the policy's, which #222 owns.
-
Two modes of motion check (#230).
- Prefix:
MotionValidator.validateanswers how far from the start a motion is valid. Tree growth keeps that
prefix, so it checks in order. - Whole: the new optional
validate_whole(native: a virtual with a default throughvalidate) answers whether
the whole motion is valid. It returns the same configurations on a yes, and checks the same states in van der
Corput order, so it stops sooner on a no. Path shortcuts and trajectory shortcut acceptance use it. - Reports:
Validatoranswers whole first. On a failure it refines to the earliest invalid state. - Verdicts and planner outputs are unchanged; only the order of the checks differs.
- Prefix:
Changed
- Edge subdivision tolerates rounding (#230). An edge of length
dis checked atmax(1, ceil(d / resolution - 1e-9))intervals, in the planner and the validator alike. Without the tolerance, a path piece exactly one resolution
long, recomputed from its stored nodes, could split in two, so the final check sampled a state the planner never
checked (one door path in 20 failed at such a midpoint). It also drops the redundant third sample that a step of
exactlystep_sizetook. Search state checks fall 4–14% on the benchmark problems (door about 1%), with every
problem still succeeding 100%. Seeded paths differ from 3.7; the reference artifact's cases and statuses do not.