10. Calibração e teleoperação de líder e seguidor
Capítulo 10 do curso para iniciantes em SO-ARM Physical AI — calibre os braços líder e seguidor com lerobot-calibrate, entenda o mapeamento de juntas e os arquivos de calibração, e rode sua primeira teleoperação mestre-escravo.
Retire itens de valor e pessoas alheias a até 1 metro do espaço de trabalho. Antes deste capítulo, confirme que o braço está bem fixado e que energia e cabos estão conectados corretamente.
10.1 Por que a calibração do braço completo importa
10.1 Por que a calibração do braço completo importa
O Capítulo 6 gravou IDs e baud rates; o Capítulo 7 verificou os neutros. A calibração do braço completo é o último passo: ela aprende, para cada junta, o mapeamento entre a leitura bruta do servo e um ângulo físico, de modo que líder e seguidor reportem valores idênticos quando coincidem fisicamente.
Ela é essencial por um motivo mais profundo: permite que uma rede treinada num SO-ARM funcione em outro. Como todo SO-ARM calibrado concorda sobre o que é "zero grau" e "o meio do curso", um dataset gravado no seu seguidor vale no meu.
Recapitulando as regras de energia: na edição Standard do SO101 toda a alimentação é 5V. Na edição Pro do SO101, calibre e opere o líder com fonte de 5V e o seguidor com fonte de 12V em cada passo.
10.2 Calibrar o braço seguidor
10.2 Calibrar o braço seguidor
Conecte os 6 servos pelos cabos de 3 fios e a placa, conceda permissões e execute:
sudo chmod 666 /dev/ttyACM*
lerobot-calibrate \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_awesome_follower_arm # <- dê um nome único ao robô
O procedimento (mostrado no vídeo):
- Posição média: leve o braço para que cada junta fique no meio do curso (aproximadamente a postura "reto para cima") e pressione Enter;
- Curso completo: mova cada junta pelo curso todo, uma por vez, enquanto a ferramenta amostra o mínimo/máximo.
Por atualizações do repositório do LeRobot, é normal o terminal não receber sinal do servo 5 durante a calibração do braço líder. Pode continuar a operação.
10.3 Calibrar o braço líder
10.3 Calibrar o braço líder
Os mesmos dois passos (posição média, depois curso completo por junta), com as chaves do teleoperator:
lerobot-calibrate \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=my_awesome_leader_arm # <- dê um nome único ao líder
Se aparecer Could not connect on port '/dev/ttyACM0'. Make sure you are using the correct port. Try running lerobot-find-port, conceda permissões de novo com sudo chmod 666 /dev/ttyACM*.
Onde a calibração mora (e como refazer)
Os arquivos de calibração ficam como JSON em ~/.cache/huggingface/lerobot/calibration/robots/ e ~/.cache/huggingface/lerobot/calibration/teleoperators/. Para recalibrar:
- Opção 1 — apagar os arquivos para começar limpo:
rm -rf ~/.cache/huggingface/lerobot/calibration/robots
rm -rf ~/.cache/huggingface/lerobot/calibration/teleoperators
- Opção 2 — responder ao prompt. Rodando o comando num braço já calibrado aparece:
Press ENTER to use provided calibration file associated with the id my_awesome_leader_arm, or type 'c' and press ENTER to run calibration:
Digite c + Enter para recalibrar; só Enter mantém os dados existentes.
Quando a calibração falha: Magnitude ... exceeds 2047
Se a calibração ou teleoperação lançar Magnitude 30841 exceeds 2047 (max for sign_bit_index=11), o offset zero de um servo está anormal. Desligue, reinicie o braço e tente de novo; se persistir, faça antes uma calibração de posição média — com a ferramenta do Capítulo 7 ou com os scripts do Seeed_RoboController:
git clone https://github.com/Seeed-Projects/Seeed_RoboController.git
cd Seeed_RoboController
pip install -r requirements.txt
python -m src.tools.servo_disable # (opcional) desabilita o torque para mover juntas à mão
python -m src.tools.servo_middle_calibration # grava a posição atual como 2048
python -m src.tools.servo_center_test # move para 2048 para verificar
Depois volte ao lerobot-calibrate e refaça a calibração completa.
10.4 Mapeamento de juntas: direção, curso e garras
10.4 Mapeamento de juntas: direção, curso e garras
Depois de calibrar, verifique manualmente:
- Direção: girar a junta 1 do líder no sentido horário deve girar a 1 do seguidor no horário. Se alguma junta for ao contrário, a calibração foi feita com o braço em postura espelhada — refaça essa junta.
- Curso: leve cada junta do líder aos dois limites; o seguidor deve atingir os limites correspondentes sem forçar contra as peças impressas.
- Garras: feche totalmente o punho do líder — a garras do seguidor deve fechar totalmente; a abertura total mapeia para abertura total.
Lembre do Capítulo 9: o --robot.id / --teleop.id escolhido aqui fica ligado ao arquivo de calibração. Use exatamente os mesmos ids ao teleoperar, gravar e avaliar depois.
10.5 Iniciar a teleoperação mestre-escravo
10.5 Iniciar a teleoperação mestre-escravo
Agora o momento em que os dois braços viram um sistema só. Conceda permissões e inicie:
sudo chmod 666 /dev/ttyACM*
lerobot-teleoperate \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_awesome_follower_arm \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=my_awesome_leader_arm
O comando teleoperate automaticamente:
- Detecta calibrações faltantes e inicia o procedimento;
- Conecta o robô e o teleoperator e começa a teleoperação.
Diretrizes de segurança na teleoperação
- Sustente o seguidor na primeira vez que o torque ativar — ele salta para a postura calibrada.
- Mova o líder devagar; o seguidor segue com torque total.
- Mantenha os dedos longe da garras do seguidor e dos pontos de pinçamento.
- Se o seguidor atrasar, tremer ou uma junta parar de responder: pare, desligue e confira o cabo de barramento daquele servo (LED apagado indica o cabo frouxo anterior a ele).
10.6 Frequência de controle e latência
10.6 Frequência de controle e latência
De onde vem a latência? Por que é inevitável?
Cada ciclo lê o líder, envia alvos ao seguidor e (depois) lê câmeras. Câmeras USB entregam quadros no próprio ritmo. O ciclo é rápido — dezenas de milissegundos — mas não zero, então movimentos rápidos do líder sempre parecem um pouco suavizados no seguidor. É normal.
O que é a frequência de controle? Dá para configurar?
O LeRobot roda o ciclo num fps configurado (30 por padrão nos fluxos do SO-ARM; o --dataset.fps posterior precisa casar). Se a teleoperação engasgar:
- Evite hubs USB — conecte braços e câmeras direto ao computador;
- Verifique se nenhum outro processo prende as portas seriais;
- Confirme com
lerobot-find-portque nenhum outro dispositivo divide o barramento.
10.7 Prática
10.7 Prática
- Calibre líder e seguidor; encontre os dois JSON em
~/.cache/huggingface/lerobot/calibration/. - Teleopere por 5 minutos: toque os quatro cantos do tapete com a garras e pegue um objeto pequeno.
- Experimente deliberadamente o caminho do erro: rode teleoperate com um
--robot.iderrado e leia o erro — você nunca mais o esquecerá. - Pratique a recalibração pelo prompt
c.
Com a cadeia de controle verificada, o próximo capítulo projeta os dados da sua primeira política.