Planning Through Contact

Nonprehensile manipulation when the planner must invent the contacts

Aykut C. Satici

Robot Control Lab · Systems Engineering · UT Dallas

The task

A disk pushes a box along the floor, into a step, topples it ninety degrees onto the upper platform, relocates to the new back face, and pushes it to the goal.

The planner is given a start pose and a goal set. It is not given the contacts.

Two problems at once

Continuous

A trajectory and a control signal satisfying non-penetration, unilateral contact, friction, and dynamics.

Discrete

Which contacts are held, and in what order they are made and broken.

Five snapshots of the task, each labelled with the set of contacts asserted at that moment.

Get the sequence wrong and no amount of trajectory optimization recovers it.

What the discrete object should be

Left: only the contacts that are currently touching are in the state. Right: the full catalog, including the riser and platform contacts that do not exist yet.

Carrying unmade environment contacts in the state, and gating their release by statics, is the structural difference — everything else follows from it.

The method at a glance

Top: the scene fixes a catalog of 35 candidate contacts. Below, a loop: state is a pose plus a bit vector; one action flips one bit; two cheap tests; the short-horizon optimizer accepts or rejects; accept returns a new state, reject tries the next action.

Everything that follows expands one box of this picture.

The construction

Five objects. Nothing else is needed to state the method.

Features

Object 1

The box contributes four edges and four vertices; the disk one boundary curve; the floor, riser, and platform one patch each.

Fixed by geometry, once, before planning. Finite by construction.

Templates and gaps

Object 2

Two named features approach, touch, penetrate, and separate, while a signed gap value tracks the distance between them.

\(\varphi_c(\chi)\) is a function of configuration alone, so it is defined whether or not the pair touches. That is what lets an unmade contact sit in the state.

The catalog

Object 3

Thirty-five contact templates grouped by body pair: eight each for box-manipulator, box-floor, box-riser, box-platform, and three forbidden manipulator-environment pairs.

Most of these will never be touched. That is fine — the state is a bit vector over all of them, not a list of the ones in use.

The state

Object 4

Left, the continuous pose of the box and disk. Right, a grid of catalog entries with three lit, forming the bit vector of asserted contacts.

Not an enumerated set of formations — there are \(2^{35}\) of those — but the bit vector itself, carried alongside the pose.

The actions

Object 5

Three action cards — make, break, transport — and a note that a plan is a walk on the graph of markings.

What the marking graph actually is

Valid markings arranged in columns by how many contacts they hold, joined by single-bit edges, with the plan drawn as a path through them and the last column empty.

Validity is hereditary, so the graph is connected and the distance between two markings is exactly their Hamming distance. There is nothing here to search.

The plan is a walk on that graph

The nine markings of the running example drawn as bit-vector chips, joined by arrows labelled with the action that flips each bit, ending in the goal set.

Nine actions, nine calls to the local solver. That count is the quantity this project is trying to reduce.

Realizing one action

An action is compiled into a running cost, handed to a sampling model-predictive controller over the simulator, and either accepted with a trajectory segment or rejected.

\(\Lambda\) is an oracle we call and count. Everything else exists to call it fewer times.

Two cheap tests come first

Left, the gap gate withholds actions whose new contact is too far away. Right, the support test refuses to release the last supporting contact.

Both are products of local factors, so both cost microseconds and run before any optimization.

Two things the construction buys

Both decide whether an action is legal from this pose, not from its name.

When the manipulator may let go

Mid-topple, the riser's friction cone holds no vertical force and the box tumbles clear; after landing, the platform's cone balances gravity and the release is admitted.

Geometry fixes the order

After landing, the contact normal on the old pushing face is vertical and can only press down, while the normal on the new back face is horizontal and can push toward the goal.

Only the new back face has a horizontal normal, so make must precede break — a fact about this pose, which no fixed ordering of actions could encode.

That is already a planner

At one node, at most 36 candidate actions are narrowed by the two gates to an unmeasured admissible set, then tried in some order; the same set in two different orders costs four solver calls or one.

Everything so far runs with nothing learned in it, and what it returns is certified by the records that produced it.

Learning, as an accelerator

It reorders the candidate list. It changes nothing else, and it has to earn its place.

The graph

Six contacts as vertices, joined by transfer-adjacent, shared-object-face, and exclusion edges.

Not the search space — that was the marking graph. This is the message-passing substrate of a learned heuristic over it, and conflating the two is the fastest way to make the method incomprehensible.

A neighbourhood, not the whole catalog

The seed grows from the held contacts, to the gap-gated contacts, to everything one hop away, bringing the platform contact into view.

The platform contact enters the network’s view through a shared-face edge while the box is still on the floor — long before it is close enough to attempt.

Ranking the available actions

Attention over the live subgraph produces a score for each available action, drawn as a ranked bar chart.

It cannot make \(\Lambda\) succeed more often, and it cannot make an illegal action legal. It can only move the action that works to the front of the list.

Why a learned order is worth anything

At the start a closest-gap rule prefers the floor vertex over the distant riser; after landing it prefers doing nothing over relocating the disk.

Both hops pay now for a benefit several actions later. A learning claim needs a baseline it can lose to, and this is it.

What we measure

The whole system

Offline: scene, catalog and graph, teacher, learned ranker. At a query: state, available actions, ranking, local solver, loop.

One number

Bar chart of solver calls for each baseline, with the no-discrete-search baseline not yet measured.

The experiment that decides the project

Before anything is trained, run the teacher and the closest-gap baseline on a family of step scenes, with no network at all.

If the gap is large

There is a learning problem. Train the ranker and try to close it.

If the gap is small

Closest-gap-first plus the support test already solves the family, and no architecture will produce a result worth reporting.

Calibrate \(\Lambda\) first: measure how often a much larger retry budget reverses a rejection. Until that false-negative rate is known, every teacher label and every baseline number is unquantified.

Then two comparisons against something other than a variant of this planner: a method that does no discrete search at all, and a different discrete object — the contact-intention interface, which solves a task of this shape with a surface location plus an object subgoal.

What is actually new

1 · Unmade contacts are decisions — planner

A bit vector over all candidate contacts, so acquiring one is an ordinary action rather than a consequence of motion.

2 · Release is gated by statics — planner

Refused when the surviving contacts cannot hold the object — before any optimization, not by simulating a fall.

3 · Shared-face edges — learning layer

Two supports of the same object face, against different environment bodies, exchange information. This is what puts a contact in view before it is reachable.

4 · Cost measured in oracle calls — methodology

Against a greedy constructor on the same state space, and against a planner that does no discrete search at all.

Not claimed as new: multi-relational graphs, attention on them, feature-pair catalogs, make/break generators, sampling MPC, or the teacher–student split.

Open questions

Does the learning problem exist?

Unmeasured. The gating experiment answers it.

How reliable is the oracle?

A local, budget-limited solver rejects realizable actions at an unknown rate, and everything downstream inherits that noise.

Does the catalog survive 3D?

Only with aggressive pruning, which is then load-bearing rather than an optimization.

Ranker, or lookahead?

Generating a whole future sequence of markings is the richer option — and the one that has to prove it beats the cheap head.

The construction is worth building. That learning helps is, so far, a hypothesis with a designed experiment attached and no data.

Planning through contact

When the contacts are the plan, the planner has to invent them — including the ones that do not exist yet.

Two separable claims The planner: unmade contacts are decisions, and statics gates release. The accelerator: a learned order costs fewer solver calls. The first does not depend on the second.

Next Teacher against the geometric baseline, with \(\Lambda\)’s false-negative rate calibrated first — before anything is trained.

Aykut C. Satici · Robot Control Lab · UT Dallas · aykut.satici@utdallas.edu

Figures are generated from the scene geometry by assets/make_figures.py, in the report’s convention: \(+x_W\) left, \(+z_W\) up, positive \(\theta\) the counterclockwise topple.