Skip to content
AI360XpertBeta

Robot Grasp Wrench Balance and Force Closure

A grasp must resist both pushes and turning effects. Contact locations and friction determine which combinations of force and torque the fingers can supply.

The offset downward load requires more upward force at the right contact.
The offset downward load requires more upward force at the right contact.

Why Does This Exist?

Two fingers squeeze firmly enough to stop an object falling, yet it rotates out of the hand when a load acts off-center. Balancing upward and downward force leaves the turning effect unresolved. Grasp wrench balance checks contact forces and moments together; force closure asks the broader geometric question of whether the contacts could resist every wrench direction with sufficient force.

A wrench combines force with torque about a specified reference point. A force applied farther from that point generally has a larger turning effect. Grasp targets chooses approach poses and introduces a symmetric lifting bound. Here the object and contacts are given; we check which loads they can resist, using contact friction.

Think of It Like This

Holding a tray with a jug near one hand

Your two hands must supply enough upward force to support the tray and jug. The hand nearer the jug must usually carry more: equal lifting effort would leave a turning effect. Hand spacing maps to moment arms, the jug to an external load, and the two lifting efforts to contact forces. The analogy stops at contact type: hands supporting a tray from below differ from side fingers that rely on friction for upward support. We model the latter explicitly below.

How It Actually Works

How does a point force become an object wrench?

For planar motion, choose object reference OO and x/y axes. Contact ii is at ri=(xi,yi)r_i=(x_i,y_i) metres relative to OO and exerts force fi=(fxi,fyi)f_i=(f_{xi},f_{yi}) newtons on the object. Its wrench, ordered here as force then moment, is

wi=[fxifyixifyi−yifxi].w_i=\begin{bmatrix}f_{xi}\\f_{yi}\\x_i f_{yi}-y_i f_{xi}\end{bmatrix}.

Positive moment is counterclockwise. Stacking all force components into vector ff gives Gf=∑iwiGf=\sum_i w_i, where grasp matrix GG contains the corresponding moment-arm coefficients. Static equilibrium requires Gf+wext=0Gf+w_{ext}=0, with external wrench wextw_{ext} expressed about the same point and in the same frame. In three dimensions, each point contributes (fi,ri×fi)(\mathbf f_i,\mathbf r_i\times\mathbf f_i), a six-component wrench. MIT's contact wrench notes explain how moving contact forces to one reference produces the combined wrench set.

Not every algebraic ff is physically allowed. Contact normals must push inward, tangential forces must satisfy friction, and fingers and joints have finite limits. An unconstrained matrix inverse can request negative normal force or too much friction. Equilibrium is a constrained feasibility problem, not just a linear solve.

Balance a load that would rotate the object

Consider two side contacts at (−0.05,0)(-0.05,0) and (0.05,0)(0.05,0) m. Each finger presses inward with 20 N normal force, and coefficient μ=0.5\mu=0.5 allows up to 10 N of vertical tangential force per contact. The equal opposing horizontal normals cancel and, because yi=0y_i=0, produce no moment about OO.

A downward 10 N load acts at (0.02,0)(0.02,0) m, producing external moment 0.02(−10)=−0.20.02(-10)=-0.2 Nm. Call upward contact components fL,fRf_L,f_R. Equilibrium gives

fL+fR=10,−0.05fL+0.05fR=0.2.f_L+f_R=10,\qquad -0.05f_L+0.05f_R=0.2.

The second equation gives fR−fL=4f_R-f_L=4. Combining rows gives fL=3f_L=3 N and fR=7f_R=7 N. Both fit their 10 N friction caps. Equal 5 N forces balance the net force but produce zero contact moment, leaving the external −0.2-0.2 Nm unopposed. The diagram uses scaled vertical force arrows at the actual contact x positions. Its downward load is 2 cm right of the dashed reference; equal normal squeezing forces are omitted because they cancel in this fixture.

Now reduce each normal force to 10 N. Each tangential cap becomes 5 N, so the required 7 N right contact is infeasible even though the sum of friction capacities still equals the 10 N load. More squeezing could restore feasibility only if object pressure and joint limits permit it. Moving contacts or reducing the load offset can improve leverage without increasing squeeze.

When is a grasp force-closure?

Force closure means the positive combinations of allowable contact wrench-cone directions span the entire wrench space. With a polyhedral cone approximation, put the wrench rays in columns of WW. A standard test requires full row rank and a strictly positive vector kk satisfying Wk=0Wk=0. Rank alone does not ensure that unilateral contacts can oppose every direction. Modern Robotics' force-closure derivation states both conditions and separates them from actuator strength.

Our opposed planar contacts with nonzero friction admit a positive internal squeeze and can generate all three planar wrench directions in the ideal unbounded model. Two hard point contacts in space cannot resist arbitrary torque about the line joining them: spatial force closure does not follow. A soft contact model may allow torsional moment, changing that conclusion; model the pad rather than silently adding a moment component.

Force closure is a geometric capability, not a finite payload rating. To rate a particular grasp, include normal-force, joint-torque and pressure limits and check the specified external load set. Comparing wrench magnitudes also requires a scale between newtons and newton metres; a quality score that changes with arbitrary length units needs interpretation. For a known single load, a constrained balance calculation may be more useful than a broad closure score.

Code

This standalone Python solves the offset-load balance and checks friction at each finger. It demonstrates finite load feasibility, not a general force-closure solver.

def support(load: float, offset: float, half_span: float,            normal: float, mu: float) -> tuple[float, float, bool]:    if load < 0 or half_span <= 0 or normal < 0 or mu < 0:        raise ValueError("Invalid load or contact parameters")    difference = offset * load / half_span    left = (load - difference) / 2.0    right = (load + difference) / 2.0    feasible = max(abs(left), abs(right)) <= mu * normal    assert abs(left + right - load) < 1e-12    assert abs(half_span*(right-left) - offset*load) < 1e-12    return left, right, feasible

for normal in (20.0, 10.0):    left, right, feasible = support(10.0, 0.02, 0.05, normal, 0.5)    print(f"normal {normal:.0f} N: left {left:.1f}, right {right:.1f}, feasible {feasible}")print(f"equal-support residual: {-0.05*5 + 0.05*5 - 0.02*10:.3f} Nm")

The first case prints left 3.0, right 7.0, feasible True; the second prints the same forces with feasible False. Equal support leaves -0.200 Nm residual.

Watch Out For

Enough total friction still allows rotation

An object turns despite the summed vertical friction cap exceeding its weight. Calculate individual contact forces from force and moment balance, then check each cone. The 10 N total-cap example fails because the right contact needs 7 N while its own allowance is only 5 N.

A planar closure result becomes a spatial payload claim

The object twists around the line connecting two fingertip contacts. A planar three-component wrench model omitted that torque direction. Use a spatial model with the correct contact type, then apply actuator and pressure limits. Closure does not certify tracking, contact retention or an unlimited load rating.

The Quick Version

  • A grasp maps contact forces to object force and moment through contact locations.
  • The offset 10 N example needs 3 N and 7 N upward forces, not equal support.
  • Force closure requires positive wrench-cone spanning, beyond full matrix rank.
  • Finite load feasibility additionally depends on friction, squeezing and joint limits.
  • Planar closure does not establish resistance to every spatial torque.