Friction is a limit, not a fixed force
Static friction chooses whatever tangential force is needed to prevent slip, up to a limit:
A resting block with no horizontal load has zero friction—not . Add a 3 N push and friction supplies 3 N in the opposite direction. Once the required force exceeds the limit, sliding begins and a common model uses:
The discontinuity at zero slip is why simulators usually solve friction together with contact impulses instead of evaluating a simple smooth force law.
Experiment 1: cross the static threshold two ways
On an incline, gravity decomposes into downhill and normal to the surface. Static balance is possible while:
For , the ideal critical angle is 30.96°. A horizontal push predicts the same threshold: N for a one-kilogram block.
Tilt and push the same contact
Does measured motion begin near both analytical limits?

theta_critical = math.atan(mu_static)
static_limit = mu_static * mass * gravity
below = push_trial(5.5) # sticks
above = push_trial(6.0) # slidesAfter sliding starts, LavenderSim's measured tangential-force utilization drops toward . This is not weaker numerical convergence; it is the chosen dynamic coefficient.
Failure modes: always apply , use for the onset threshold, ignore material mixing, or classify tiny contact transients as sustained slip.
- Expected result
- The command exits successfully and reproduces the numerical or visual relationship described in this card.
- Failure modes
- Non-finite values, a reversed trend, a failed assertion, or a materially different plot means the assumptions, seed, timestep, build, or backend should be inspected before continuing.
Experiment 2: project a two-dimensional friction impulse
In 3D, a contact has two tangent directions. An isotropic Coulomb model limits their combined impulse:
The feasible cross-section is a disk. Projection preserves direction and limits magnitude. A cheaper approximation may constrain tangent components separately, producing a square cross-section and up to too much diagonal grip.
Compare circular and square projection
Should grip strength depend on how tangent axes happen to be oriented?

trial = old_tangent_impulse + delta
if np.linalg.norm(trial) > static_limit:
trial *= dynamic_limit / np.linalg.norm(trial)LavenderSim uses this disk projection. Polyhedral pyramids can be useful in optimization, but their number and orientation of facets are modeling decisions—not the Coulomb law itself.
- Expected result
- The command exits successfully and reproduces the numerical or visual relationship described in this card.
- Failure modes
- Non-finite values, a reversed trend, a failed assertion, or a materially different plot means the assumptions, seed, timestep, build, or backend should be inspected before continuing.
Experiment 3: give the contact patch an area
A mathematical point cannot resist rotation about its normal, and ideal pure rolling has no tangential slip. Real patches deform. Compact rigid-body engines often add bounded angular impulses:
is a modeled contact-patch radius. These are useful phenomenological terms; they are not detailed tire or soft-material models.
Roll a sphere and twist a grasped payload
Which motion survives when angular friction is zero?

Failure modes: confuse rolling resistance with sliding friction, omit patch radius from units, apply an unbounded resisting torque, or claim a patch approximation predicts real tire behavior.
- Expected result
- The command exits successfully and reproduces the numerical or visual relationship described in this card.
- Failure modes
- Non-finite values, a reversed trend, a failed assertion, or a materially different plot means the assumptions, seed, timestep, build, or backend should be inspected before continuing.
Experiment 4: make slip observable
A controller needs more than a friction coefficient. LavenderSim's tactile summary reports normal force, shear force, post-solve tangential slip speed, static-limit utilization, a filtered slip score, a hysteretic slip flag, centroid, twist/rolling moments, and taxel forces.
The score is low-pass filtered. The flag turns on above 1.0 and turns off below 0.58, preventing rapid chatter near a single threshold.
Disturb a preloaded tactile grasp
Can the sensor separate high utilization from actual persistent slip?

tactile = observation["tactile"]["pad_sensor"]["summary"]
slip_speed = tactile[3]
friction_utilization = tactile[4]
slip_score, slipping = tactile[5], bool(tactile[6])Failure modes: infer slip from utilization alone, threshold raw velocity without force gating, forget filtering delay, or treat taxel pressure as an exact continuum stress field.
- Expected result
- The command exits successfully and reproduces the numerical or visual relationship described in this card.
- Failure modes
- Non-finite values, a reversed trend, a failed assertion, or a materially different plot means the assumptions, seed, timestep, build, or backend should be inspected before continuing.
Experiment 5: arrival is not settling
The ball-pushing task from the environment suite deliberately uses a low-friction board. That makes pushing easier but target control harder: the ball can cross the target with substantial remaining speed. A reward for position alone encourages fly-through behavior.
Apply one identical push pulse
How does board friction change both destination and stopping time?

A useful task reward therefore combines target distance, low speed near the target, and dwell time. Friction is part of task design, not only engine configuration.
- Expected result
- The command exits successfully and reproduces the numerical or visual relationship described in this card.
- Failure modes
- Non-finite values, a reversed trend, a failed assertion, or a materially different plot means the assumptions, seed, timestep, build, or backend should be inspected before continuing.
Paw-check: find the limit before tuning it
- Repeat the incline derivation when the applied force is not parallel to the plane.
- Rotate a four-sided friction pyramid and quantify direction-dependent error.
- Set different block and ramp coefficients and verify geometric-mean mixing.
- Plot dissipated kinetic energy for each rolling-resistance curve.
- Halve contact-patch radius and predict torsional stopping time.
- Change slip-filter gain and hysteresis thresholds without creating chatter.
- Design a ball-target reward that values arrival, stopping, and stationary dwell separately.
What should I be able to say now?
Static friction is a bounded reaction that matches demand; dynamic friction opposes established slip. In 3D, a circular tangent-impulse limit is isotropic while pyramidal approximations introduce directional error. Rolling and torsional terms model finite contact-patch moments. Tactile telemetry turns friction state into a controllable signal, and low-friction task design must explicitly reward settling rather than mere target crossing.