Guía de Configuración del SO-101

Desde las piezas hasta la primera recolección de datos. Tiempo estimado: ~3–4 horas (sin contar el tiempo de impresión 3D).

1

Ensamblaje

~60 min + tiempo de impresión

El SO-101 es un brazo completamente de código abierto. Todas las partes son impresas en 3D o están disponibles como hardware comercial listado en el BOM de LeRobot en HuggingFace.

Partes que necesitas

  • 6× servomotores Feetech STS3215
  • Partes estructurales impresas en 3D (archivos STL en el repositorio de GitHub del SO-101)
  • Cable adaptador USB a serie (chip CH340 o CP2102)
  • Fuente de alimentación de 12V (mínimo 3A)
  • Cables de servo y hardware de conectores (según el BOM)

Lista de verificación de ensamblaje

  • Imprimir todos los componentes estructurales (base, enlaces, efector final)
  • Instalar los servos STS3215 en sus respectivas carcasas de enlace
  • Pasar los cables de servo a través de los canales de cable impresos
  • Conectar los servos en el orden correcto (IDs 1–6 de la base a la punta)
  • Asegurar la base a una superficie estable antes de encender
  • Lea el página de seguridad antes de aplicar energía
Dónde obtener el BOM y los archivos STL: La lista completa de materiales y las partes imprimibles se mantienen en el repositorio de LeRobot de HuggingFace. Busca "SO-101" en el LeRobot GitHub.
1b

Impresión 3D de las partes

~8–16 hrs de tiempo de impresión

Todos los componentes estructurales del SO-101 son imprimibles en FDM utilizando impresoras de escritorio estándar. Los archivos STL están organizados en impresiones de archivo único para cada brazo, lo que facilita el corte.

Configuraciones de cortadora recomendadas

Configuración Valor
Material PLA+
Diámetro de la boquilla 0,4 mm (o 0,6 mm)
Altura de capa 0.2 mm (0.4 mm para boquilla de 0.6 mm)
Densidad de relleno 15%
Soportes En todas partes; ignorar pendientes >45°
Adhesión a la cama Pegamento estándar en barra sobre PEI o vidrio
Impresoras probadas Prusa MINI+, Creality Ender 3, Bambu Lab A/P/X-series

Archivos STL — Cuáles imprimir

Impresiones de archivo único preorganizadas están disponibles para tamaños de cama comunes:

  • Cama de 220×220 mm (Ender 3):
    • Seguidor: STL/SO101/Follower/Ender_Follower_SO101.stl
    • Líder: STL/SO101/Leader/Ender_Leader_SO101.stl
  • Cama de 205×250 mm (Prusa / UP):
    • Seguidor: STL/SO101/Follower/Prusa_Follower_SO101.stl
    • Líder: STL/SO101/Leader/Prusa_Leader_SO101.stl
Verifique primero la precisión dimensional. Antes de imprimir el brazo completo, imprime los STL de la plantilla de STL/Gauges/ y pruébelos con un ladrillo de Lego o un servo STS3215. Un ajuste correcto en el medidor confirma que la calibración de su impresora es precisa. Ajuste la escala si es necesario antes de comprometerse con la impresión completa.
¿No tiene una impresora? Ver el guía 3DPRINT.md en el repositorio SO-ARM100 para opciones de servicio de impresión. También hay kits preimpresos disponibles de PartaBot (UE.), Seeed Studio (internacional), y Autodiscovery (UE).
2

Instalación de software

~15 min

El SO-101 es compatible de forma nativa con HuggingFace LeRobot. No se necesita ningún complemento adicional: solo instale LeRobot.

Instalar LeRobot

# Using pip
pip install lerobot

# Or with uv (recommended)
uv pip install lerobot

permisos del puerto serie de Linux

En Linux, los puertos serie bajo /dev/ttyACM* requieren que el usuario esté en el dialout grupo. Ejecute esto una vez y cierre sesión y vuelva a iniciar sesión:

sudo usermod -aG dialout $USER
# Then log out and back in, or run:
newgrp dialout

Requisitos previos

  • Python 3.10+
  • Linux (se recomienda Ubuntu 22.04) o macOS
  • controlador USB a serie instalado (controlador CH340 en macOS; generalmente preinstalado en Linux)
3

Detección y calibración de puertos

~20 min

Encuentre el puerto serie USB correcto para el brazo, luego ejecute el script de calibración de LeRobot para establecer las posiciones cero del servo.

Encuentre el puerto serie

python lerobot/scripts/find_motors_bus_port.py

Conecte y desconecte el cable USB cuando se le indique. El script identifica a qué puerto está conectado el brazo. Valores típicos:

# Linux:  /dev/ttyACM0  (or ttyUSB0 for CH340 adapters)
# macOS:  /dev/tty.usbmodem*  or  /dev/tty.usbserial-*

Ejecutar calibración

Mueva el brazo a través de su rango completo de movimiento cuando se le indique:

python lerobot/scripts/calibrate.py \
  --robot.type=so101 \
  --robot.port=/dev/ttyACM0
Recalibrar después de cualquier reensamblaje. Los datos de calibración se almacenan localmente. Si desarma y vuelve a ensamblar las juntas, ejecute nuevamente la calibración para restaurar las posiciones cero precisas.
4

Primera Prueba de Movimiento

~15 min

Ejecutar el script de teleoperación en modo de un solo brazo para verificar que todas las articulaciones respondan correctamente antes de conectar un brazo líder.

python lerobot/scripts/teleoperate.py \
  --robot.type=so101 \
  --robot.port=/dev/ttyACM0

Qué verificar

  • Las 6 articulaciones responden a los comandos sin omitir.
  • Sin advertencias de bloqueo de servo o sobrecarga en el terminal.
  • El agarre se abre y cierra a través de todo el rango.
  • Sin enganches de cable en ninguna posición de la articulación.
Parada de emergencia Desconectar el cable USB para cortar inmediatamente la comunicación con el brazo. Mantenga las manos alejadas del espacio de trabajo durante la operación con energía.
5

Teleoperación

~30 min

El SO-101 funciona como un brazo independiente o como un brazo seguidor con un brazo líder para teleoperación. Usar un segundo brazo como líder produce demostraciones de mayor calidad para el aprendizaje por imitación.

Modo independiente (teclado / programático).

python lerobot/scripts/teleoperate.py \
  --robot.type=so101 \
  --robot.port=/dev/ttyACM0

Con un brazo líder (por ejemplo, líder DK1).

python lerobot/scripts/teleoperate.py \
  --robot.type=so101 \
  --robot.port=/dev/ttyACM0 \
  --teleop.type=so101 \
  --teleop.port=/dev/ttyACM1
Configuración bimanual: El SO-101 se puede usar como un brazo seguidor con el brazo líder DK1. Ambos son nativos de LeRobot y se comunican a través de USB serial. Ver el página DK1 para detalles completos de configuración bimanual.
6

Recolección de Datos

En curso

Grabar demostraciones usando record.py. Los datos se guardan en formato LeRobot y se pueden enviar directamente a HuggingFace Hub para entrenamiento.

Grabación básica.

python lerobot/scripts/record.py \
  --robot.type=so101 \
  --robot.port=/dev/ttyACM0 \
  --dataset.repo_id=your-org/so101-dataset \
  --dataset.task="pick cube"

Con una cámara USB.

python lerobot/scripts/record.py \
  --robot.type=so101 \
  --robot.port=/dev/ttyACM0 \
  --robot.cameras.top.type=opencv \
  --robot.cameras.top.index=0 \
  --dataset.repo_id=your-org/so101-dataset \
  --dataset.task="pick cube"

Mejores prácticas de grabación

  • Graba al menos 50 demostraciones por tarea antes del entrenamiento
  • Varía las posiciones y orientaciones de los objetos a lo largo de los episodios
  • Usa descriptivos --dataset.task nombres para filtrado posterior
  • Las cámaras OAK-D o Intel RealSense funcionan bien para la recolección de datos habilitados para profundidad.
  • Verificar que el conjunto de datos se suba a HuggingFace Hub después de cada sesión.

Próximos pasos

Una vez que tengas datos recolectados, entrena un modelo de Política ACT o Difusión utilizando los scripts de entrenamiento de LeRobot. Lee el completo Ruta de aprendizaje de SO-101 para una progresión estructurada desde la configuración hasta el despliegue del modelo.

¿Configuración completa?

Únete a la comunidad para compartir resultados y obtener ayuda con configuraciones avanzadas.