Tutorial · Intermediate · 30 min

Servo Gripper Force, Stall and Why Compliance Wins

A servo commands position; your object cares about force. The exchange rate is stiffness, and with rigid fingers the window is finer than one servo step.

A units problem, not a tuning problem

Here is the whole difficulty with a hobby-servo gripper, in two lines:

  • The object cares about force. Below a floor it falls out, above a ceiling it is destroyed.
  • The servo takes a position. writeMicroseconds(1300) is an angle, and the servo will hold that angle against whatever it takes.

Those are different units, and the thing that converts between them is the series stiffness of everything between the servo horn and the object — the linkage, the finger, the pad, the object itself, all in series. If that chain has stiffness k, then driving the jaws Δc past first contact produces

N = k · Δc

and the force window you have to hit, expressed in the millimetres you can actually command, is

Δc_window = ( F_ceiling − F_floor ) / k

Everything in this page falls out of that one equation, including the reason a stiffer, better-printed finger makes your gripper worse.

What a servo can actually resolve

A hobby servo’s usable resolution is about one degree once you account for deadband, gear backlash and the quantisation of whatever is generating the pulse. That degree turns into jaw travel through the lever arm L:

step = L · (π/180)
Lever arm Jaw travel per step Stall force from an SG90 Continuous force (≈70%)
12 mm 0.209 mm 14.67 N 10.27 N
20 mm 0.349 mm 8.80 N 6.16 N
30 mm 0.524 mm 5.87 N 4.11 N
45 mm 0.785 mm 3.91 N 2.74 N
60 mm 1.047 mm 2.93 N 2.05 N

Two things worth noticing. A short lever arm buys both more force and finer resolution — it is better on both axes the gripper cares about. What it costs is range: jaw travel over a horn sweep of θ is just L·θ, so a 12 mm arm over 120° opens 25 mm and cannot reach round a 65 mm bottle.

Two stacked plots against finger lever arm from 10 to 60 millimetres. The top plot has twin vertical axes: a cyan curve of continuous jaw force falls from 12.5 newtons to 2.1 newtons as the arm lengthens, marked at 10.3 newtons for 12 millimetres, 4.1 newtons for 30 and 2.1 newtons for 60; an amber line of jaw travel per servo step rises from about 0.18 to 1.05 millimetres. The title reads short buys force and resolution. The bottom plot shows jaw opening over a 120 degree horn sweep rising linearly from about 21 to 126 millimetres, with dashed reference lines at 30 millimetres for a block, 44 for an egg and 65 for a bottle.

The lever arm is the only free choice, and it is made by the widest object you need to reach round. Force and resolution are whatever falls out of it — both better as the arm shortens, which is why the trade is range, not strength. Download SVG

The lever arm is chosen by the largest thing you need to pick up, and force and resolution are whatever falls out of that. If you need range and force, that is what a linkage or a rack is for.

And the second thing: a PCA9685 at 12 bits gives about 0.09° of command resolution, which sounds like it fixes this. It does not. The wall is the servo’s deadband and gearbox, not the pulse source. Finer commands buy smoother motion, not finer force — the same shape as microstepping buying tracking rather than accuracy.

The window, measured

Now put the two halves together. Take a strawberry: 15 g, μ 0.6, crush around 3 N, and an SG90 on a 30 mm arm giving 4.11 N continuous. Through a 250 mm lift in 0.9 s the slip floor is 0.29 N and the ceiling is min(3, 4.11) = 3 N, so the force window is 2.71 N. Divide by the stiffness:

Finger k Window vs 0.524 mm step Servo positions that work
Rigid printed PLA finger 25 N/mm 0.108 mm 5× too fine 0
Rigid finger, foam pad 4 N/mm 0.677 mm just wider 1
Extension spring in series 0.8 N/mm 3.386 mm 6× wider 7
Printed flexure finger 0.35 N/mm 7.739 mm 15× wider 15
Two stacked panels. The top is a plot of grip force in newtons against jaw closure past contact in millimetres for a printed flexure finger at 0.35 newtons per millimetre. A straight sloped line shows force rising with closure; a red band below 0.29 newtons is the slip floor, a red dashed line at 3 newtons is the crush limit, and the green band between them is the usable window. A comb of short vertical ticks along the bottom axis marks one servo step each, and fifteen of them fall inside the green band. The bottom panel is a horizontal bar chart on a logarithmic axis of usable window in millimetres for four finger types: rigid printed at 25 newtons per millimetre gives 0.108 millimetres, foam pad at 4 gives 0.677, spring in series at 0.8 gives 3.386, and printed flexure at 0.35 gives 7.739. A vertical line marks one servo step at 0.524 millimetres, and only the rigid printed bar falls short of it.
The same two force walls every time; only the stiffness changes. Below the servo-step line there is no command that lands in the window — which is where a rigid printed finger sits, by a factor of five. Download SVG

The window scales as exactly 1/k. Twenty-five over nought-point-three-five is seventy-one, and 7.739 / 0.108 is seventy-one. There is nothing approximate about it, and you can watch the two numbers move against each other by dragging the stiffness slider in the gripper simulator.

Below one servo step there is no setting that works. Not “hard to tune” — there is no command value that lands in the window, and no firmware change reaches one. This is the single most useful thing to know before printing a finger.

So why does anyone’s rigid gripper work?

Because it never lands in the window at all. It overshoots and sits pinned at the servo’s own force ceiling, and that works only while the ceiling happens to be below the object’s crush force.

Cycle the objects in the simulator with a rigid finger and the “settings that work” column is zero for every one of them — and yet four of the six are held perfectly well:

Object Crush limit What happens with rigid fingers
Wooden block 500 N held — servo pinned at 4.11 N
M6 bolt 2000 N held — servo pinned
Chicken egg 30 N held — servo pinned
PET bottle 8 N held — servo pinned
Paper cup 4 N crushed
Strawberry 3 N crushed

The servo is acting as a clutch you did not design and cannot adjust. It is set at whatever τ·0.7/L happens to be, and everything weaker than that gets destroyed.

This has a genuinely counter-intuitive consequence: fitting a bigger servo makes the gripper worse. Push the stall torque slider from an SG90 towards an MG996R and the accidental clutch moves up past the egg’s crush limit, and now you break eggs too. More torque is the wrong answer to “it drops things” almost as often as it is the right one.

The cost of holding by stalling

A servo pinned against an object is a stalled servo. It is not turning, so it is producing no mechanical power, and everything the winding draws is going into heat.

  • An SG90 draws roughly 650–750 mA stalled at 4.8 V. At 70% of stall torque you are still pushing about 0.49 A through a motor with no airflow and a plastic case.
  • They get hot in tens of seconds and they die in minutes. The usual symptom is a servo that works, then gets weak and jittery, then buzzes and does nothing.
  • A cheap 5 V regulator supplying a couple of these will brown out, which resets your microcontroller mid-pick.

Things that fix it, roughly in order of how much they cost you:

  1. Don’t hold what you don’t need to hold. Open the gripper the moment the part is placed. The most common bug is a state machine that leaves the jaws closed on an empty gripper for the whole return trip.
  2. Back off after grasping. Close firmly, then reduce the command by a step or two. With compliance in series you keep most of the force; without it you lose all of it, which is another argument for compliance.
  3. Power the servo from its own supply, not the board’s regulator, with a few hundred µF nearby.
  4. Add a mechanical latch or an over-centre linkage for long holds. This is what production grippers do, and it draws zero current.
  5. Measure the case temperature with a finger after a minute of holding. Warm is fine. Too hot to keep your finger on it means you have maybe a week of duty left.

Building compliance in

Compliance is the fix for both problems at once — it opens the window and takes the servo off the stall pin. Four ways to get it, cheapest first:

A foam or TPU pad (k ≈ 4 N/mm)

Stick-on EVA foam, or a printed TPU pad 3–4 mm thick. Costs nothing, takes five minutes, and moves you from zero workable settings to about one. It is the minimum viable fix and it is not enough on its own for delicate work.

An extension spring in series (k ≈ 0.8 N/mm)

Put the spring between the servo horn and the finger, with a slot and a pin so the linkage can take up travel. Now the servo commands a spring deflection, which is a force command with real tolerance. This is a series elastic actuator built from a 40p part, and it is the best value change in the whole gripper.

The design rules: pick a spring whose working deflection covers your window (a few millimetres), preload it slightly so there is no dead zone at first contact, and add a hard stop so a runaway command cannot coil-bind it and put the full stall torque through the linkage anyway.

A printed flexure finger (k ≈ 0.35 N/mm)

A finger with a deliberately thin section that bends. Free at print time, no extra parts, and gives you the widest window of the four. Print it in PETG or nylon rather than PLA — PLA creeps under sustained load and your flexure will take a set within a few weeks of holding things.

Thickness dominates: the stiffness of a bending beam goes as thickness cubed, so 2 mm versus 1.5 mm is a factor of 2.4. Print a test strip, hang known weights off it, measure the deflection, and you have your k in ten minutes. That measured number is what belongs in the simulator, not the preset.

Fin-ray fingers

The whole finger is a truss that wraps around the object as it loads. Gives you compliance and partial form closure at the same time, which is why they have taken over hobby grippers for irregular objects. Harder to model — the effective stiffness changes as it wraps — so measure rather than calculate.

What compliance costs

It is not free, and it is worth being honest about the trade:

  • Position accuracy at the object. The part ends up where the compliance put it, not where you commanded. If your task needs the part placed to 0.2 mm, compliance is working against you and you want a stiff gripper with real force sensing instead.
  • Settling time. A soft finger rings after a fast move. Add a short dwell after closing before you lift, or you measure the ring instead of the grasp.
  • Creep. Anything plastic under sustained load slowly deforms. Springs and PETG flexures are much better than PLA here.
  • You cannot feel the object. Compliance makes the servo’s own position a worse proxy for what is going on at the fingertip, so if you want grasp detection you need a switch or a sensor — see the pick-and-place state machine.

The four numbers to have before you print

  1. L, the lever arm — set by the widest object. Everything else follows.
  2. k, the series stiffness — measured, by hanging weights on a printed test finger.
  3. F_crush — measured, with a kitchen scale and a few sacrificial parts.
  4. step = L·(π/180) — arithmetic.

Then check (min(F_crush, τ·0.7/L) − F_floor)/k > step. If it fails, no firmware you write will make the gripper work, and the fix is always to lower k — never to raise the torque.

Next

Explore the graph

Part of these builds

Projects and learning paths that include this tutorial.

Further reading

References