Why does everything move except the gripper?

A gripper that will not move has three plausible causes and they are cheap to separate, provided you separate them in the right order. This page gives you that order, explains why this joint fails more often than the other five, and covers the point where the problem stops being the arm and starts being the policy.

Hardware · Last updated 2026-08-09

Symptom

Every joint responds and the arm moves normally, but the gripper does not open or close. It may also be loose enough to push by hand while the other five joints hold their positions.

  • SO-100
  • SO-101
  • LeKiwi
Short answer

The gripper is the last servo on the chain and the one whose cable flexes most, so a connector that is nearly but not quite seated is the first thing to rule out. Work in a fixed order: does a scan see it at all, does it have torque, and is its calibration sane. Each of those three answers eliminates a whole class of causes, and only the last one requires a recalibration.

Three questions, in this order

The reason to fix the order is that each question is cheaper than the one after it and rules out more. A scan costs seconds and tells you whether the joint is on the bus at all. A torque check costs one push with your hand. Only if both pass does calibration become worth examining, and only then is recalibrating a reasonable use of your time.

CheckResultWhat it meansNext
ay-robots devicesFive servos respondingThe gripper is off the bus entirelyReseat and then swap the last cable
ay-robots devicesSix servos respondingWiring is fine, so this is torque or calibrationGo to the torque check
Push the jaws by hand, power onThey move freely while other joints resistTorque is off on this joint aloneHome the arm, then drive it from the client
Push the jaws by hand, power onThey hold firmlyTorque is on, so the commands are the problemExamine the calibrated range
Command open, then closedMotion is backwardsOpen and closed positions are invertedRecalibrate
Command open, then closedNothing moves, the servo humsCommanded position is outside the range, or the jaws are jammedClear the jaws, then recalibrate
Command open, then closedIt moves a little and gives upStall current, usually a marginal supplyCheck the supply before anything else
bash
ay-robots devices

# SERIAL PORTS
#   /dev/ttyACM0   SO-100  (5 servos responding)
#     id 1  ok
#     id 2  ok
#     id 3  ok
#     id 4  ok
#     id 5  ok
#     id 6  no reply
Five of six with the gripper missing points at the last link in the chain, not at the servo.

Why it is the gripper and not joint 3

Three things stack up against this particular joint. It sits at the end of a daisy chain, so it is downstream of every other connector on the arm and inherits every one of their failure modes. Its cable runs the full length of the arm and flexes on every wrist rotation, which is mechanical fatigue applied to the one component nobody inspects. And it is physically closest to whatever the arm bumps into, because bumping into things is what the business end does.

The pattern of the failure supports the same conclusion. A break anywhere earlier in the chain would take the wrist with it, so a gripper missing on its own can only be the last link. That narrows the physical search to two connectors and one cable, and reseating them is a thirty second job with the power off.

The ordered diagnosis

  1. 1
    Scan and count

    Six responding or five. This single number decides whether the next half hour is about wiring or about software.

    bash
    ay-robots devices
  2. 2
    Power off, reseat the last cable at both ends

    Unplug both connectors, look at the pins for anything bent or pushed back, push them home firmly, power up and rescan. This resolves the majority of cases and costs nothing.

  3. 3
    Swap the last cable for a proven one

    Take a cable from a link that currently works and use it for the gripper. If the count goes to six, the old cable was the fault. If the fault follows the cable to its new position, the same conclusion arrives from the other direction.

  4. 4
    Put the gripper servo alone on the controller

    If it answers by itself on a known-good cable, the servo is healthy and everything remaining is wiring or addressing. If it stays silent alone, check its ID and its baud rate before you write it off, especially if it is a replacement unit.

  5. 5
    Check torque with your hand

    With the arm powered and holding a pose, push the jaws gently. The other joints resist you; if the gripper does not, torque is disabled on that joint alone. Homing the arm re-establishes a commanded pose for every joint, which is the quickest way to bring a single relaxed joint back under control.

    bash
    ay-robots home
  6. 6
    Clear the jaws and look for a mechanical jam

    Something wedged in the mechanism, a screw that has worked loose, or a jaw that has shifted on its mount all produce a servo that hums and does not move. Fix this before recalibrating, because calibrating around a jam bakes the jam into the reference.

  7. 7
    Recalibrate and verify open and closed

    Only now. Guide the joints to neutral, capture the reference, then command fully open and fully closed and watch that both are reached and that they are not swapped.

    bash
    ay-robots calibrate
  8. 8
    Replace the servo last

    A servo that is silent alone, on a proven cable, with a unique ID at the right baud rate, has earned it. Recalibrate afterward, because a new unit has a different zero point.

The gripper is where a marginal supply shows up first

Closing on something rigid is the highest current moment in an ordinary task, so a supply that is only just adequate cuts torque at the gripper before anywhere else. If the gripper starts to close and then gives up while the rest of the arm behaves, look at power. And while you are handling supplies: STS3215 servos are 7.4 V parts, and a 12 V brick destroys all six in seconds with no recovery.

A dead gripper leaves a flat column in your dataset

If you record while the gripper is not responding, its action column never changes, and nothing in the pipeline objects. The dataset trains, and the resulting policy approaches objects competently and never closes on them. Confirm six responding servos before a recording session rather than after it.

Calibration that is technically valid and practically wrong

A gripper can be on the bus, torqued, and still useless if its stored range does not match the mechanism. Two variants come up. In the first, open and closed are inverted, so every command does the opposite of what you meant and a grasp releases at exactly the wrong moment. In the second, the stored range is wider than the mechanism, so the commanded closed position is past where the jaws physically meet, and the servo pushes against its own hardware until it stalls.

Both are fixed by recalibrating with the jaws clear and the mechanism free, and both are worth checking with a deliberate open and close before you record anything. Note that calibration captures the whole arm at once, so a gripper recalibration also assigns new zero points to the other five joints, which makes it a boundary in your dataset history rather than a local repair. The full procedure is on /learn/so-100-getting-started.

When it is the policy and not the arm

There is a version of this complaint where the hardware is entirely fine. If you can open and close the gripper from the client, the arm is not the problem and the search moves to the data or the run. The usual cause is a dataset in which the gripper column barely varies, either because it was broken during recording or because the demonstrations closed it at almost the same moment every time from almost the same pose. A policy trained on that has nothing to learn about when to close.

Before blaming the model, run a base model on the arm as a smoke test. It confirms that the whole path from policy to servo works on your machine, without involving your checkpoint at all.

bash
# Smoke test: base model, no checkpoint, local execution
ay-robots run --model act --task "pick up the red cube and place it in the bowl"

# Then your own checkpoint from the run page
ay-robots run \
  --model act \
  --checkpoint <job-id>:100000 \
  --task "pick up the red cube and place it in the bowl"

ay-robots stop
If the base model moves the gripper and yours does not, the problem is in the data or the training run.

From there the question is a training question rather than a hardware one: whether the gripper signal in your episodes carries enough variation to learn from, and whether the run was long enough to pick it up. That is covered on /train/act-on-so-100 for the fast, task-specific model and on /train/smolvla-on-so-100 if you are working with the language-conditioned one. If you want to see what a healthy gripper looks like under teleoperation before you decide, /live gives you a working SO-100 in the browser with no signup and no hardware of your own involved.

Frequently asked questions

The gripper buzzes but does not move. What is that?

A stall. Either the jaws are physically obstructed, or the commanded position is past where they can go, or the supply cannot deliver the current the servo is asking for. Clear the jaws first, then check the calibrated range, then look at power.

Can I keep working with a broken gripper servo?

For driving the arm around, yes. For recording, no: the missing joint produces a column that never changes, and any policy trained on that dataset will never close. Fix it before the session, not after.

Can I test with a servo from another joint?

Electrically yes, and it is a decisive test of whether the servo or the wiring is at fault. Check the part number printed on both servos before swapping, put everything back afterward, and recalibrate, because you have just changed two zero points.

Do I have to recalibrate the whole arm to fix the gripper?

Yes, calibration is a whole-arm pass. Treat it as a line in your dataset history: recordings made before and after belong to different references and should not be mixed into one dataset.

It worked yesterday and nothing changed. How?

Connector fatigue does not announce itself. A contact that has been marginal for weeks finally stops making, usually after a session with a lot of wrist rotation. Reseat before you theorize.

The scan shows six servos but the gripper is limp only sometimes.

Intermittent contact on the last link, or a supply that sags at the moment the gripper closes. Reseat the cable first, then repeat a closing motion on a supply you know is good, since those two account for nearly all of it.