LeRobot documentation
SO-101
SO-101

Nas etapas abaixo, explicamos como montar nosso robô principal, o SO-101.
Obter as peças
Siga este README. Ele contém a lista de materiais, com um link para adquirir as peças, bem como as instruções para imprimir as peças em 3D. Ele também oferece orientações caso seja sua primeira vez imprimindo ou se você não possui uma impressora 3D.
Instale o LeRobot 🤗
Para instalar o LeRobot, siga nosso Guia de Instalação
Além dessas instruções, você precisa instalar o SDK da Feetech (se você instalou o LeRobot a partir do PyPI, execute pip install 'lerobot[feetech]' em vez disso):
pip install -e ".[feetech]"Instruções de Montagem Passo a Passo
O braço seguidor usa 6x motores STS3215 com redução de 1/345. O líder, no entanto, usa três motores com reduções diferentes para garantir que ele possa suportar seu próprio peso e que possa ser movido sem exigir muita força. Qual motor é necessário para qual junta é mostrado na tabela abaixo.
| Eixo do braço líder | Motor | Relação de Transmissão |
|---|---|---|
| Base / Ombro | 1 | 1 / 191 |
| Levantamento de Ombros | 2 | 1 / 345 |
| Flexão de cotovelo | 3 | 1 / 191 |
| Flexão do Punho | 4 | 1 / 147 |
| Wrist Roll | 5 | 1 / 147 |
| Gripper | 6 | 1 / 147 |
Configure os motores
1. Encontre as portas USB associadas a cada braço
Para encontrar a porta de cada adaptador de servo de barramento, conecte o MotorBus ao seu computador via USB e energia. Execute o seguinte script e desconecte o MotorBus quando solicitado:
lerobot-find-port
Exemplo de saída:
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.Onde a porta encontrada é: /dev/tty.usbmodem575E0032081, correspondente ao seu braço líder ou seguidor.
No Linux, você pode precisar conceder acesso às portas USB executando:
sudo chmod 666 /dev/ttyACM0
sudo chmod 666 /dev/ttyACM1Exemplo de saída:
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.Onde a porta encontrada é: /dev/ttyACM1, correspondente ao seu braço líder ou seguidor.
2. Defina os ids e as taxas de baud dos motores
Cada motor é identificado por um id único no barramento. Quando novos, os motores geralmente vêm com um id padrão de 1. Para que a comunicação funcione corretamente entre os motores e o controlador, primeiro precisamos definir um id único e diferente para cada motor. Além disso, a velocidade na qual os dados são transmitidos no barramento é determinada pelo baudrate. Para que se comuniquem, o controlador e todos os motores precisam ser configurados com o mesmo baudrate.
Para isso, primeiro precisamos nos conectar a cada motor individualmente com o controlador para definir esses parâmetros. Como escreveremos esses parâmetros na seção não volátil da memória interna dos motores (EEPROM), precisaremos fazer isso apenas uma vez.
Se você estiver reaproveitando motores de outro robô, provavelmente também precisará executar esta etapa, pois os ids e o baudrate provavelmente não corresponderão.
O vídeo abaixo mostra a sequência de etapas para definir os ids dos motores.
Vídeo de configuração dos motores
Seguidor
Conecte o cabo USB do seu computador e da fonte de alimentação à placa controladora do braço seguidor. Em seguida, execute o comando a seguir ou execute o exemplo da API com a porta obtida na etapa anterior. Você também precisará dar um nome ao seu braço seguidor com o 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()Você deve ver a seguinte instrução
Connect the controller board to the 'gripper' motor only and press enter.Conforme instruído, conecte o motor do garfo. Certifique-se de que ele seja o único motor conectado à placa e de que o próprio motor ainda não esteja em cascata com nenhum outro motor. Ao pressionar [Enter], o script definirá automaticamente o id e a taxa de baud para esse motor.
Troubleshooting
Se você receber um erro nesse ponto, verifique seus cabos e certifique-se de que estão conectados corretamente:
- Fonte de alimentação
- Cabo USB entre seu computador e a placa controladora
- O cabo de 3 pinos da placa controladora ao motor
Se você estiver usando uma placa controladora Waveshare, verifique se os dois jumpers estão configurados no canal B (USB).
Em seguida, você deve ver a seguinte mensagem:
'gripper' motor id set to 6Seguido pela próxima instrução:
Connect the controller board to the 'wrist_roll' motor only and press enter.Você pode desconectar o cabo de 3 pinos da placa controladora, mas pode deixá-lo conectado ao motor do garra na outra extremidade, pois ele já estará no lugar certo. Agora, conecte outro cabo de 3 pinos ao motor de rotação do pulso e conecte-o à placa controladora. Assim como com o motor anterior, verifique se é o único motor conectado à placa e que o próprio motor não está conectado a nenhum outro.
Repita a operação para cada motor conforme instruído.
Verifique a fiação em cada etapa antes de pressionar Enter. Por exemplo, o cabo de alimentação pode se desconectar ao manipular a placa.
Quando você terminar, o script simplesmente será finalizado, momento em que os motores estarão prontos para uso. Agora, você pode conectar o cabo de 3 pinos de cada motor ao próximo e o cabo do primeiro motor (o ‘shoulder pan’ com id=1) à placa controladora, que agora pode ser fixada na base do braço.
Líder
Faça os mesmos passos para o braço 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 limpas
Remova todo o material de suporte das peças impressas em 3D. A maneira mais fácil de fazer isso é usar uma pequena chave de fenda para acessar a parte inferior do material de suporte.
É aconselhável instalar um cabo de 3 pinos no motor após posicioná-los antes de continuar a montagem.
Junção 1
- Instale os dois bichos de motor. Fixe o bicho superior com um parafuso M3x6mm. Não são necessários parafusos para o bicho inferior.
- Coloque o primeiro motor na base.
- Fixe o motor com 4 parafusos M2x6mm (os parafusos menores). Dois pela parte superior e dois pela parte inferior.
- Deslize sobre o primeiro suporte do motor e fixe-o usando dois parafusos M2x6mm (um em cada lado).
- Anexe a parte do ombro.
- Aperte a parte do ombro com 4 parafusos M3x6mm na parte superior e 4 parafusos M3x6mm na parte inferior
- Adicione o suporte do motor do ombro.
Junção 2
- Instale os dois bichos de motor. Fixe o bicho superior com um parafuso M3x6mm. Não são necessários parafusos para o bicho inferior.
- Deslize o segundo motor a partir do topo.
- Fixe o segundo motor com 4 parafusos M2x6mm.
- Fixe o braço superior com 4 parafusos M3x6mm em cada lado.
Conjunto 3
- Instale os dois bichos de motor. Fixe o bicho superior com um parafuso M3x6mm. Não são necessários parafusos para o bicho inferior.
- Insira o motor 3 e fixe-o usando 4 parafusos M2x6mm.
- Conecte o antebraço ao motor 3 usando 4 parafusos M3x6mm em cada lado.
Conjunto 4
- Instale os dois bichos de motor. Fixe o bicho superior com um parafuso M3x6mm. Não são necessários parafusos para o bicho inferior.
- Suporte deslizante do motor 4.
- Deslize para o motor 4.
- Fixe o motor 4 com 4 parafusos M2x6mm.
Conjunto 5
- Insira o motor 5 no suporte do pulso e fixe-o com 2 parafusos frontais M2x6mm.
- Instale apenas um chifre de motor no motor do pulso e fixe-o com um parafuso de chifre M3x6mm.
- Fixe o pulso ao motor 4 usando 4 parafusos M3x6mm em ambos os lados.
Gancho / Alça
- Conecte o garfo ao motor 5 e fixe-o no chifre do motor no pulso usando 4 parafusos M3x6mm.
- Insira o motor do garfo e fixe-o com 2 parafusos M2x6mm em cada lado.
- Instale os dois chifres de motor no motor da garra. Fixe o chifre superior com um parafuso M3x6mm; não são necessários parafusos para o chifre inferior.
- Instale a garra e fixe-a com 4 parafusos M3x6mm em ambos os lados.
- Monte o suporte do líder no punho e fixe-o com 4 parafusos M3x6mm.
- Fixe a alça no suporte do líder usando 1 parafuso M2x6mm.
- Insira o motor do garfo, fixe-o com 2 parafusos M2x6mm em cada lado e acople um chifre de motor usando um parafuso de chifre M3x6mm.
- Fixe o gatilho do seguidor com 4 parafusos M3x6mm.
Calibrar
Em seguida, você precisará calibrar seu robô para garantir que os braços líder e seguidor tenham os mesmos valores de posição quando estiverem na mesma posição física. O processo de calibração é muito importante, pois permite que uma rede neural treinada em um robô funcione em outro.
Seguidor
Execute o seguinte comando ou exemplo de API para calibrar o braço 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()O vídeo abaixo mostra como realizar a calibração. Primeiro, você precisa mover o robô para a posição em que todas as juntas estão no meio de seus intervalos. Em seguida, após pressionar enter, você deve mover cada junta por todo o seu intervalo de movimento.
Vídeo de calibração
Líder
Faça os mesmos passos para calibrar o braço líder, execute o seguinte comando ou exemplo 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()Parabéns 🎉, seu robô está pronto para aprender uma tarefa por conta própria. Comece o treinamento seguindo este tutorial: Primeiros passos com robôs do mundo real
Update on GitHubSe você tiver alguma dúvida ou precisar de ajuda, entre em contato no Discord.