LeRobot documentation
SO-101
SO-101

En los pasos a continuación, explicamos cómo ensamblar nuestro robot insignia, el SO-101.
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. También incluye 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]"Instrucciones de ensamblaje paso a paso
El brazo seguidor utiliza 6x motores STS3215 con una relación de transmisión de 1/345. El líder, sin embargo, utiliza tres motores con relaciones de transmisión diferentes para asegurarse de que pueda soportar su propio peso y de que pueda moverse sin requerir mucha fuerza. El motor necesario para cada articulación se muestra en la tabla siguiente.
| Eje del brazo líder | Motor | Relación de transmisión |
|---|---|---|
| Base / Hombro Pan | 1 | 1 / 191 |
| Elevación de hombros | 2 | 1 / 345 |
| Flexión del codo | 3 | 1 / 191 |
| Flexión de muñeca | 4 | 1 / 147 |
| Wrist Roll | 5 | 1 / 147 |
| Gripper | 6 | 1 / 147 |
Configura los motores
1. Encuentra los puertos USB asociados con cada brazo
Para encontrar el puerto de cada adaptador de servos de bus, conecte MotorBus a su computadora mediante USB y alimentación. Ejecute el siguiente script y desconecte MotorBus cuando se le solicite:
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.
El video de abajo muestra la secuencia de pasos para configurar los ids de los motores.
Video de configuración de motores
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.
lerobot-setup-motors \
--robot.type=so101_follower \
--robot.port=/dev/tty.usbmodem585A0076841 # <- paste here the port found at previous stepfrom lerobot.robots.so_follower import SO101Follower, SO101FollowerConfig
config = SO101FollowerConfig(
port="/dev/tty.usbmodem585A0076841",
id="my_awesome_follower_arm",
)
follower = SO101Follower(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=so101_leader \
--teleop.port=/dev/tty.usbmodem575E0031751 # <- paste here the port found at previous stepfrom lerobot.teleoperators.so_leader import SO101Leader, SO101LeaderConfig
config = SO101LeaderConfig(
port="/dev/tty.usbmodem585A0076841",
id="my_awesome_leader_arm",
)
leader = SO101Leader(config)
leader.setup_motors()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.
Se recomienda instalar un cable de 3 pines en el motor después de colocarlos y antes de continuar con el ensamblaje.
Articulación 1
- Instale ambos bocinas de motor. Fije la bocina superior con un tornillo M3x6mm. No se requieren tornillos para la bocina inferior.
- Coloque el primer motor en la base.
- Fije el motor con 4 tornillos M2x6mm (los tornillos más pequeños). Dos desde arriba y dos desde abajo.
- Deslice el primer soporte de motor y fíjelo con dos tornillos M2x6mm (uno en cada lado).
- Adjunta la parte del hombro.
- Ajuste la parte del hombro con 4 tornillos M3x6mm en la parte superior y 4 tornillos M3x6mm en la parte inferior
- Agregue el soporte del motor del hombro.
Conjunto 2
- Instale ambos bocinas de motor. Fije la bocina superior con un tornillo M3x6mm. No se requieren tornillos para la bocina inferior.
- Deslice el segundo motor desde la parte superior.
- Fije el segundo motor con 4 tornillos M2x6mm.
- Fije el brazo superior con 4 tornillos M3x6mm en cada lado.
Conjunto 3
- Instale ambos bocinas de motor. Fije la bocina superior con un tornillo M3x6mm. No se requieren tornillos para la bocina inferior.
- Inserte el motor 3 y fíjelo con 4 tornillos M2x6mm.
- Conecte el antebrazo al motor 3 usando 4 tornillos M3x6mm en cada lado.
Conjunto 4
- Instale ambos bocinas de motor. Fije la bocina superior con un tornillo M3x6mm. No se requieren tornillos para la bocina inferior.
- Soporte deslizante para motor 4.
- Deslizar en el motor 4.
- Fije el motor 4 con 4 tornillos M2x6mm.
Conjunto 5
- Inserte el motor 5 en el soporte de muñeca y fíjelo con 2 tornillos frontales M2x6mm.
- Instale solo un cuerno de motor en el motor de la muñeca y fíjelo con un tornillo de cuerno M3x6mm.
- Fije la muñeca al motor 4 utilizando 4 tornillos M3x6mm en ambos lados.
Mandíbula / Asa
- Fije el agarre al motor 5 y conéctelo al cuerno del motor en la muñeca utilizando 4 tornillos M3x6mm.
- Inserte el motor de la pinza y fíjelo con 2 tornillos M2x6mm en cada lado.
- Instale ambos cuernos de motor en el motor de la pinza. Fije el cuerno superior con un tornillo M3x6mm; no se requieren tornillos para el cuerno inferior.
- Instale la garra de sujeción y fíjela con 4 tornillos M3x6mm en ambos lados.
- Monte el soporte del líder en la muñeca y fíjelo con 4 tornillos M3x6mm.
- Fije el mango al soporte del líder con 1 tornillo M2x6mm.
- Inserte el motor de la pinza, fíjelo con 2 tornillos M2x6mm en cada lado y conecte un cuerno de motor utilizando un tornillo de cuerno M3x6mm.
- Fije el disparador del seguidor con 4 tornillos M3x6mm.
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=so101_follower \
--robot.port=/dev/tty.usbmodem58760431551 \
--robot.id=my_awesome_follower_armfrom lerobot.robots.so_follower import SO101FollowerConfig, SO101Follower
config = SO101FollowerConfig(
port="/dev/tty.usbmodem585A0076891",
id="my_awesome_follower_arm",
)
follower = SO101Follower(config)
follower.connect(calibrate=False)
follower.calibrate()
follower.disconnect()El video de abajo muestra cómo realizar la calibración. Primero, debe mover el robot a la posición en la que todas las articulaciones estén en el medio de sus rangos. Luego, después de presionar enter, debe mover cada articulación a través de su rango de movimiento completo.
Video de calibración
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=so101_leader \
--teleop.port=/dev/tty.usbmodem58760431551 \
--teleop.id=my_awesome_leader_armfrom lerobot.teleoperators.so_leader import SO101LeaderConfig, SO101Leader
config = SO101LeaderConfig(
port="/dev/tty.usbmodem58760431551",
id="my_awesome_leader_arm",
)
leader = SO101Leader(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.