Saltar al contenido principal
Etapa 3 · Capítulo 10 · Práctica

10. Calibración y teleoperación de líder y seguidor

Capítulo 10 del curso para principiantes de SO-ARM Physical AI — calibra los brazos líder y seguidor con lerobot-calibrate, entiende el mapeo de articulaciones y los archivos de calibración, y ejecuta tu primera teleoperación maestro-esclavo.

⚠️
Comprobación de seguridad antes de ejecutar

Retira objetos de valor y personas ajenas a menos de 1 metro del espacio de trabajo. Antes de ejecutar este capítulo, asegúrate de que el brazo esté bien fijado y que la alimentación y los cables estén conectados correctamente.

10.1 Por qué importa la calibración del brazo completo​

Motivación

10.1 Por qué importa la calibración del brazo completo

El Capítulo 6 grabó IDs y baud rates; el Capítulo 7 verificó los neutros. La calibración del brazo completo es el último paso: aprende, para cada articulación, el mapeo entre la lectura cruda del servo y un ángulo físico, de modo que líder y seguidor reporten valores idénticos cuando coinciden físicamente.

Esta calibración es esencial por una razón más profunda: permite que una red entrenada en un SO-ARM funcione en otro. Como todo SO-ARM calibrado coincide en qué es "cero grados" y "el centro del rango", un dataset grabado en tu seguidor es válido en el mío.

peligro

Repaso de reglas de alimentación: en la edición Standard de SO101 toda la alimentación es de 5V. En la edición Pro de SO101, calibra y opera el líder con fuente de 5V y el seguidor con fuente de 12V en cada paso.

10.2 Calibrar el brazo seguidor​

Calibración

10.2 Calibrar el brazo seguidor

Conecta los 6 servos por sus cables de 3 hilos y la placa, concede permisos y ejecuta:

sudo chmod 666 /dev/ttyACM*
lerobot-calibrate \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_awesome_follower_arm # <- dale un nombre único al robot

El procedimiento (mostrado en el video):

  1. Posición media: mueve el brazo para que cada articulación quede en el centro de su rango (aproximadamente la postura "vertical"), y pulsa Enter;
  2. Rango completo: mueve cada articulación por su rango completo, una a una, mientras la herramienta muestrea el mínimo/máximo.
tip

Por actualizaciones del repositorio de LeRobot, es normal que el terminal no reciba señal del servo 5 al calibrar el brazo líder. Puedes continuar la operación.

10.3 Calibrar el brazo líder​

Calibración

10.3 Calibrar el brazo líder

Los mismos dos pasos (posición media, luego rango completo por articulación), con las claves del teleoperator:

lerobot-calibrate \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=my_awesome_leader_arm # <- dale un nombre único al líder
tip

Si ves Could not connect on port '/dev/ttyACM0'. Make sure you are using the correct port. Try running lerobot-find-port, vuelve a conceder permisos con sudo chmod 666 /dev/ttyACM*.

Dónde vive la calibración (y cómo rehacerla)​

Los archivos de calibración se guardan como JSON en ~/.cache/huggingface/lerobot/calibration/robots/ y ~/.cache/huggingface/lerobot/calibration/teleoperators/. Para recalibrar:

  • Opción 1 — borra los archivos para empezar de cero:
rm -rf ~/.cache/huggingface/lerobot/calibration/robots
rm -rf ~/.cache/huggingface/lerobot/calibration/teleoperators
  • Opción 2 — responde al prompt. Al reejecutar el comando sobre un brazo calibrado aparece:
Press ENTER to use provided calibration file associated with the id my_awesome_leader_arm, or type 'c' and press ENTER to run calibration:

Escribe c + Enter para recalibrar; pulsa Enter para conservar los datos existentes.

Si la calibración falla: Magnitude ... exceeds 2047​

Si la calibración o la teleoperación lanza Magnitude 30841 exceeds 2047 (max for sign_bit_index=11), el offset cero de un servo es anómalo. Apaga y reinicia el brazo y reintenta; si persiste, haz primero una calibración de posición media — con la herramienta del Capítulo 7, o con los scripts de Seeed_RoboController:

git clone https://github.com/Seeed-Projects/Seeed_RoboController.git
cd Seeed_RoboController
pip install -r requirements.txt

python -m src.tools.servo_disable # (opcional) desactiva el par para mover a mano
python -m src.tools.servo_middle_calibration # escribe la posición actual como 2048
python -m src.tools.servo_center_test # mueve a 2048 para verificar

Luego vuelve a lerobot-calibrate y repite la calibración completa.

10.4 Mapeo de articulaciones: dirección, rango y pinza​

Mapeos

10.4 Mapeo de articulaciones: dirección, rango y pinza

Tras la calibración, verifica a mano:

  • Dirección: girar la articulación 1 del líder en sentido horario debe girar la 1 del seguidor en sentido horario. Si alguna va al revés, la calibración se hizo con el brazo en postura espejo — repite esa articulación.
  • Rango: lleva cada articulación del líder a ambos topes; el seguidor debe alcanzar los topes correspondientes sin forzar contra las piezas impresas.
  • Pinza: cierra por completo el mango del líder — la pinza del seguidor debe cerrar por completo; la apertura total mapea a la apertura total.
tip

Recuerda del Capítulo 9: el --robot.id / --teleop.id elegido aquí queda ligado al archivo de calibración. Usa exactamente los mismos ids al teleoperar, grabar y evaluar más adelante.

10.5 Iniciar la teleoperación maestro-esclavo​

Teleoperación

10.5 Iniciar la teleoperación maestro-esclavo

Ahora llega el momento en que los dos brazos se vuelven un solo sistema. Concede permisos y arranca:

sudo chmod 666 /dev/ttyACM*
lerobot-teleoperate \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_awesome_follower_arm \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=my_awesome_leader_arm

El comando teleoperate automáticamente:

  1. Detecta calibraciones faltantes e inicia el procedimiento;
  2. Conecta el robot y el teleoperator y comienza la teleoperación.

Directrices de seguridad en teleoperación​

  • Sujeta el seguidor la primera vez que se activa el par — saltará a su postura calibrada.
  • Mueve el líder despacio; el seguidor sigue con par completo.
  • Mantén los dedos fuera de la pinza y de los puntos de pellizco.
  • Si el seguidor se retrasa, vibra o una articulación deja de responder: detente, apaga, y revisa el cable de bus de ese servo (un LED apagado indica el cable flojo previo).

10.6 Frecuencia de control y latencia​

Rendimiento

10.6 Frecuencia de control y latencia

¿De dónde viene la latencia? ¿Por qué es inevitable?​

Cada ciclo lee el líder, envía objetivos al seguidor y (luego) lee cámaras. Las cámaras USB entregan fotogramas a su propio ritmo. El bucle es rápido — decenas de milisegundos — pero no cero, así que los movimientos rápidos del líder siempre se ven algo suavizados en el seguidor. Es normal.

¿Qué es la frecuencia de control? ¿Se puede configurar?​

LeRobot ejecuta el bucle a un fps configurado (30 por defecto en los flujos de SO-ARM; el --dataset.fps posterior debe coincidir). Si la teleoperación se traba:

  • Evita concentradores USB — conecta brazos y cámaras directo al ordenador;
  • Comprueba que ningún otro proceso retenga los puertos serie;
  • Verifica con lerobot-find-port que ningún otro dispositivo comparta el bus.

10.7 Práctica​

Práctica

10.7 Práctica

  1. Calibra líder y seguidor; encuentra ambos JSON bajo ~/.cache/huggingface/lerobot/calibration/.
  2. Teleopera 5 minutos: toca con la pinza las cuatro esquinas de la alfombrilla y recoge un objeto pequeño.
  3. Prueba deliberadamente la vía del fallo: ejecuta teleoperate con un --robot.id equivocado y lee el error — así no lo olvidarás.
  4. Practica la recalibración vía el prompt c.

Con la cadena de control verificada, el próximo capítulo diseña los datos de tu primera política.

Loading Comments...