The serial port is found and the arm answers, but the scan reports fewer servos than the arm has. Four of six, or five of six, and the same IDs are missing on every rescan.
A servo bus is a daisy chain, not a hub, so a bad link between servo N and servo N+1 makes everything after it disappear while everything before it keeps answering normally. Write down the highest ID that still responds: the cable between that servo and the next one is your suspect, and reseating or swapping it is a one minute test. A gap in the middle of the sequence means something different, because a broken link cannot skip a servo and then come back.
The bus is a chain, not a hub
Each servo on these arms has two identical connectors and passes the bus straight through from one to the other. The controller connects to the first servo, the first connects to the second, and so on to the gripper. There is no star wiring and no central board with six sockets. Every servo therefore depends on every connector between it and the controller, and a single bad link cuts off everything downstream of it while leaving everything upstream perfectly healthy.
That is why the count is diagnostic rather than merely alarming. A scan is a sequence of addressed queries; each servo that receives one answers with its ID. The set of IDs that answer maps directly onto the physical order of the arm, so the boundary between answering and silent is the location of the fault.
Two different checks are involved and it is worth keeping them apart. The CLI device list tells you whether the operating system has a serial port for the arm at all. It prints two columns per serial line, the device id and a name, and for an arm that name is always the literal word unknown, because the record behind the line carries no name at all. It does not report servos.
ay-robots devices
# SERIAL PORTS
# robot_1 unknown
# CAMERAS
# camera_1 USB 2.0 CameraThe list of responding IDs comes from the motor scan on the Hardware page for your robot in the dashboard. It queries the bus and reports the IDs that replied, so on a six joint arm an answer of 1, 2, 3 and 4 means the boundary sits between servo 4 and servo 5. Write that list down before you touch anything, because it is the one piece of evidence that locates the fault physically.
Reading the pattern
| Responding IDs | Missing | What it means |
|---|---|---|
| None | All six | Power, or the first cable out of the controller. No individual servo can cause this. |
| 1, 2, 3 | 4, 5, 6 | The link between servo 3 and servo 4. Check that one connector before anything else. |
| 1, 2, 3, 4, 5 | 6 | The last cable in the chain, which is also the one that flexes most. |
| 1, 2, 4, 5, 6 | 3 only | Not a chain break. A break cannot skip one and resume, so servo 3 itself is at fault or its ID changed. |
| Count is one short, two joints move together | Nothing physically | Two servos share an ID. They both obey and only one is counted. |
| Count varies between scans | Different IDs each time | A marginal connector or a supply that sags. Reseat, then read the brownout guidance below. |
The fourth row is the one worth internalizing. Wiring failures are contiguous by construction: if the signal stops at a connector, everything past it is silent, without exception. A hole in the middle of an otherwise complete sequence is therefore never a cable between two working neighbors, and looking for one wastes an hour. A servo that has failed electrically usually still passes the bus through its second connector, which is exactly why its neighbors keep answering while it does not.
Diagnose it in this order
- 1Confirm the port, then scan the bus
The CLI device list confirms that a serial port exists. Then run the motor scan on the Hardware page and record which IDs answered, in order. If you only remember "some are missing" you will lose the one piece of information that locates the fault.
bashay-robots devices - 2Power cycle once, then rescan
A servo that latched a fault, or a bus that was scanned while the supply was still coming up, can report short for reasons that clear on a clean start. This costs ten seconds. Do it once, not repeatedly, because repeating it is not diagnosis.
- 3Reseat both ends of the suspect link with the power off
Take the link identified by the highest responding ID. Unplug both connectors, look at the pins, push them home until they click, and rescan. Half-seated connectors are the single most common cause and they survive weeks of use before failing.
- 4Swap that cable with one you have proven
Take the cable from a link that is currently working, for example between servos 1 and 2, and put it in the suspect position. If the missing servos come back, you have found it. If the fault moves to where you took the good cable from, you have found it twice.
- 5Shorten the chain to isolate the servo
Connect the first missing servo directly to the controller with a known-good cable, alone, and run the motor scan again. If it answers on its own, the servo is fine and everything you are chasing is wiring. If it stays silent alone, you have a servo or an ID problem, not a cable.
- 6Check for a duplicated ID
If the isolated servo answers but the count is still short when it is back in the chain, two servos are probably sharing an address. Put each one alone on the bus in turn and note the ID it reports.
- 7Check the baud rate on anything recently replaced
A servo configured for a different rate is electrically fine and completely silent at the rate the rest of the bus uses. This is standard on a replacement unit out of the box and on any servo that has been through someone else’s configuration tool.
- 8Only now suspect the servo or the controller
A servo that stays silent alone, on a proven cable, at the right baud rate, with a unique ID, has earned the diagnosis. Replace it, then recalibrate the arm, because a new servo has a different zero point.
bashay-robots calibrate
Reseating connectors on a live bus risks shorting adjacent pins as the plug tilts. Switch the servo supply off first. While you are handling supplies: STS3215 servos are 7.4 V parts and a 12 V brick ends all six in seconds, so if a LeKiwi base or a Koch arm shares your bench, keep those supplies physically separated and labeled.
Duplicate IDs, and the joint that moves in sympathy
Every command on the bus is addressed to an ID. If two servos carry the same one, both of them execute every command sent to that address, and both try to answer it. The scan counts one where two exist, and the arm develops an obvious tell: two joints move together whenever you drive either of them. Nothing raises an error, because from the protocol’s point of view nothing unusual happened.
This shows up after a servo is replaced with one that was never renumbered, and after a build where the numbering pass was interrupted. In both cases the servo that needs fixing is still on the factory ID 1, which is the case the platform handles for you: open the Hardware page for your robot in the dashboard, start the motor configuration, and step through the six positions with only the servo you are numbering connected to the board. It scans, reports the servo sitting on ID 1, and writes the ID for that position. There is no command in this platform’s CLI that writes servo IDs, so do not go looking for one. A servo that already carries some other ID, say 3 when you want 5, is the case this does not cover, and that is what the servo vendor’s configuration tool is for. Once the numbering is unique, rescan, then recalibrate, because the software’s idea of which joint is which has just changed.
A servo on the wrong baud rate
Servos and controller must agree on the bus speed. A unit set to a different rate hears a garbled version of every query and answers nothing, which is indistinguishable from a dead servo or a cut cable when all you have is a count. The reason to keep it on the list is that it is free to rule out and expensive to overlook: people replace a perfectly good servo because of it.
The scan only ever runs at the single rate the bus uses, so a servo on a different rate is invisible to it and to the motor configuration in the dashboard. This is the one case that needs the vendor tool, because you have to reach the servo at the rate it is currently listening on before you can move it to the one everything else uses.
| Test | Result | Conclusion |
|---|---|---|
| Servo alone on a proven cable | Answers | Servo and its own connectors are fine, look upstream |
| Servo alone on a proven cable | Silent | Servo, its ID, or its baud rate |
| Swap suspect cable with a working one | Fault follows the cable | The cable, replace it |
| Swap suspect cable with a working one | Fault stays in place | The connector on one of the two servos, or the servo |
| Renumber the suspect alone, then rescan | Count is now complete | It was a duplicate ID all along |
| Scan again with the vendor tool at another rate | Servo appears there | Baud rate mismatch, set it to match the bus |
Calibration captures all joints in one pass. Running it while a servo is missing stores a reference for an arm that does not exist, and you will be undoing it later. Get to a full count first, then calibrate, then record. The calibration walkthrough is on /learn/so-100-getting-started.
What a missing servo does to a dataset
If you record before you have a full count, the joint that never answered contributes a column that never changes. That dataset looks entirely normal in a file listing and trains without complaint, and the resulting policy simply never uses that joint. It is a slow, expensive way to learn this lesson, and it is the reason the scan is worth reading carefully every time you set up rather than only when something is obviously broken. Recording practice is covered on /so-100/data-collection, and the training side of the same mistake shows up on /train/act-on-so-100.
Frequently asked questions
The last responding ID is 5 and the gripper is 6. Is the gripper dead?▾
Probably not. The cable to the gripper is the last one in the chain and it moves every time the wrist turns, so it fails far more often than the servo it feeds. Reseat and swap that cable before you order a replacement servo.
Why does the count change between scans?▾
A connector that makes contact intermittently, or a supply that sags while several servos are energized. Reseat everything, then confirm the supply is holding under load, because a marginal supply can drop servos out of a scan without any wiring being at fault.
Can I renumber a servo with the CLI?▾
No. The CLI can list devices, calibrate, home, record, run policies and manage datasets, but it does not write servo IDs. The dashboard does: the Hardware page for your robot walks the six positions, scans with a single servo on the bus, and assigns the ID to a servo still on the factory ID 1. A servo that already carries a different ID needs the servo vendor’s configuration tool instead.
Does a dead servo in the middle break the ones after it?▾
Usually not. The bus passes through the servo’s second connector, so its neighbors keep answering. That is why a gap in the middle of the ID sequence points at the servo rather than at the wiring.
I replaced a servo and now the arm is one short again.▾
Check its ID and its baud rate. Replacement units arrive with factory defaults, which are frequently neither the ID nor the rate your bus expects. Put it alone on the bus, set both, then rescan and recalibrate.
Was this page helpful?
A symptom in one part of the chain is regularly produced by the part before it. These pages cover the neighboring areas.