Skip to main content

Module pusher_slider

Module pusher_slider 

Source
Expand description

Quasi-static planar pushing (pusher-slider) with contact modes and MPPI.

A pure-Rust reproduction slice for contact-rich planar manipulation in the spirit of “Push Anything”: a point pusher that may contact any of the slider’s four faces shoves a rigid square slider across a table to a goal pose. The slider obeys the classic quasi-static ellipsoidal limit-surface model (Goyal/Howe/Mason; Lynch; Hogan-Rodriguez): motion is determined by the contact, not by inertia, and the contact can stick or slide depending on whether the required tangential force stays inside the pusher friction cone.

  • PusherSliderParams holds the slider half-extent, the limit-surface characteristic length, and the pusher friction coefficient.
  • PusherCommand is a body-frame pusher motion on a chosen face: the face index, a contact offset along it, a normal push speed, and a tangential slip speed.
  • PusherSliderParams::step advances the slider one quasi-static step and reports the realized ContactMode.
  • PusherSliderMppiController runs MPPI per face and executes the command from the lowest-cost face, so it can switch faces to reach goals (such as a pure rotation) that a single face cannot; simulate_push runs the closed loop and returns a PushReport.
  • simulate_multi_push arranges several sliders into goal slots one at a time, treating the other objects as keep-out discs so the active slider routes around them.
  • PusherSliderParams::two_contact_twist / two_contact_step solve two simultaneous contacts contact-implicitly (per-contact stick/slide mode enumeration with a 4x4 force solve), so a couple can spin the slider in place — motion a single contact cannot produce.

The model is exact for the single-contact stick/slide regimes; the two-contact solver resolves the rigid-redundant (both-stick) case onto a cone edge, and a contact-implicit controller over the contacts is left as an extension.

Structs§

MultiPushReport
Metrics for a multi-object push.
PushReport
Metrics for a closed-loop push.
PusherCommand
Body-frame pusher command on one of the slider’s four faces.
PusherMppiConfig
Configuration for the sampling-based pushing controller.
PusherMppiPlan
Result of one plan call.
PusherSliderMppiController
Deterministic, seeded sampling controller for planar pushing.
PusherSliderParams
Quasi-static pusher-slider parameters.
SliderState
Planar pose [x, y, theta] of the slider in the world frame.

Enums§

ContactMode
The realized contact regime for a step.

Functions§

simulate_multi_push
Push several sliders to their goals one at a time, treating the other objects (at their current poses) as keep-out obstacles for the active one.
simulate_push
Drive the pushing controller toward a goal pose and report the result.
simulate_push_with_obstacles
Like simulate_push but the controller keeps the slider clear of the given obstacle centers (keep-out discs of config.obstacle_radius).