🍎 Classificação de Frutas com J501 Mini e Braço StarAI Viola
🚀 Introdução
Este wiki demonstra como usar o J501 Mini (Jetson AGX Orin) com o braço robótico StarAI Viola para realizar tarefas de classificação de frutas usando o framework LeRobot. O projeto demonstra um fluxo de trabalho de ponta a ponta, desde a coleta de dados até a implantação, permitindo que o robô agarre e organize frutas de forma inteligente.

| J501 Mini | StarAI Viola |
|---|---|
![]() | ![]() |
O que você vai aprender:
- 🔧 Configuração de hardware para J501 Mini e braço StarAI Viola
- 💻 Configuração do ambiente de software para LeRobot no Jetson AGX Orin
- 🎯 Coleta de dados e teleoperação para tarefas de classificação de frutas
- 🤖 Treinamento do modelo de política ACT
- 🚀 Implantação do modelo treinado para classificação autônoma de frutas

📚 Este tutorial fornece instruções passo a passo para ajudar você a construir do zero um sistema inteligente de classificação de frutas.
Este wiki é baseado no JetPack 6.2.1 e usa o módulo Jetson AGX Orin.
🛠️ Requisitos de Hardware
Componentes Necessários
- J501 Mini com módulo Jetson AGX Orin
- Braço seguidor StarAI Viola (6+1 DoF)
- Braço líder StarAI Violin (6+1 DoF) para teleoperação
- 2x câmeras USB (640x480 @ 30fps recomendado)
- Uma câmera montada no punho
- Uma câmera de visualização em terceira pessoa
- Placas de depuração UC-01 (x2, incluídas com os braços)
- Fonte de alimentação de 12V para os braços robóticos
- Cabos USB para comunicação com os braços
- Frutas para demonstração de classificação
Especificações de Hardware
| Componente | Especificação |
|---|---|
| J501 Mini | Jetson AGX Orin, JetPack 6.2.1 |
| Viola Follower | 6+1 DoF, 470mm de alcance, 300g de carga útil |
| Violin Leader | 6+1 DoF, 470mm de alcance, teleoperação |
| Câmeras | USB, 640x480 @ 30fps, formato MJPG |
| Alimentação | 12V 10A para cada braço |
💻 Configuração do Ambiente de Software
Pré-requisitos
- Ubuntu 22.04 (no J501 Mini com JetPack 6.2.1)
- Python 3.10
- CUDA 12+
- PyTorch 2.6+ (versão GPU)
Instalar o Miniconda
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh
chmod +x Miniconda3-latest-Linux-aarch64.sh
./Miniconda3-latest-Linux-aarch64.sh
source ~/.bashrc
Criar Ambiente LeRobot
# Create conda environment
conda create -y -n lerobot python=3.10 && conda activate lerobot
# Clone LeRobot repository
git clone https://github.com/Seeed-Projects/lerobot.git ~/lerobot
cd ~/lerobot
# Install ffmpeg
conda install ffmpeg -c conda-forge
Instalar PyTorch e Torchvision para Jetson
Para dispositivos Jetson, você precisa instalar a versão GPU do PyTorch e Torchvision antes de instalar o LeRobot. Siga este tutorial de instalação do PyTorch para Jetson para instalar PyTorch-gpu e Torchvision.
Instalar LeRobot e Dependências
Após instalar PyTorch-gpu e Torchvision, instale o LeRobot:
cd ~/lerobot && pip install -e .
Para dispositivos Jetson JetPack 6.0+, instale dependências adicionais:
conda install -y -c conda-forge "opencv>=4.10.0.84" # Install OpenCV and other dependencies through conda, this step is only for Jetson Jetpack 6.0+
conda remove opencv # Uninstall OpenCV
pip3 install opencv-python==4.10.0.84 # Then install opencv-python via pip3
conda install -y -c conda-forge ffmpeg
conda uninstall numpy
pip3 install numpy==1.26.0 # This should match torchvision
Instalar Dependências do Motor StarAI
pip install lerobot_teleoperator_bimanual_leader
pip install lerobot_robot_bimanual_follower
Verificar PyTorch e Torchvision
Como instalar o ambiente LeRobot via pip irá desinstalar o PyTorch e o Torchvision originais e instalar as versões para CPU, você precisa fazer uma verificação em Python:
import torch
print(torch.cuda.is_available()) # Should print True
Se o resultado impresso for False, você precisa reinstalar PyTorch e Torchvision de acordo com este tutorial para Jetson.
# Remove brltty if it causes USB port conflicts
sudo apt remove brltty
🔧 Configuração e Calibração de Hardware
Configurar Portas USB
Conecte os braços robóticos e identifique suas portas USB:
cd ~/lerobot
lerobot-find-port
Você deverá ver uma saída como:
- Braço líder:
/dev/ttyUSB0 - Braço seguidor:
/dev/ttyUSB1
Conceda acesso às portas USB:
sudo chmod 666 /dev/ttyUSB*
Posição Inicial dos Braços
Antes da calibração, mova ambos os braços para suas posições iniciais:
| Braço Líder Violin | Braço Seguidor Viola |
|---|---|
![]() | ![]() |
Calibrar o Braço Líder
lerobot-calibrate \
--teleop.type=lerobot_teleoperator_violin \
--teleop.port=/dev/ttyUSB0 \
--teleop.id=my_violin_leader
Mova manualmente cada junta até suas posições máxima e mínima. Pressione Enter para salvar após calibrar todas as juntas.
Calibrar o Braço Seguidor
lerobot-calibrate \
--robot.type=lerobot_robot_viola \
--robot.port=/dev/ttyUSB1 \
--robot.id=my_viola_follower
Os arquivos de calibração são salvos em ~/.cache/huggingface/lerobot/calibration/
Configurar Câmeras
Encontre as portas das suas câmeras:
lerobot-find-cameras opencv
Exemplo de saída:
Camera #0: /dev/video2 (wrist camera)
Camera #1: /dev/video4 (front camera)
Monte as câmeras:
- Câmera de punho: Prenda ao gripper para visão em close-up
- Câmera frontal: Posicione na mesa para visão em terceira pessoa
🎮 Teste de Teleoperação
Teste a configuração com teleoperação antes da coleta de dados:
lerobot-teleoperate \
--robot.type=lerobot_robot_viola \
--robot.port=/dev/ttyUSB1 \
--robot.id=my_viola_follower \
--robot.cameras="{ wrist: {type: opencv, index_or_path: /dev/video2, width: 640, height: 480, fps: 30, fourcc: 'MJPG'}, front: {type: opencv, index_or_path: /dev/video4, width: 640, height: 480, fps: 30, fourcc: 'MJPG'}}" \
--teleop.type=lerobot_teleoperator_violin \
--teleop.port=/dev/ttyUSB0 \
--teleop.id=my_violin_leader \
--display_data=true
Para o treinamento do modelo ACT, os nomes das câmeras devem ser wrist e front. Usar nomes diferentes exigirá modificar o código-fonte.
📊 Coleta de Dados para Classificação de Frutas
Login no Hugging Face (Opcional)
Se você quiser enviar conjuntos de dados para o Hugging Face Hub:
huggingface-cli login --token ${HUGGINGFACE_TOKEN} --add-to-git-credential
HF_USER=$(huggingface-cli whoami | head -n 1)
echo $HF_USER
Gravar Conjunto de Dados de Treinamento
Colete 50 episódios de demonstrações de classificação de frutas:
lerobot-record \
--robot.type=lerobot_robot_viola \
--robot.port=/dev/ttyUSB1 \
--robot.id=my_viola_follower \
--robot.cameras="{ wrist: {type: opencv, index_or_path: /dev/video2, width: 640, height: 480, fps: 30, fourcc: 'MJPG'}, front: {type: opencv, index_or_path: /dev/video4, width: 640, height: 480, fps: 30, fourcc: 'MJPG'}}" \
--teleop.type=lerobot_teleoperator_violin \
--teleop.port=/dev/ttyUSB0 \
--teleop.id=my_violin_leader \
--display_data=true \
--dataset.repo_id=${HF_USER}/fruit_sorting \
--dataset.episode_time_s=30 \
--dataset.reset_time_s=30 \
--dataset.num_episodes=50 \
--dataset.push_to_hub=true \
--dataset.single_task="Sort fruits into containers"
Parâmetros de Gravação
| Parâmetro | Descrição |
|---|---|
--dataset.episode_time_s | Duração de cada episódio (30 segundos) |
--dataset.reset_time_s | Tempo para reiniciar entre episódios (30 segundos) |
--dataset.num_episodes | Número de episódios a serem gravados (50) |
--dataset.push_to_hub | Enviar para o Hugging Face Hub (true/false) |
--dataset.single_task | Descrição da tarefa |
Controles de Teclado Durante a Gravação
- Seta para a direita (→): Pular para o próximo episódio
- Seta para a esquerda (←): Regravar o episódio atual
- ESC: Parar a gravação e salvar o conjunto de dados
Se os controles do teclado não funcionarem, tente: pip install pynput==1.6.8
Reproduzir um Episódio
Teste os dados gravados reproduzindo um episódio:
lerobot-replay \
--robot.type=lerobot_robot_viola \
--robot.port=/dev/ttyUSB1 \
--robot.id=my_viola_follower \
--dataset.repo_id=${HF_USER}/fruit_sorting \
--dataset.episode=0
🎓 Treinando a Política ACT
Configuração de Treinamento
Treine o modelo ACT no seu conjunto de dados coletado:
lerobot-train \
--dataset.repo_id=${HF_USER}/fruit_sorting \
--policy.type=act \
--output_dir=outputs/train/fruit_sorting_act \
--job_name=fruit_sorting_act \
--policy.device=cuda \
--wandb.enable=false \
--policy.repo_id=${HF_USER}/fruit_sorting_policy \
--steps=100000 \
--batch_size=8 \
--eval.batch_size=8 \
--eval.n_episodes=10 \
--eval_freq=5000
Parâmetros de Treinamento
| Parâmetro | Descrição |
|---|---|
--policy.type | Tipo de modelo (act) |
--steps | Total de passos de treinamento (100.000) |
--batch_size | Tamanho do batch de treinamento (8) |
--eval_freq | Frequência de avaliação (a cada 5000 passos) |
--wandb.enable | Ativar registro no Weights & Biases |
Tempo de Treinamento
No J501 Mini (AGX Orin):
- 50 episódios: ~8-10 horas
- 100 episódios: ~16-20 horas
Você pode ativar --wandb.enable=true para monitorar o progresso do treinamento com o Weights & Biases. Certifique-se de executar wandb login primeiro.
Retomar o Treinamento
Se o treinamento for interrompido, retome a partir do último checkpoint:
lerobot-train \
--config_path=outputs/train/fruit_sorting_act/checkpoints/last/pretrained_model/train_config.json \
--resume=true \
--steps=200000
🚀 Implantação e Avaliação
Avaliar o Modelo Treinado
Execute episódios de avaliação para testar a política treinada:
lerobot-record \
--robot.type=lerobot_robot_viola \
--robot.port=/dev/ttyUSB1 \
--robot.id=my_viola_follower \
--robot.cameras="{ wrist: {type: opencv, index_or_path: /dev/video2, width: 640, height: 480, fps: 30, fourcc: 'MJPG'}, front: {type: opencv, index_or_path: /dev/video4, width: 640, height: 480, fps: 30, fourcc: 'MJPG'}}" \
--display_data=false \
--dataset.repo_id=${HF_USER}/eval_fruit_sorting \
--dataset.single_task="Sort fruits into containers" \
--dataset.num_episodes=10 \
--policy.path=outputs/train/fruit_sorting_act/checkpoints/last/pretrained_model
Operação Autônoma
Uma vez treinado, o robô pode classificar frutas de forma autônoma. O vídeo abaixo demonstra o fluxo completo de trabalho de classificação de frutas usando a política ACT treinada no J501 Mini com o braço StarAI Viola:
Destaques da Demo:
- O robô identifica e pega diferentes frutas de forma autônoma
- Movimentos suaves e precisos aprendidos a partir de demonstrações de teleoperação
- Classifica as frutas com sucesso em recipientes designados
- Demonstra a eficácia da política ACT treinada no J501 Mini
Para executar a classificação autônoma de frutas:
- Coloque as frutas na área de trabalho
- Execute o comando de avaliação mostrado acima
- O robô executará o comportamento aprendido para pegar e classificar as frutas
🎯 Dicas para Melhor Desempenho
Boas Práticas de Coleta de Dados
-
Ambiente Consistente
- Mantenha as condições de iluminação estáveis
- Minimize mudanças de fundo
- Use uma disposição consistente das frutas
-
Qualidade Acima de Quantidade
- Colete demonstrações suaves e deliberadas
- Evite movimentos bruscos
- Garanta pegadas bem-sucedidas nos dados de treinamento
-
Posicionamento da Câmera
- Mantenha ângulos de câmera consistentes
- Garanta boa visibilidade das frutas e do gripper
- Evite movimento da câmera durante a gravação
Otimização do Treinamento
-
Tamanho do Conjunto de Dados
- Comece com 50 episódios
- Adicione mais dados se o desempenho for insuficiente
- 100-200 episódios são normalmente suficientes para tarefas simples
-
Ajuste de Hiperparâmetros
- Ajuste o tamanho do batch com base na memória da GPU
- Aumente os passos de treinamento para melhor convergência
- Monitore as métricas de avaliação
-
Consistência do Ambiente
- Faça a implantação em condições semelhantes às do treinamento
- Mantenha a iluminação consistente
- Use tipos de frutas e recipientes semelhantes
🔧 Solução de Problemas
Problemas Comuns
Porta USB Não Detectada
# Remove brltty
sudo apt remove brltty
# Check USB devices
lsusb
sudo dmesg | grep ttyUSB
# Grant permissions
sudo chmod 777 /dev/ttyUSB*
Câmera Não Funciona
- Não conecte câmeras através de hub USB
- Use conexão USB direta
- Verifique o índice da câmera com
lerobot-find-cameras opencv
Treinamento Sem Memória Suficiente
- Reduza o tamanho do batch:
--batch_size=4 - Reduza a resolução da imagem
- Feche outros aplicativos
Baixo Desempenho de Inferência
- Colete mais dados de treinamento
- Garanta um ambiente consistente
- Verifique o posicionamento da câmera
- Verifique a precisão da calibração
📚 Referências
- 🔗 Documentação do LeRobot
- 🔗 Wiki do Braço StarAI
- 🔗 Documentação do J501 Mini
- 🔗 Artigo do ACT
- 🔗 JetPack SDK
🤝 Suporte Técnico & Discussão de Produtos
Obrigado por escolher nossos produtos! Estamos aqui para fornecer diferentes tipos de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.



