7. Depuración de servos con la herramienta de ajuste
Capítulo 7 del curso para principiantes de SO-ARM Physical AI — usa la herramienta de depuración Seeed_RoboController para detectar servos, reprogramar IDs, escribir valores neutros, controlar servos individuales y leer su estado.
7.1 Para qué sirve la herramienta
7.1 Para qué sirve la herramienta
La herramienta de depuración de servos (Seeed_RoboController) es una herramienta gráfica de depuración para brazos robóticos LeRobot / SO-ARM. Con ella puedes:
- Detectar rápidamente el estado de los servos;
- Reprogramar IDs duplicados o incorrectos;
- Escribir valores neutros (posición media);
- Controlar servos individuales y leer voltaje, temperatura, velocidad, carga y corriente;
- Gestionar registros avanzados, baud rate y restablecimiento de fábrica.
Funciona en Windows, Ubuntu y Mac, y es tu primera parada cuando un brazo se comporta de forma extraña — antes de recalibrar en LeRobot, antes de desmontar y antes de asumir que un servo está roto.
7.2 Instalación
7.2 Instalación
1. Clona el repositorio:
git clone https://github.com/Seeed-Projects/Seeed_RoboController.git
2. Instala las dependencias. Se recomienda dentro del entorno conda de LeRobot del Capítulo 5. Si prefieres una instalación independiente, crea un entorno virtual nuevo para no contaminar el Python del sistema:
pip install -r requirements.txt
3. Comprueba el entorno. Si devuelve [OK] Environment check passed, el proyecto está listo:
python setup.py
4. Inicia la herramienta:
python -m src.gui.factory_calibration_tool
Esto abre la selección interactiva de puerto. (Opcional) Especifica los puertos manualmente si están ocupados:
python -m src.gui.factory_calibration_tool --port1 /dev/ttyUSB0 --port2 /dev/ttyUSB1
7.3 Comprobar si los servos están bien
7.3 Comprobar si los servos están bien
Primero, selecciona el puerto correspondiente en el selector de puertos. Si los servos 1-6 se detectan todos, los servos se reconocen correctamente y las funciones básicas funcionan.

Si algunos servos aparecen como no detectados:
- Revisa que el cableado sea correcto; cierra la página y vuelve a abrirla.
- Si siguen sin detectarse, los IDs pueden estar duplicados — posiblemente porque se ejecutó por error un comando de calibración de servos como si fuera el de calibración del brazo. En ese caso, reprograma esos IDs (siguiente sección).

7.4 Reprogramar IDs de servo
7.4 Reprogramar IDs de servo
Del Capítulo 4: todos los servos comparten un bus, así que grabar un ID afecta a todos los servos con ese ID. Por eso hay que desconectar los demás y reprogramarlos de a uno.
Paso 1 — retira los mazos de cables entre servos adyacentes, de la pinza hacia la base:


Paso 2 — conecta un servo a la vez. Asegúrate de que solo un servo esté conectado a la placa. Por ejemplo, conecta el servo #6 como se muestra — los demás se conectan igual, así que puedes arreglar IDs sin desmontar el brazo.

Paso 3 — reescribe el ID. En el ejemplo, solo se reconoce el servo #4, pero el conectado es el #6 — el ID está mal y hay que devolverlo a 6.

Haz clic en el servo #4 y cambia su ID a 6. Repite la operación con los demás servos.

Terminada la corrección, vuelve a conectar los cables uno a uno.
7.5 Escribir el valor neutro en el servo
7.5 Escribir el valor neutro en el servo
La posición neutra (media) es la postura "recta" de la que se mide toda calibración posterior — internamente corresponde al valor 2048.

- Pulsa Serial Port Neutral Test para comprobar si la posición neutra del brazo coincide con la referencia. Si es aproximadamente igual, el neutro es correcto.
- Si no, mueve el brazo a la posición neutra y pulsa Serial Port Neutral Calibration — la posición actual se escribe en el servo como valor neutro.
- Pulsa Serial Port Disable Motors y el brazo quedará suelto — sostenlo con la mano.

Esta también es la solución al error de LeRobot Magnitude 30841 exceeds 2047 (max for sign_bit_index=11): ese mensaje indica un offset cero anómalo en un servo. Haz aquí una calibración de posición media (o con el script servo_middle_calibration.py del mismo repositorio) y repite la calibración completa del Capítulo 10.
7.6 Control y estado de servos individuales
7.6 Control y estado de servos individuales
Por defecto, todos los servos de la página están en su posición neutra.

1. Activa el par y mueve un servo. Activa todos los pares de un clic, o uno individual, y desliza el control para moverlo. Muévete despacio: las piezas impresas bloquean físicamente ciertas posiciones, así que no lleves el control a 0 ni al máximo. Al desactivar el par, el brazo queda suelto.

2. Mantenimiento por servo. Puedes calibrar el neutro de un solo servo y limpiar su neutro, máximo y mínimo internos.
3. Panel de estado del servo:
| Campo | Significado |
|---|---|
| Pos | Posición |
| V | Voltaje |
| T | Temperatura |
| Spd | Velocidad |
| Carga | Par |
| Cur | Corriente |
| Mov | Estado de movimiento |
| Modelo | Modelo, autoridad |
| Estado | Normal / Sobrecorriente / Sobrecarga |
Que la temperatura suba con la carga durante largas sesiones de teleoperación es normal en el seguidor; Sobrecorriente o Sobrecarga persistente en reposo suele indicar una articulación atascada o un neutro incorrecto.
7.7 Herramientas avanzadas
7.7 Herramientas avanzadas
Para depurar más a fondo puedes leer y escribir registros crudos, modificar el baud rate y restaurar los valores de fábrica.

Escribir registros y restablecer de fábrica puede inutilizar la configuración de un servo si se hace a ciegas. Prefiere las funciones guiadas (secciones 7.3-7.6) y toca los registros crudos solo cuando una guía concreta lo indique.
7.8 Resumen
7.8 Resumen
- La herramienta de depuración es la consola de mantenimiento del bus de servos: detectar, corregir IDs, fijar neutros, mover servos, leer estado.
- Los IDs de servo siempre se reescriben de a un servo conectado por vez.
- Un neutro correcto (2048) es la base de toda la calibración posterior.
Con los brazos ensamblados y cada servo verificado, la Etapa 2 está completa. La Etapa 3 empieza explicando por qué los brazos robóticos necesitan aprender — y luego pone tu SO-ARM a recolectar datos y entrenar políticas.