Pular para o conteúdo principal

Guia Completo de Treinamento para SO-ARM com AmazingHand

Este documento explica como combinar o braço seguidor SO-ARM101 com a mão hábil AmazingHand e realizar teleoperação usando o LeRobot.

1. Conexão de Hardware

  1. O arquivo STL para o adaptador SOARM-para-AmazingHand está disponível aqui:

lerobot/soarm_amazinghand_link_step_stl/step at soarm_amazinghand · xiehuangbao888/lerobot

  1. Remova a garra original do SOARM.
  1. Instale o adaptador SOARM-para-AmazingHand no braço.
  1. Instale a mão hábil AmazingHand.
  1. Faça a fiação dos dispositivos da seguinte forma:
DispositivoPorta serialDescrição
Braço seguidor SO-101 (servo da garra nº 6 removido)/dev/ttyACM0Apenas os servos das juntas 1~5 são mantidos
Braço líder SO-101 (servo da garra nº 6 mantido)/dev/ttyACM1Abertura/fechamento da garra usado como sinal de entrada
Mão hábil AmazingHand/dev/ttyACM28 servos com IDs 1~8

Se as suas portas seriais forem diferentes, substitua-as pelos nomes reais das portas nos comandos a seguir.


O robô irá:

  • Controlar as 5 juntas do braço seguidor (servos 1~5) via /dev/ttyACM0.
  • Controlar a mão hábil AmazingHand via /dev/ttyACM2.
  • Mapear o gripper.pos do braço líder proporcionalmente para o ângulo de abertura da mão hábil (0 = totalmente aberta, 100 = totalmente fechada).

Os arquivos de calibração são salvos automaticamente em:

~/.cache/huggingface/lerobot/calibration/robots/so101_amazing_hand/<robot.id>.json
~/.cache/huggingface/lerobot/calibration/teleoperators/so101_leader/<teleop.id>.json

2. Ambiente e Conexão

git clone https://github.com/xiehuangbao888/lerobot.git

Mude para o ambiente virtual lerobot existente.

Primeiro, conceda permissões aos dispositivos:

sudo chmod 666 /dev/ttyACM*

Etapa 1: Calibrar o Braço Líder

cd ~/lerobot
conda activate lerobot
python -m lerobot.scripts.lerobot_calibrate \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=amazing_hand_leader

Siga as instruções:

  1. Coloque todas as juntas do braço líder em suas posições médias e pressione Enter.
  2. Mova cada junta até seus alcances máximo e mínimo, por sua vez, e então pressione Enter para finalizar.

Etapa 2: Calibrar o Braço Seguidor

python -m lerobot.scripts.lerobot_calibrate \
--robot.type=so101_amazing_hand \
--robot.port=/dev/ttyACM0 \
--robot.id=amazing_hand_follower \
--robot.hand_port=/dev/ttyACM2

Siga as instruções:

  1. Coloque as 5 juntas do braço seguidor em suas posições médias e pressione Enter.
  2. Mova as 5 juntas até seus alcances máximo e mínimo, por sua vez, e então pressione Enter para finalizar.

Observação: O braço seguidor possui apenas 5 juntas; o servo da garra nº 6 foi removido.

Etapa 3: Executar a Teleoperação

python -m lerobot.scripts.lerobot_teleoperate \
--robot.type=so101_amazing_hand \
--robot.port=/dev/ttyACM0 \
--robot.id=amazing_hand_follower \
--robot.hand_port=/dev/ttyACM2 \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=amazing_hand_leader \
--display_data=true

Você pode personalizar o movimento de preensão. O arquivo relevante está localizado em:

src/lerobot/robots/so_amazing_hand/config_so_amazing_hand.py

3. Coletar Conjunto de Dados com a Mão Hábil

python -m lerobot.scripts.lerobot_record \
--robot.type=so101_amazing_hand \
--robot.port=/dev/ttyACM0 \
--robot.id=amazing_hand_follower \
--robot.hand_port=/dev/ttyACM2 \
--robot.cameras='{
wrist: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30},
top: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}
}' \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=amazing_hand_leader \
--display_data=true \
--dataset.repo_id=seeed/amazing_soarm \
--dataset.num_episodes=20 \
--dataset.single_task="Pick up the cube with the dexterous hand"

Descrição dos parâmetros:

ParâmetroDescrição
--robot.camerasConfiguração da câmera; suporta opencv, realsense, etc. index_or_path é o índice da câmera ou o caminho do fluxo de vídeo.
--dataset.repo_idID do conjunto de dados no Hugging Face, no formato {username}/{dataset_name}.
--dataset.num_episodesNúmero de episódios a serem gravados.
--dataset.single_taskDescrição da tarefa escrita nos metadados do conjunto de dados.
--robot.hand_use_proportional_controlPadrão é true; não é necessário defini-lo explicitamente. Defina como false para comportamento binário de abrir/fechar.

4. Treinamento da Política

lerobot-train \
--dataset.repo_id=seeed/amazing_soarm \
--policy.type=act \
--output_dir=outputs/train/amazing_soarm \
--job_name=amazing_soarm \
--policy.device=cuda \
--wandb.enable=false \
--policy.push_to_hub=false \
--steps=60000 \

5. Avaliação e Implantação

Avaliar a Política Treinada no Robô Real

python -m lerobot.scripts.lerobot_record \
--robot.type=so101_amazing_hand \
--robot.port=/dev/ttyACM0 \
--robot.id=amazing_hand_follower \
--robot.hand_port=/dev/ttyACM2 \
--robot.cameras='{
wrist: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30},
top: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}
}' \
--policy.path=outputs/train/amazing_soarm/checkpoints/last/pretrained_model \
--dataset.repo_id=seeed_val/amazinghand_pick_cube_eval \
--dataset.num_episodes=10 \
--dataset.single_task="Pick up the cube with the dexterous hand" \
--display_data=true
Loading Comments...