11. Calibração de Líder e Seguidor e Teleoperação
Capítulo 11 do Curso para Iniciantes em IA Física da Seeed — configuração do ambiente, calibração dos braços seguidor e líder, mapeamento de juntas, segurança na teleoperação, início da teleoperação mestre-escravo, frequência de controle e latência, e prática hands-on.
11.1 Desembalagem, Fiação e Fixação do Braço
11.1 Desembalagem, Fiação e Fixação do Braço
- reBot DM
- reBot RS
11.2 Configuração do Ambiente
11.2 Configuração do Ambiente
Supondo que você já tenha criado um ambiente virtual no Estágio 2, em seguida só precisamos clonar o repositório e instalar o ambiente no ambiente conda que você criou. NÃO use máquina virtual ou WSL; o ideal é instalar o Ubuntu 22.04 diretamente.
Lembre-se: todas as etapas subsequentes devem ser executadas dentro do ambiente virtual e do ambiente lerobot.
Passo 1: Clonar o repositório Seeed LeRobot
mkdir ~/rebot_lerobot
cd ~/rebot_lerobot
git clone https://github.com/Seeed-Projects/lerobot.git
Passo 2: Entrar no ambiente virtual e instalar o LeRobot e os plugins do reBot
conda create -y -n rebot_arm python=3.12
pip install -e ./lerobot
pip install lerobot-teleoperator-rebot-arm-102
pip install lerobot-robot-seeed-b601
pip install motorbridge
Passo 3: Instalar ffmpeg (dependência de codec de vídeo)
conda install ffmpeg -c conda-forge
Notas de versão:
- Por padrão, o ffmpeg 7.X será instalado (suporta o codificador libsvtav1).
- Se você encontrar problemas de compatibilidade de versão, pode especificar o ffmpeg 7.1.1:
conda install ffmpeg=7.1.1 -c conda-forge
- Você pode verificar via
ffmpeg -encoders | grep svtav1se o codificador libsvtav1 é suportado.
Passo 4: Configuração especial para dispositivos NVIDIA Jetson (ignore este passo em um PC comum)
Para dispositivos Jetson JetPack 6.0+ (certifique-se de ter instalado PyTorch-gpu e Torchvision compatíveis com Jetson antes deste passo):
# Install OpenCV and other dependencies via conda (Jetson JetPack 6.0+ only)
conda install -y -c conda-forge "opencv>=4.10.0.84"
# Uninstall OpenCV
conda remove opencv
# Install specific OpenCV version via pip3
pip3 install opencv-python==4.10.0.84
conda install -y -c conda-forge ffmpeg
conda uninstall numpy
# This version must be compatible with Torchvision
pip3 install numpy==1.26.0
Passo 5: Verificar se a GPU do PyTorch está disponível
python3
import torch
print(torch.cuda.is_available()) # Should output True
Digite exit() para sair.
Se a saída for False, você instalou a versão para CPU — é necessário reinstalar o PyTorch.
11.3 Calibrando o Braço Seguidor
11.3 Calibrando o Braço Seguidor
- Em seguida, antes de calibrar, certifique-se de que o robô reBot B601-RS esteja conectado à alimentação e ao cabo de dados.
- Os arquivos de calibração de Líder e Seguidor são armazenados, respectivamente, em
~/.cache/huggingface/lerobot/calibration/robotse~/.cache/huggingface/lerobot/calibration/teleoperators. Para recalibrar, exclua os arquivos correspondentes ou simplesmente execute o comando de calibração — o terminal exibirá: pressione C para recalibrar, pressione Enter para usar o arquivo de calibração existente. - Se você não conseguir se conectar ao seguidor, consulte o Estágio 2 e use a interface do motorbridge para testar se o braço está funcionando corretamente.
- Siga as instruções para mover o braço Seguidor para a posição zero mostrada acima. O braço só precisa ser calibrado uma vez no mesmo computador após a montagem. Abaixo estão os comandos de calibração; consulte a posição zero na imagem (o gripper deve estar totalmente fechado).

Para calibração do Seguidor DM:
sudo chmod 666 /dev/ttyACM*
cd lerobot
lerobot-calibrate \
--robot.type=seeed_b601_dm_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=follower1 \
--robot.can_adapter=damiao
Para calibração do Seguidor RS:
Se o seu sistema ainda não tiver o driver PCAN instalado, consulte esta página: PCAN driver installed
sudo ip link set can0 down 2>/dev/null
sudo ip link set can0 type can bitrate 1000000
sudo ip link set can0 up
cd lerobot
lerobot-calibrate \
--robot.type=seeed_b601_rs_follower \
--robot.port=can0 \
--robot.id=follower1 \
--robot.can_adapter=socketcan
(Opcional) Se você estiver usando Jetson (Jetpack 6.x), execute o seguinte comando para encontrar o número da porta CAN do seu Jetson:
for i in /sys/class/net/can*; do
[ "$(basename "$(readlink -f "$i/device/driver" 2>/dev/null)")" = "pcan" ] && basename "$i"
done
Exemplo de saída:
can2 # Could also be can0, can1, or other CAN number
O número da porta usado em todos os comandos subsequentes do seguidor deve corresponder à saída aqui.
Se o seu Jetson não tiver o PCAN driver installed, a comunicação ficará persistentemente anormal.
11.4 Calibrando o Braço Líder
11.4 Calibrando o Braço Líder
Notas de calibração do Líder reBot 102:
- Quando a calibração começa, a posição atual de cada servo no reBot Arm 102 será redefinida para zero.
joint_ranges(limites de junta) vêm do arquivo de configuraçãoconfig_rebot_arm_102_leader.py, não dos dados de calibração.- Se uma junta parecer sempre presa perto de um limite, verifique primeiro a configuração de
joint_ranges. - As direções das juntas são definidas no arquivo de configuração; se as direções não corresponderem, modifique a configuração em vez de recalibrar.
- O Líder reBot 102 usa um módulo USB-para-UART, geralmente mapeado para
/dev/ttyUSB*. - Use
ls /dev/ttyUSB*para ver o número real da porta.
Na primeira conexão, você pode receber um erro informando que a porta serial /dev/ttyACM0 não pode ser encontrada — isso ocorre porque o brltty está ocupando a porta. Siga estes passos:
sudo dmesg | grep ttyUSB # See 'disconnected' on the last line
sudo apt remove brltty # Remove brltty

Siga as instruções para mover o braço Líder para a posição zero mostrada acima:
sudo chmod 666 /dev/ttyUSB0
lerobot-calibrate \
--teleop.type=rebot_arm_102_leader \
--teleop.port=/dev/ttyUSB0 \
--teleop.id=rebot_arm_102_leader
Mantenha-o parado e pressione Enter até a calibração ser concluída.
11.5 Mapeamento de Juntas: Direção, Alcance e Gripper
11.5 Mapeamento de Juntas: Direção, Alcance e Gripper

11.6 Diretrizes de Segurança para Teleoperação
11.6 Diretrizes de Segurança para Teleoperação

11.7 Iniciando a Teleoperação Mestre-Escravo
11.7 Iniciando a Teleoperação Mestre-Escravo
Durante a teleoperação, se os cabos de alimentação se soltarem, a conexão de energia estiver ruim ou os cabos de sinal se desconectarem, você deve primeiro parar o código, retornar o braço à sua posição inicial zero, então reconectar a alimentação e reiniciar o programa — para evitar que corrupção de dados faça o braço sair de controle e crie perigo.
Teleoperação DM — primeiro conceda permissões às portas seriais:
# leader
sudo chmod 666 /dev/ttyUSB*
# follower
sudo chmod 666 /dev/ttyACM*
Execute a teleoperação:
lerobot-teleoperate \
--robot.type=seeed_b601_dm_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=follower1 \
--robot.can_adapter=damiao \
--teleop.type=rebot_arm_102_leader \
--teleop.port=/dev/ttyUSB0 \
--teleop.id=rebot_arm_102_leader
Teleoperação RS — primeiro conceda permissões às portas seriais:
# leader
sudo chmod 666 /dev/ttyUSB*
# follower
sudo ip link set can0 down 2>/dev/null
sudo ip link set can0 type can bitrate 1000000
sudo ip link set can0 up
Execute a teleoperação:
lerobot-teleoperate \
--robot.type=seeed_b601_rs_follower \
--robot.port=can0 \
--robot.id=follower1 \
--robot.can_adapter=socketcan \
--teleop.type=rebot_arm_102_leader \
--teleop.port=/dev/ttyUSB0 \
--teleop.id=rebot_arm_102_leader
11.8 Frequência de Controle e Latência
11.8 Frequência de Controle e Latência
Se a teleoperação parece "responsiva" depende de duas coisas: quantos loops o circuito de encaminhamento executa por segundo (frequência) e quanto atraso existe entre a sua mão e o braço (latência).
De onde vem a latência? Por que ela é inevitável?

O que é a frequência de controle? Ela pode ser configurada?
O loop de teleoperação é, por padrão, 60 Hz — completando 60 loops por segundo de "ler Leader → mapear → enviar CAN → ler de volta"; cada loop tem um orçamento de tempo de 16,7 ms. Essa frequência pode ser ajustada por meio do parâmetro fps da configuração de teleoperação, mas tenha duas coisas em mente:
- O limite superior é determinado pelo tempo do circuito de hardware, não pelo software. A cadeia acima por si só leva mais de dez milissegundos por loop, então o limite superior prático para este hardware é em torno de 60–100 Hz. Configurar acima disso é inútil: a frequência real não aumentará, e você só verá avisos de estouro de período.
- 60 Hz já está muito acima do necessário. Os movimentos conscientes humanos mais rápidos são apenas 5–10 Hz; 60 Hz é como tirar dez instantâneos de cada pequeno movimento, então a densidade de amostragem cobre totalmente a largura de banda da mão.
11.9 Prática Guiada
11.9 Prática Guiada: Agarrar, Transportar e Posicionar
A teleoperação é estável, mas "conseguir se mover" e "conseguir trabalhar" ainda exigem prática deliberada. A qualidade dos dados no Capítulo 13 depende da sua proficiência atual. Pratique em três níveis:
- Exercício 1: Transferência de objetos sem carga (familiarizar-se com a sensação). Coloque alguns blocos leves na área de trabalho. Prática: mover acima do alvo → descer → fechar o gripper → erguer. Objetivo: 10 repetições sem colisões ou quedas no meio da execução, com cada execução fluindo suavemente, sem hesitação.
- Exercício 2: Transporte e posicionamento (cadeia completa de tarefas). Complete todo o fluxo de trabalho "agarrar → transportar → colocar no recipiente designado". Objetivo: 10 repetições consecutivas com poses iniciais e finais quase idênticas a cada vez.
- Padrão de aprovação: você consegue completar 20 tarefas completas seguidas em um ritmo constante sem se sentir sobrecarregado — então você está pronto para o próximo capítulo.