Edits
How one contact state leads to the next: make, break, transfer, the rare compound edge, and the step chain.
When several contacts change at once
A set of elementary changes on different templates is an edge when:
- they all relax or all constrain (Xiao and Ji’s containment between formations, Def. 9);
- the result is valid;
- every smaller nonempty subset of the changes gives an invalid formation.
A single valid change is always an edge. A compound edge is a set of changes that cannot be made one at a time. Moving the disk from −xB to −zB is not one edge: breaking mx first leaves a valid formation. The disk goes round the box corner in two transfers, through its contact with the vertex.
On the step every compound edge is the pivot or its reverse:
{mx, g, s} ⇒ {mx, gv, sv}.
Tipping the box on its corner lifts its side off the riser at the same instant. Both one-at-a-time intermediates, {mx, gv, s} and {mx, g, sv}, are excluded. The pivot appears in 64 contexts (the other contacts of the formation), so there are 128 compound edges, some of them in contexts no pose realizes, because the validity stand-in is only pairwise (Issues). The implementation enumerates compound edges of up to three changes; a search up to four finds no others on the step.
The marking graph
The marking graph has the valid formations as vertices and the edits as edges: 37,203 vertices on the step. Checked exhaustively in the test suite:
- every edge lands on a valid formation and has its reverse;
- the graph is connected;
- with at most k changes per edge, the graph distance between σ and σ′ lies between |σ △ σ′|/(2k) and |σ △ σ′| (the symmetric difference);
- a brute force over sets of two or three single steps finds exactly the implemented compound edges.
The step chain
With the disk free at the start, a plan for the step is the walk
{g} → {mx, g} → {mx, g, s} ⇒ {mx, gv, sv} → {mx, sv} → {mx, t} → {t} → {mz, t} → transport,
that is: make mx, make s, the pivot, break gv, transfer sv → t, break mx, make mz, and transport.
Landing is a transfer. Once +xB lies on the platform, vS is a boundary element of the touching platform edge, so the landed box realizes {t}, and sliding it clear of the corner changes no contact. Support is unaffected: t’s contact set ends at the corner, so the landed box is held exactly when its center of mass is over the platform.
Cand, the candidate generator, offers every step of the chain from a pose in its formation, provided the hold gate passes. Breaking gv needs the box tilted well past 30° with the disk low on its face (the hold gate).
Reproduce
cd ~/repos/research/c-gnn && git switch phase1/planar && git pull && cd cmg
JAX_PLATFORMS=cpu PYTHONPATH=tests .venv314/bin/python -m pytest -q tests/test_planar_step2.py
JAX_PLATFORMS=cpu .venv314/bin/python <website>/research/nonprehensile/planar-build/scripts/03_xiao_ji.py <out dir>03_xiao_ji.py prints the counts on this page (templates, containment pairs, valid formations, compound edges).