LeRobot documentation
SO-100
SO-100
Nas etapas abaixo, explicamos como montar o robô SO-100.
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. E informe se é a 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]"Configure os motores
Observação: Diferente do SO-101, os conectores dos motores não são facilmente acessíveis após a montagem do braço, portanto, a etapa de configuração deve ser realizada previamente.
1. Encontre as portas USB associadas a cada braço
Para encontrar a porta de cada adaptador de servo de barramento, execute este script:
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.
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.
Para uma referência visual sobre como definir os ids dos motores, consulte este vídeo, no qual seguimos o processo para o braço 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()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=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()Instruções de Montagem Passo a Passo
Remova as engrenagens dos 6 motores líderes
Video removing gears
Siga o vídeo para a remoção das engrenagens. Você precisa remover a engrenagem dos motores do braço líder. Como resultado, você usará apenas a codificação de posição do motor e reduzirá o atrito para operar o braço líder com mais facilidade.
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.
Orientações adicionais
Video assembling arms
Observação: Este vídeo oferece orientação visual para a montagem dos braços, mas não especifica quando ou como realizar a fiação. Inserir os cabos previamente é muito mais fácil do que fazê-lo depois. O primeiro braço pode levar um pouco mais de 1 hora para ser montado, mas, uma vez que você se acostumar, é possível montar o segundo braço em menos de 1 hora.
Primeiro Motor
Etapa 2: Inserir fios
- Insira dois fios no primeiro motor.
Etapa 3: Instalar na Base
- Coloque o primeiro motor na base.
Etapa 4: Fixar o motor
- Fixe o motor com 4 parafusos. Dois pela parte inferior e dois pela parte superior.
Etapa 5: Fixe o Suporte do Motor
- Deslize sobre o primeiro suporte do motor e fixe-o usando dois parafusos (um em cada lado).
Etapa 6: Fixe os chifres do motor
- Instale os dois chifres do motor, fixando o chifre superior com um parafuso. Tente não mover a posição do motor ao fixar o chifre do motor, especialmente nos braços líderes, onde removemos as engrenagens.
Video adding motor horn
Etapa 7: Fixar a parte do ombro
- Conecte um fio à parte de trás do robô e o outro à esquerda ou em sua direção (veja a foto).
- Anexe a parte do ombro.
Etapa 8: Ombro Seguro
- Aperte a parte do ombro com 4 parafusos na parte superior e 4 na parte inferior (acesse os furos inferiores girando o ombro).
Segundo Conjunto de Motor
Etapa 9: Instale o Motor 2
- Deslize o segundo motor a partir do topo e conecte o fio do motor 1 ao motor 2.
Etapa 10: Fixe o Suporte do Ombro
- Adicione o suporte do motor do ombro.
- Certifique-se de que o fio do motor 1 para o motor 2 passe por trás do suporte, enquanto o outro fio é direcionado para cima (veja a foto).
- Esta parte pode ser apertada para montar; você pode usar um banco de trabalho como na imagem ou uma configuração semelhante para empurrar a parte ao redor do motor.

Etapa 11: Fixar o Motor 2
- Prenda o segundo motor com 4 parafusos.
Etapa 12: Fixe a buzina do motor
- Conecte os dois bocal de motor ao motor 2, novamente usando o parafuso do bocal.
Etapa 13: Fixar a base
- Instale o anexo base usando 2 parafusos.
Etapa 14: Anexe o braço superior
- Fixe o braço superior com 4 parafusos em cada lado.
Terceiro Conjunto do Motor
Etapa 15: Instale o Motor 3
- Roteie o cabo do motor do motor 2 através do suporte de cabo até o motor 3, em seguida, fixe o motor 3 com 4 parafusos.
Etapa 16: Fixe a buzina do motor
- Conecte os dois bocal de motor ao motor 3 e fixe um novamente com um parafuso de bocal.
Etapa 17: Acoplar o antebraço
- Conecte o antebraço ao motor 3 usando 4 parafusos em cada lado.
Quarto Conjunto de Motor
Etapa 18: Instalar o Motor 4
- Deslize o motor 4, conecte o cabo do motor 3 e fixe o cabo em seu suporte com um parafuso.

Etapa 19: Fixe o Suporte do Motor 4
- Instale o quarto suporte do motor (ajuste firme). Certifique-se de que um fio é direcionado para cima e o fio do motor 3 é direcionado para baixo (veja a foto).
Etapa 20: Fixe o Motor 4 & Anexe a Buzina
- Prenda o motor 4 com 4 parafusos e anexe seus chifres de motor, usando um parafuso de chifre para cada um.
Montagem do Punho
Etapa 21: Instale o Motor 5
- Insira o motor 5 no suporte do pulso e fixe-o com 2 parafusos frontais.
Etapa 22: Anexar Punho
- Conecte o fio do motor 4 ao motor 5. E já insira o outro fio para a garra.
- Fixe o pulso ao motor 4 usando 4 parafusos em ambos os lados.
Etapa 23: Fixar o Chifre do Pulso
- Instale apenas um chifre de motor no motor do pulso e fixe-o com um parafuso de chifre.
Configuração de Seguidor
Etapa 24: Acoplar o Garfo
- Conecte o garfo ao motor 5.
Etapa 25: Instale o motor do garfo
- Insira o motor do garfo, conecte o fio do motor do motor 5 ao motor 6 e fixe-o com 3 parafusos em cada lado.
Etapa 26: Fixe o Chifre e a Garra do Garra
- Fixe os chifres do motor e, novamente, use um parafuso de chifre.
- Instale a garra e fixe-a com 4 parafusos em ambos os lados.
Etapa 27: Montar o Controlador
- Conecte o controlador do motor à parte traseira do robô.

Montagem concluída – prossiga para a montagem do braço do líder.
Configuração do Líder
Para a configuração do líder, execute as Etapas 1–23. Certifique-se de que removeu as engrenagens do motor dos motores.
Etapa 24: Fixe o Suporte do Líder
- Monte o suporte do líder no punho e fixe-o com um parafuso.
Etapa 25: Anexar alça
- Fixe a alavanca no motor 5 usando 4 parafusos.
Etapa 26: Instale o motor do garfo
- Insira o motor do garfo, fixe-o com 3 parafusos em cada lado, acople um chifre de motor usando um parafuso de chifre e conecte o fio do motor.
Etapa 27: Anexar gatilho
- Fixe o gatilho do seguidor com 4 parafusos.
Etapa 28: Montar o Controlador
- Conecte o controlador do motor à parte traseira do robô.

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=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 o método de calibração para a maioria dos robôs. Assim, as etapas de calibração para este braço SO100 são as mesmas das etapas para o Koch e o SO101. Primeiro, precisamos mover o robô para a posição em que cada junta está no meio do seu intervalo, e então pressionamos Enter. Em seguida, movemos todas as juntas por todo o seu intervalo de movimento. Um vídeo desse mesmo processo para o SO101 como referência pode ser encontrado aqui
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=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()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.