LeRobot documentation
SO-100
SO-100
En los pasos a continuación, explicamos cómo ensamblar el robot SO-100.
Obtener las piezas
Sigue este README. Contiene la lista de materiales, con un enlace para conseguir las piezas, así como las instrucciones para imprimir las piezas en 3D. Y da consejos si es la primera vez que imprimes o si no tienes una impresora 3D.
Instalar LeRobot 🤗
Para instalar LeRobot, sigue nuestra Guía de instalación
Además de estas instrucciones, debe instalar el SDK de Feetech (si instaló LeRobot desde PyPI, ejecute pip install 'lerobot[feetech]' en su lugar):
pip install -e ".[feetech]"Configura los motores
Nota: A diferencia del SO-101, los conectores de los motores no son fácilmente accesibles una vez que el brazo está ensamblado, por lo que el paso de configuración debe realizarse con antelación.
1. Encuentra los puertos USB asociados con cada brazo
Para encontrar el puerto de cada adaptador de servos de bus, ejecute este script:
lerobot-find-port
Ejemplo de salida:
Finding all available ports for the MotorBus.
['/dev/tty.usbmodem575E0032081', '/dev/tty.usbmodem575E0031751']
Remove the USB cable from your MotorsBus and press Enter when done.
[...Disconnect corresponding leader or follower arm and press Enter...]
The port of this MotorsBus is /dev/tty.usbmodem575E0032081
Reconnect the USB cable.Donde se encuentra el puerto: /dev/tty.usbmodem575E0032081 correspondiente a su brazo líder o seguidor.
En Linux, es posible que necesites otorgar acceso a los puertos USB ejecutando:
sudo chmod 666 /dev/ttyACM0
sudo chmod 666 /dev/ttyACM1Ejemplo de salida:
Finding all available ports for the MotorBus.
['/dev/ttyACM0', '/dev/ttyACM1']
Remove the usb cable from your MotorsBus and press Enter when done.
[...Disconnect corresponding leader or follower arm and press Enter...]
The port of this MotorsBus is /dev/ttyACM1
Reconnect the USB cable.Donde se encuentra el puerto: /dev/ttyACM1 correspondiente a su brazo líder o seguidor.
2. Establecer los ids de los motores y las tasas de baudios
Cada motor se identifica mediante un id único en el bus. Cuando son nuevos, los motores suelen venir con un id predeterminado de 1. Para que la comunicación funcione correctamente entre los motores y el controlador, primero es necesario asignar un id único y diferente a cada motor. Además, la velocidad a la que se transmiten los datos en el bus está determinada por el baudrate. Para que el controlador y todos los motores puedan comunicarse entre sí, es necesario configurar todos con el mismo baudrate.
Para ello, primero necesitamos conectar individualmente a cada motor con el controlador para establecer estos parámetros. Dado que escribiremos estos parámetros en la sección no volátil de la memoria interna de los motores (EEPROM), solo tendremos que hacerlo una vez.
Si estás reutilizando motores de otro robot, probablemente también necesites realizar este paso, ya que los ids y la velocidad de baudios probablemente no coincidirán.
Seguidor
Conecte el cable USB desde su computadora y la fuente de alimentación a la placa de control del brazo seguidor. Luego, ejecute el siguiente comando o ejecute el ejemplo de la API con el puerto que obtuvo en el paso anterior. También deberá asignar un nombre a su brazo seguidor con el parámetro id.
Para una referencia visual sobre cómo configurar los ids de los motores, consulte este video donde seguimos el proceso para el brazo SO101.
lerobot-setup-motors \
--robot.type=so100_follower \
--robot.port=/dev/tty.usbmodem585A0076841 # <- paste here the port found at previous stepfrom lerobot.robots.so_follower import SO100Follower, SO100FollowerConfig
config = SO100FollowerConfig(
port="/dev/tty.usbmodem585A0076841",
id="my_awesome_follower_arm",
)
follower = SO100Follower(config)
follower.setup_motors()Deberías ver la siguiente instrucción
Connect the controller board to the 'gripper' motor only and press enter.Como se indicó, conecte el motor de la pinza. Asegúrese de que sea el único motor conectado a la placa y de que el propio motor no esté aún encadenado a ningún otro motor. Al presionar [Enter], el script establecerá automáticamente el id y la velocidad de baudios para ese motor.
Troubleshooting
Si obtienes un error en ese punto, revisa tus cables y asegúrate de que estén bien conectados:
- Fuente de alimentación
- Cable USB entre su computadora y la placa de control
- El cable de 3 pines de la placa de control al motor
Si está utilizando una placa de controlador Waveshare, asegúrese de que los dos puentes estén configurados en el canal B (USB).
A continuación, debería ver el siguiente mensaje:
'gripper' motor id set to 6Seguido de la siguiente instrucción:
Connect the controller board to the 'wrist_roll' motor only and press enter.Puede desconectar el cable de 3 pines de la placa de control, pero puede dejarlo conectado al motor de la pinza en el otro extremo, ya que ya estará en el lugar correcto. Ahora, conecte otro cable de 3 pines al motor de giro de la muñeca y conéctelo a la placa de control. Como con el motor anterior, asegúrese de que sea el único motor conectado a la placa y de que el propio motor no esté conectado a ningún otro.
Repita la operación para cada motor según se indica.
Compruebe el cableado en cada paso antes de presionar Enter. Por ejemplo, el cable de alimentación podría desconectarse mientras manipula la placa.
Cuando haya terminado, el script simplemente finalizará, momento en el que los motores estarán listos para su uso. Ahora puede conectar el cable de 3 pines de cada motor al siguiente, y el cable del primer motor (el ‘shoulder pan’ con id=1) a la placa de control, que ahora puede fijarse a la base del brazo.
Líder
Sigue los mismos pasos para el brazo líder.
lerobot-setup-motors \
--teleop.type=so100_leader \
--teleop.port=/dev/tty.usbmodem575E0031751 # <- paste here the port found at previous stepfrom lerobot.teleoperators.so_leader import SO100Leader, SO100LeaderConfig
config = SO100LeaderConfig(
port="/dev/tty.usbmodem585A0076841",
id="my_awesome_leader_arm",
)
leader = SO100Leader(config)
leader.setup_motors()Instrucciones de ensamblaje paso a paso
Retire los engranajes de los 6 motores líderes
Video removing gears
Sigue el video para quitar las engranajes. Debes quitar el engranaje de los motores del brazo líder. Como resultado, solo usarás la codificación de posición del motor y reducirás la fricción para operar el brazo líder con mayor facilidad.
Partes limpias
Retire todo el material de soporte de las piezas impresas en 3D. La forma más sencilla de hacerlo es usar un destornillador pequeño para acceder por debajo del material de soporte.
Orientación adicional
Video assembling arms
Nota: Este video ofrece una guía visual para el ensamblaje de los brazos, pero no especifica cuándo ni cómo realizar el cableado. Insertar los cables con antelación es mucho más fácil que hacerlo después. El primer brazo puede tardar un poco más de 1 hora en ensamblarse, pero una vez que te acostumbres, puedes ensamblar el segundo brazo en menos de 1 hora.
Primer Motor
Paso 2: Insertar cables
- Inserta dos cables en el primer motor.
Paso 3: Instalar en Base
- Coloque el primer motor en la base.
Paso 4: Fijar el motor
- Fije el motor con 4 tornillos. Dos desde la parte inferior y dos desde la parte superior.
Paso 5: Fije el soporte del motor
- Deslice el primer soporte de motor y fíjelo con dos tornillos (uno en cada lado).
Paso 6: Fijar los cuernos del motor
- Instale ambos cuernos del motor, asegurando el cuerno superior con un tornillo. Intente no mover la posición del motor al fijar el cuerno del motor, especialmente en los brazos líderes, donde quitamos las engranajes.
Video adding motor horn
Paso 7: Fijar la parte del hombro
- Conecte un cable a la parte trasera del robot y el otro a la izquierda o hacia usted (vea la foto).
- Adjunta la parte del hombro.
Paso 8: Hombro seguro
- Ajuste la parte del hombro con 4 tornillos en la parte superior y 4 en la inferior (acceda a los orificios inferiores girando el hombro).
Segundo conjunto de motor
Paso 9: Instalar Motor 2
- Deslice el segundo motor desde la parte superior y conecte el cable del motor 1 al motor 2.
Paso 10: Fije el soporte del hombro
- Agregue el soporte del motor del hombro.
- Asegúrese de que el cable que va del motor 1 al motor 2 pase por detrás del soporte, mientras que el otro cable se dirige hacia arriba (vea la foto).
- Esta parte puede ser difícil de ensamblar; puedes usar un banco de trabajo como en la imagen o una configuración similar para empujar la pieza alrededor del motor.

Paso 11: Fijar el motor 2
- Fije el segundo motor con 4 tornillos.
Paso 12: Fijar el claxon del motor
- Conecte ambos bocinas del motor al motor 2, utilice nuevamente el tornillo de la bocina.
Paso 13: Adjuntar la base
- Instale el accesorio base usando 2 tornillos.
Paso 14: Adjuntar el brazo superior
- Fije el brazo superior con 4 tornillos en cada lado.
Tercer conjunto de motor
Paso 15: Instalar Motor 3
- Enruta el cable del motor desde el motor 2 a través del soporte de cables hasta el motor 3 y luego asegura el motor 3 con 4 tornillos.
Paso 16: Fijar el claxon del motor
- Conecte ambos cuernos del motor al motor 3 y fije uno de nuevo con un tornillo de cuerno.
Paso 17: Adjuntar el antebrazo
- Conecte el antebrazo al motor 3 usando 4 tornillos en cada lado.
Ensamblaje del cuarto motor
Paso 18: Instalar Motor 4
- Deslice el motor 4, conecte el cable del motor 3 y fije el cable en su soporte con un tornillo.

Paso 19: Fije el soporte de motor 4
- Instale el cuarto soporte de motor (ajuste ajustado). Asegúrese de que un cable esté enrutado hacia arriba y el cable del motor 3 esté enrutado hacia abajo (vea la foto).
Paso 20: Fijar el motor 4 y conectar la bocina
- Fije el motor 4 con 4 tornillos y conecte sus cuernos de motor, utilice un tornillo de cuerno para uno de ellos.
Ensamblaje de la muñeca
Paso 21: Instalar Motor 5
- Inserte el motor 5 en el soporte de muñeca y fíjelo con 2 tornillos frontales.
Paso 22: Adjuntar muñeca
- Conecte el cable del motor 4 al motor 5. Y ya inserte el otro cable para el actuador.
- Fije la muñeca al motor 4 utilizando 4 tornillos en ambos lados.
Paso 23: Fijar el cuerno de la muñeca
- Instale solo un cuerno de motor en el motor de la muñeca y fíjelo con un tornillo de cuerno.
Configuración del seguidor
Paso 24: Adjuntar el agarre
- Conecte el agarre al motor 5.
Paso 25: Instalar el motor de la pinza
- Inserte el motor de la pinza, conecte el cable del motor desde el motor 5 al motor 6 y fíjelo con 3 tornillos en cada lado.
Paso 26: Fije el cuerno y la garra de la pinza
- Fije las bocinas del motor y vuelva a utilizar un tornillo de bocina.
- Instale la garra de sujeción y fíjela con 4 tornillos en ambos lados.
Paso 27: Montar el controlador
- Conecte el controlador del motor a la parte trasera del robot.

Ensamblaje completo: proceda al ensamblaje del brazo del líder.
Configuración del líder
Para la configuración del líder, realice los pasos 1–23. Asegúrese de haber retirado los engranajes del motor de los motores.
Paso 24: Fijar el soporte del líder
- Monte el soporte del líder en la muñeca y fíjelo con un tornillo.
Paso 25: Adjuntar el mango
- Fije la manivela al motor 5 utilizando 4 tornillos.
Paso 26: Instalar el motor de la pinza
- Inserte el motor de la pinza, fíjelo con 3 tornillos en cada lado, conecte un cuerno de motor usando un tornillo de cuerno y conecte el cable del motor.
Paso 27: Adjuntar disparador
- Fije el disparador del seguidor con 4 tornillos.
Paso 28: Montar el controlador
- Conecte el controlador del motor a la parte trasera del robot.

Calibrar
A continuación, deberá calibrar su robot para asegurarse de que los brazos líder y seguidor tengan los mismos valores de posición cuando se encuentren en la misma posición física. El proceso de calibración es muy importante porque permite que una red neuronal entrenada en un robot funcione en otro.
Seguidor
Ejecute el siguiente comando o ejemplo de API para calibrar el brazo seguidor:
# Use the port of your follower arm, and give the arm a unique name with --robot.id
lerobot-calibrate \
--robot.type=so100_follower \
--robot.port=/dev/tty.usbmodem58760431551 \
--robot.id=my_awesome_follower_armfrom lerobot.robots.so_follower import SO100FollowerConfig, SO100Follower
config = SO100FollowerConfig(
port="/dev/tty.usbmodem585A0076891",
id="my_awesome_follower_arm",
)
follower = SO100Follower(config)
follower.connect(calibrate=False)
follower.calibrate()
follower.disconnect()Unificamos el método de calibración para la mayoría de los robots. Por lo tanto, los pasos de calibración para este brazo SO100 son los mismos que para el Koch y el SO101. Primero, debemos mover el robot a la posición en la que cada articulación se encuentra en el medio de su rango, y luego presionamos Enter. En segundo lugar, movemos todas las articulaciones a través de su rango de movimiento completo. Un video de este mismo proceso para el SO101 como referencia se puede encontrar aquí
Líder
Siga los mismos pasos para calibrar el brazo líder, ejecute el siguiente comando o ejemplo de API:
# Use the port of your leader arm, and give the arm a unique name with --teleop.id
lerobot-calibrate \
--teleop.type=so100_leader \
--teleop.port=/dev/tty.usbmodem58760431551 \
--teleop.id=my_awesome_leader_armfrom lerobot.teleoperators.so_leader import SO100LeaderConfig, SO100Leader
config = SO100LeaderConfig(
port="/dev/tty.usbmodem58760431551",
id="my_awesome_leader_arm",
)
leader = SO100Leader(config)
leader.connect(calibrate=False)
leader.calibrate()
leader.disconnect()Felicidades 🎉, tu robot está listo para aprender una tarea por sí solo. Comienza a entrenarlo siguiendo este tutorial: Primeros pasos con robots del mundo real
Update on GitHubSi tienes alguna pregunta o necesitas ayuda, comunícate con nosotros en Discord.