11. Calibración de Líder y Seguidor y Teleoperación
Capítulo 11 del Curso de Introducción a la IA Física de Seeed: configuración del entorno, calibración del brazo seguidor y del brazo líder, mapeo de articulaciones, seguridad en la teleoperación, inicio de la teleoperación maestro‑esclavo, frecuencia de control y latencia, y práctica guiada.
11.1 Desempaquetado, cableado y montaje del brazo
11.1 Desempaquetado, cableado y montaje del brazo
- reBot DM
- reBot RS
11.2 Configuración del entorno
11.2 Configuración del entorno
Suponiendo que ya has creado un entorno virtual en la Etapa 2, a continuación solo necesitamos clonar el repositorio e instalar el entorno en el entorno conda que creaste. NO uses una máquina virtual ni WSL; es mejor instalar directamente Ubuntu 22.04.
Recuerda: todos los pasos posteriores deben realizarse dentro del entorno virtual y del entorno lerobot.
Paso 1: Clonar el repositorio Seeed LeRobot
mkdir ~/rebot_lerobot
cd ~/rebot_lerobot
git clone https://github.com/Seeed-Projects/lerobot.git
Paso 2: Entrar en el entorno virtual e instalar LeRobot y los plugins de reBot
conda create -y -n rebot_arm python=3.12
pip install -e ./lerobot
pip install lerobot-teleoperator-rebot-arm-102
pip install lerobot-robot-seeed-b601
pip install motorbridge
Paso 3: Instalar ffmpeg (dependencia de códec de vídeo)
conda install ffmpeg -c conda-forge
Notas de versión:
- De forma predeterminada, se instalará ffmpeg 7.X (compatible con el codificador libsvtav1).
- Si encuentras problemas de compatibilidad de versión, puedes especificar ffmpeg 7.1.1:
conda install ffmpeg=7.1.1 -c conda-forge
- Puedes comprobar si se admite el codificador libsvtav1 mediante
ffmpeg -encoders | grep svtav1.
Paso 4: Configuración especial para dispositivos NVIDIA Jetson (omite este paso en un PC normal)
Para dispositivos Jetson JetPack 6.0+ (asegúrate de haber instalado PyTorch-gpu y Torchvision compatibles con Jetson antes de este paso):
# Install OpenCV and other dependencies via conda (Jetson JetPack 6.0+ only)
conda install -y -c conda-forge "opencv>=4.10.0.84"
# Uninstall OpenCV
conda remove opencv
# Install specific OpenCV version via pip3
pip3 install opencv-python==4.10.0.84
conda install -y -c conda-forge ffmpeg
conda uninstall numpy
# This version must be compatible with Torchvision
pip3 install numpy==1.26.0
Paso 5: Comprobar si la GPU de PyTorch está disponible
python3
import torch
print(torch.cuda.is_available()) # Should output True
Escribe exit() para salir.
Si muestra False, instalaste la versión para CPU: necesitas reinstalar PyTorch.
11.3 Calibración del brazo seguidor
11.3 Calibración del brazo seguidor
- A continuación, antes de calibrar, asegúrate de que el robot reBot B601-RS esté conectado a la alimentación y al cable de datos.
- Los archivos de calibración de Líder y Seguidor se almacenan respectivamente en
~/.cache/huggingface/lerobot/calibration/robotsy~/.cache/huggingface/lerobot/calibration/teleoperators. Para recalibrar, elimina los archivos correspondientes o simplemente ejecuta el comando de calibración: la terminal mostrará un mensaje indicando que pulses C para recalibrar o pulses Enter para usar el archivo de calibración existente. - Si no puedes conectarte al seguidor, consulta la Etapa 2 y usa la interfaz de motorbridge para comprobar si el brazo funciona correctamente.
- Sigue las indicaciones para mover el brazo Seguidor a la posición cero que se muestra arriba. El brazo solo necesita calibrarse una vez en el mismo ordenador después del montaje. A continuación se muestran los comandos de calibración; consulta la posición cero en la imagen (la pinza debe estar completamente cerrada).

Para la calibración del Seguidor DM:
sudo chmod 666 /dev/ttyACM*
cd lerobot
lerobot-calibrate \
--robot.type=seeed_b601_dm_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=follower1 \
--robot.can_adapter=damiao
Para la calibración del Seguidor RS:
Si tu sistema aún no tiene instalado el controlador PCAN, consulta esta página: PCAN driver installed
sudo ip link set can0 down 2>/dev/null
sudo ip link set can0 type can bitrate 1000000
sudo ip link set can0 up
cd lerobot
lerobot-calibrate \
--robot.type=seeed_b601_rs_follower \
--robot.port=can0 \
--robot.id=follower1 \
--robot.can_adapter=socketcan
(Opcional) Si estás usando Jetson (Jetpack 6.x), ejecuta el siguiente comando para encontrar el número de puerto CAN de tu Jetson:
for i in /sys/class/net/can*; do
[ "$(basename "$(readlink -f "$i/device/driver" 2>/dev/null)")" = "pcan" ] && basename "$i"
done
Ejemplo de salida:
can2 # Could also be can0, can1, or other CAN number
El número de puerto usado en todos los comandos posteriores del seguidor debe coincidir con el resultado mostrado aquí.
Si tu Jetson no tiene el PCAN driver installed, la comunicación será persistentemente anómala.
11.4 Calibración del brazo líder
11.4 Calibración del brazo líder
Notas de calibración del Líder reBot 102:
- Cuando comienza la calibración, la posición actual de cada servo en el reBot Arm 102 se restablecerá a cero.
joint_ranges(límites de articulación) provienen del archivo de configuraciónconfig_rebot_arm_102_leader.py, no de los datos de calibración.- Si una articulación parece quedarse siempre atascada cerca de un límite, comprueba primero la configuración de
joint_ranges. - Las direcciones de las articulaciones se definen en el archivo de configuración; si las direcciones no coinciden, modifica la configuración en lugar de recalibrar.
- El Líder reBot 102 utiliza un módulo USB‑a‑UART, que normalmente se asigna a
/dev/ttyUSB*. - Usa
ls /dev/ttyUSB*para ver el número de puerto real.
En la primera conexión, es posible que aparezca un error indicando que no se puede encontrar el puerto serie /dev/ttyACM0; esto se debe a que brltty está ocupando el puerto. Sigue estos pasos:
sudo dmesg | grep ttyUSB # See 'disconnected' on the last line
sudo apt remove brltty # Remove brltty

Sigue las indicaciones para mover el brazo Líder a la posición cero que se muestra arriba:
sudo chmod 666 /dev/ttyUSB0
lerobot-calibrate \
--teleop.type=rebot_arm_102_leader \
--teleop.port=/dev/ttyUSB0 \
--teleop.id=rebot_arm_102_leader
Mantenlo inmóvil y luego pulsa Enter hasta que la calibración se complete.
11.5 Mapeo de articulaciones: dirección, rango y pinza
11.5 Mapeo de articulaciones: dirección, rango y pinza

11.6 Directrices de seguridad para la teleoperación
11.6 Directrices de seguridad para la teleoperación

11.7 Inicio de la teleoperación maestro‑esclavo
11.7 Inicio de la teleoperación maestro‑esclavo
Durante la teleoperación, si los cables de alimentación se aflojan, la conexión de alimentación es deficiente o los cables de señal se desconectan, primero debes detener el código, devolver el brazo a su posición cero inicial y luego volver a conectar la alimentación y reiniciar el programa, para evitar que la corrupción de datos haga que el brazo se salga de control y genere peligro.
Teleoperación DM: primero concede permisos a los puertos serie:
# leader
sudo chmod 666 /dev/ttyUSB*
# follower
sudo chmod 666 /dev/ttyACM*
Ejecuta la teleoperación:
lerobot-teleoperate \
--robot.type=seeed_b601_dm_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=follower1 \
--robot.can_adapter=damiao \
--teleop.type=rebot_arm_102_leader \
--teleop.port=/dev/ttyUSB0 \
--teleop.id=rebot_arm_102_leader
Teleoperación RS — primero concede permisos a los puertos serie:
# leader
sudo chmod 666 /dev/ttyUSB*
# follower
sudo ip link set can0 down 2>/dev/null
sudo ip link set can0 type can bitrate 1000000
sudo ip link set can0 up
Ejecuta la teleoperación:
lerobot-teleoperate \
--robot.type=seeed_b601_rs_follower \
--robot.port=can0 \
--robot.id=follower1 \
--robot.can_adapter=socketcan \
--teleop.type=rebot_arm_102_leader \
--teleop.port=/dev/ttyUSB0 \
--teleop.id=rebot_arm_102_leader
11.8 Frecuencia de Control y Latencia
11.8 Frecuencia de Control y Latencia
Que la teleoperación se sienta "sensible" depende de dos cosas: cuántos bucles ejecuta por segundo el circuito de reenvío (frecuencia) y cuánta demora hay entre tu mano y el brazo (latencia).
¿De Dónde Viene la Latencia? ¿Por Qué Es Inevitable?

¿Qué Es la Frecuencia de Control? ¿Se Puede Configurar?
El bucle de teleoperación usa por defecto 60 Hz — completa 60 bucles por segundo de "leer Leader → mapear → enviar CAN → leer de vuelta"; cada bucle tiene un presupuesto de tiempo de 16,7 ms. Esta frecuencia se puede ajustar mediante el parámetro fps de la configuración de teleoperate, pero ten en cuenta dos cosas:
- El límite superior está determinado por el tiempo del circuito de hardware, no por el software. La cadena anterior por sí sola tarda más de diez milisegundos por bucle, así que el límite práctico superior para este hardware está alrededor de 60–100 Hz. Configurarlo más alto no tiene sentido: la frecuencia real no aumentará y solo verás advertencias de tiempo de periodo excedido.
- 60 Hz ya supera con creces lo necesario. Los movimientos humanos conscientes más rápidos son solo de 5–10 Hz; 60 Hz es como tomar diez instantáneas de cada pequeño movimiento, por lo que la densidad de muestreo cubre completamente el ancho de banda de la mano.
11.9 Práctica Guiada
11.9 Práctica Guiada: Agarrar, Transportar y Colocar
La teleoperación es estable, pero "puede moverse" y "puede trabajar" aún requieren práctica deliberada. La calidad de los datos del Capítulo 13 depende de tu nivel de destreza actual. Practica en tres niveles:
- Ejercicio 1: Transferencia de objetos sin carga (familiarizarse con la sensación). Coloca algunos bloques ligeros en el espacio de trabajo. Practica: moverte sobre el objetivo → descender → cerrar el efector final → levantar. Objetivo: 10 repeticiones sin colisiones ni caídas a mitad de ejecución, con cada ejecución fluyendo de forma suave y sin vacilaciones.
- Ejercicio 2: Transporte y colocación (cadena completa de tareas). Completa todo el flujo de trabajo de "agarrar → transportar → colocar en el contenedor designado". Objetivo: 10 repeticiones consecutivas con poses de inicio y fin casi idénticas cada vez.
- Criterio de aprobación: puedes completar 20 tareas completas seguidas a un ritmo constante sin sentirte tenso; entonces estarás listo para el siguiente capítulo.