Skip to main content
Stage 2 · Chapter 7 · Practice

7. Servo Debugging with the Steering Gear Tool

Chapter 7 of the SO-ARM Physical AI Beginner's Course — use the Seeed_RoboController Steering Gear Debugging Tool to detect servos, recalibrate servo IDs, write neutral values, control single servos, and read servo status.

7.1 What the Tool Is For​

Overview

7.1 What the Tool Is For

The Steering Gear Debugging Tool (Seeed_RoboController) is a graphical debugging tool for LeRobot / SO-ARM robotic arms. With this tool, you can:

  • Quickly detect servo status;
  • Recalibrate duplicated or wrong servo IDs;
  • Write neutral (middle-position) values;
  • Control individual servos and read their voltage, temperature, speed, load, and current;
  • Manage advanced servo register data, baud rate, and factory reset.

It runs on Windows, Ubuntu, and Mac, and it is your first stop whenever an arm behaves strangely — before recalibrating in LeRobot, before reassembling, and before assuming a servo is broken.

7.2 Installation​

Install

7.2 Installation

1. Clone the repository:

git clone https://github.com/Seeed-Projects/Seeed_RoboController.git

2. Install dependencies. It is recommended to install the tool inside the LeRobot conda environment from Chapter 5. If you prefer a standalone installation, create a new virtual environment to avoid polluting the system Python:

pip install -r requirements.txt

3. Check the environment. If it returns [OK] Environment check passed, the project is ready to run:

python setup.py

4. Launch the tool:

python -m src.gui.factory_calibration_tool

This starts interactive port selection. (Optional) If ports are occupied, specify them manually:

python -m src.gui.factory_calibration_tool --port1 /dev/ttyUSB0 --port2 /dev/ttyUSB1

7.3 Check Whether the Servos Are Normal​

Detect

7.3 Check Whether the Servos Are Normal

First, select the corresponding port in the serial-port selector. If servos 1-6 are all detected successfully, the servos are recognized normally and the basic functions are working.

All six servos detected

If some servos show as not detected:

  1. Check whether the wiring is correct; close the page and reopen it.
  2. If they are still not detected, the servo IDs may be duplicated — possibly because a servo-calibration command was accidentally run as the arm-calibration command. In that case, recalibrate the IDs of these servos (next section).
Servo not detected

7.4 Recalibrate Servo IDs​

Fix IDs

7.4 Recalibrate Servo IDs

From Chapter 4: all servos share one bus, so flashing an ID affects every servo with that ID. Therefore, all other servos must be disconnected and reprogrammed one by one.

Step 1 — remove the servo wire harnesses between adjacent servos, from the gripper down to the base:

Disconnect servo 6 to 5
Disconnect servo 1 from the control board

Step 2 — connect one servo at a time. Make sure only one servo is connected to the control board. For example, connect the #6 servo to the driver board as shown below — other servos are connected the same way, so you can fix IDs without disassembling the arm.

Single servo connected to the board

Step 3 — rewrite the ID. In the example below, only servo #4 is recognized, but the servo actually connected is #6 — the ID is wrong and needs to be changed back to 6.

Wrong ID detected

Click on servo #4 and change its ID to 6. Repeat the same operation for the other servos.

Rewrite the servo ID

After the servo calibration is complete, plug the wires back in one by one to finish.

7.5 Write the Neutral Value to the Servo​

Neutral

7.5 Write the Neutral Value to the Servo

The neutral (middle) position is the "straight" posture all later calibration is measured from — internally it is the value 2048.

Reference neutral posture
  1. Click Serial Port Neutral Test to check whether the arm's neutral position matches the reference above. If it is roughly the same, the neutral value is normal.
  2. If not, move the arm to the neutral position, then click Serial Port Neutral Calibration — the current position is written into the servo as the neutral value.
  3. Click Serial Port Disable Motors, and the arm will go limp — support it by hand.
Neutral test and calibration buttons
tip

This is also the fix for the LeRobot error Magnitude 30841 exceeds 2047 (max for sign_bit_index=11): that message means a servo's zero offset is abnormal. Run a middle-position calibration here (or with the servo_middle_calibration.py script in the same repository), then redo the full-arm calibration in Chapter 10.

7.6 Single Servo Control and Status​

Control

7.6 Single Servo Control and Status

By default, all servos on the page are at their neutral positions.

All servos at neutral

1. Enable torque and move one servo. Enable all torques with one click, or enable a single servo, then slide the slider to move it. Move slowly: the printed parts physically block certain positions, so do not slide the slider to 0 or the maximum. After disabling torque, the arm goes limp.

Torque enabled, servo moved

2. Per-servo maintenance. You can run neutral calibration for a single servo and clear its internal neutral, maximum, and minimum positions.

3. Read the servo status panel:

FieldMeaning
PosPosition
VVoltage
TTemperature
SpdSpeed
LoadTorque
CurCurrent
MovMotion status
ModelModel, authority
StatusNormal / Overcurrent / Overload

Rising temperature with high load during long teleoperation sessions is normal on the follower; persistent Overcurrent or Overload at rest usually means a jammed joint or a wrong neutral value.

7.7 Advanced Tools​

Advanced

7.7 Advanced Tools

For deeper debugging you can read and write raw register data, modify the baud rate, and restore factory settings.

Advanced tools panel
warning

Register writes and factory reset can brick a servo's configuration if done blindly. Prefer the guided functions (Sections 7.3-7.6) and only touch raw registers when a specific guide tells you to.

7.8 Summary​

Summary

7.8 Summary

  • The Steering Gear Debugging Tool is the maintenance console for the servo bus: detect, fix IDs, set neutrals, move single servos, read status.
  • Servo IDs are always rewritten one connected servo at a time.
  • A correct neutral value (2048) is the foundation of all later calibration.

With the arms assembled and every servo verified, Stage 2 is complete. Stage 3 starts by explaining why robot arms need to learn at all — and then puts your SO-ARM to work collecting data and training policies.

Loading Comments...