LeRobot documentation
OpenArm
OpenArm
OpenArm é um braço humanoide de 7 graus de liberdade de código aberto, projetado para pesquisa e implantação em IA física.
Para obter seu OpenArm, montado ou feito por você, e se juntar à comunidade global, explore os fabricantes verificados e certificados ao redor do mundo em openarm.dev.
O que é único?
Design em escala humana: O OpenArm é projetado com proporções semelhantes às humanas, dimensionado para uma pessoa de aproximadamente 160-165 cm de altura. Isso oferece um equilíbrio ideal entre alcance prático e inércia gerenciável para uma operação segura e responsiva.
Arquitetura com foco em segurança: Construído com motores QDD reversíveis e alta compliância, o OpenArm prioriza a interação segura entre humanos e robôs, mantendo capacidades práticas de carga útil (6,0 kg de pico / 4,1 kg nominal) para tarefas do mundo real.
Construído para durabilidade: Os componentes estruturais críticos utilizam construção em alumínio e aço inoxidável, garantindo desempenho robusto para a coleta repetitiva de dados e o uso contínuo em pesquisa.
Totalmente acessível e construível: Cada componente, desde peças de CNC e carcaças impressas em 3D até a fiação elétrica, é projetado para ser adquirível e construível por pesquisadores individuais e laboratórios, com dados completos de fabricação fornecidos.
Prático e acessível: Por US$ 6.500 por um sistema bimanual completo, o OpenArm oferece capacidades de nível de pesquisa por uma fração dos custos dos robôs humanoides tradicionais.
Requisitos da plataforma
**Linux Only**: OpenArm currently only works on Linux. The CAN bus USB adapter does not have macOS drivers and has not been tested on Windows.
Guia de Segurança
Antes de operar o OpenArm, leia o guia de segurança oficial. Pontos principais:
- Instalação segura: Fixe o braço em uma superfície plana e estável com parafusos ou grampos
- Distância segura: Mantenha partes do corpo e objetos fora do alcance de movimento durante a operação
- Equipamento de proteção: Use sempre óculos de segurança; utilize EPIs adicionais conforme necessário
- Limites de carga: Não exceda os limites de carga especificados (6,0 kg de pico / 4,1 kg nominal por braço)
- Parada de emergência: Conheça a localização e o funcionamento do dispositivo de parada de emergência
- Inspecionamento regular: Verifique parafusos frouxos, limites mecânicos danificados, ruídos incomuns e danos à fiação
Configuração de Hardware
Siga a documentação oficial de hardware do OpenArm para:
- Lista de materiais e suprimentos
- Instruções de impressão 3D
- Montagem mecânica
- Fiação elétrica
Os repositórios de hardware estão disponíveis em github.com/enactic/openarm.
Configuração do Bus CAN
O OpenArm usa comunicação via barramento CAN com os motores Damiao. Depois de conectar o adaptador USB do barramento CAN ao seu PC com Linux, siga o guia de motores Damiao e barramento CAN para configurar a interface.
Configuração rápida:
# Setup CAN interfaces
lerobot-setup-can --mode=setup --interfaces=can0,can1
# Test motor communication
lerobot-setup-can --mode=test --interfaces=can0,can1Instale o LeRobot 🤗
Siga nosso Guia de Instalação e, em seguida, instale o suporte do motor Damiao:
pip install -e ".[damiao]"Uso
Braço Seguidor (Robô)
lerobot-calibrate \
--robot.type=openarm_follower \
--robot.port=can0 \
--robot.side=right \
--robot.id=my_openarm_followerfrom lerobot.robots.openarm_follower import OpenArmFollower, OpenArmFollowerConfig
config = OpenArmFollowerConfig(
port="can0",
side="right", # or "left" for left arm
id="my_openarm_follower",
)
follower = OpenArmFollower(config)
follower.connect()
# Read current state
obs = follower.get_observation()
print(obs)
# Send action (position in degrees)
action = {
"joint_1.pos": 0.0,
"joint_2.pos": 0.0,
"joint_3.pos": 0.0,
"joint_4.pos": 45.0,
"joint_5.pos": 0.0,
"joint_6.pos": 0.0,
"joint_7.pos": 0.0,
"gripper.pos": 0.0,
}
follower.send_action(action)
follower.disconnect()Braço Líder (Teleoperador)
O braço líder é usado para teleoperação - movê-lo manualmente para controlar o braço seguidor.
lerobot-calibrate \
--teleop.type=openarm_leader \
--teleop.port=can1 \
--teleop.id=my_openarm_leaderfrom lerobot.teleoperators.openarm_leader import OpenArmLeader, OpenArmLeaderConfig
config = OpenArmLeaderConfig(
port="can1",
id="my_openarm_leader",
manual_control=True, # Disable torque for manual movement
)
leader = OpenArmLeader(config)
leader.connect()
# Read current position (as action to send to follower)
action = leader.get_action()
print(action)
leader.disconnect()Teleoperação
Para teleoperar o OpenArm com controle líder-seguidor:
lerobot-teleoperate \
--robot.type=openarm_follower \
--robot.port=can0 \
--robot.side=right \
--robot.id=my_openarm_follower \
--teleop.type=openarm_leader \
--teleop.port=can1 \
--teleop.id=my_openarm_leaderUse o mesmo --robot.id e --teleop.id que durante a calibração, para que o LeRobot encontre os arquivos de calibração.
Teleoperação Bimanual
Para teleoperar um setup bimanual OpenArm com dois braços líderes e dois braços seguidores:
lerobot-teleoperate \
--robot.type=bi_openarm_follower \
--robot.left_arm_config.port=can0 \
--robot.left_arm_config.side=left \
--robot.right_arm_config.port=can1 \
--robot.right_arm_config.side=right \
--robot.id=my_bimanual_follower \
--teleop.type=bi_openarm_leader \
--teleop.left_arm_config.port=can2 \
--teleop.right_arm_config.port=can3 \
--teleop.id=my_bimanual_leaderRegistrando Dados
Para gravar um conjunto de dados durante a teleoperação:
lerobot-record \
--robot.type=openarm_follower \
--robot.port=can0 \
--robot.side=right \
--robot.id=my_openarm_follower \
--teleop.type=openarm_leader \
--teleop.port=can1 \
--teleop.id=my_openarm_leader \
--dataset.repo_id=${HF_USER}/my_openarm_dataset \
--dataset.single_task="Describe your task here" \
--dataset.fps=30 \
--dataset.num_episodes=10lerobot-record adiciona a data e a hora da sessão ao nome do conjunto de dados, de modo que ele é salvo como my_hf_username/my_openarm_dataset_YYYYMMDD_HHMMSS. Consulte o guia de gravação para informações sobre câmeras, controles de teclado e o restante do fluxo de trabalho.
Opções de Configuração
Configuração de Seguidor
| Parâmetro | Padrão | Descrição |
|---|---|---|
port | - | Interface CAN (por exemplo, can0) |
side | None | Lado do braço: "left", "right" ou None para limites personalizados |
use_can_fd | True | Ative o CAN FD para taxas de dados mais altas |
can_bitrate | 1000000 | Taxa de bits nominal (1 Mbps) |
can_data_bitrate | 5000000 | Taxa de bits dos dados CAN FD (5 Mbps) |
max_relative_target | None | Limite de segurança para posições relativas do alvo |
position_kp | Por articulação | Ganhos proporcionais de controle de posição |
position_kd | Por articulação | Ganhos derivativos de controle de posição |
Configuração do Líder
| Parâmetro | Padrão | Descrição |
|---|---|---|
port | - | Interface CAN (por exemplo, can1) |
manual_control | True | Desativar torque para movimento manual |
use_can_fd | True | Ative o CAN FD para taxas de dados mais altas |
can_bitrate | 1000000 | Taxa de bits nominal (1 Mbps) |
can_data_bitrate | 5000000 | Taxa de bits dos dados CAN FD (5 Mbps) |
Configuração do Motor
O OpenArm usa motores Damiao com a seguinte configuração padrão:
| Conjunto | Tipo de Motor | Enviar ID | ID de Recv |
|---|---|---|---|
| joint_1 (Pan do ombro) | DM8009 | 0x01 | 0x11 |
| joint_2 (Elevação de ombro) | DM8009 | 0x02 | 0x12 |
| joint_3 (Rotação do ombro) | DM4340 | 0x03 | 0x13 |
| joint_4 (Flexão do cotovelo) | DM4340 | 0x04 | 0x14 |
| joint_5 (Rotação do pulso) | DM4310 | 0x05 | 0x15 |
| joint_6 (Pitch do pulso) | DM4310 | 0x06 | 0x16 |
| joint_7 (Rotação do pulso) | DM4310 | 0x07 | 0x17 |
| gripper | DM4310 | 0x08 | 0x18 |
Solução de problemas
Sem resposta dos motores
- Verifique as conexões da fonte de alimentação
- Verify CAN wiring (CAN-H, CAN-L, GND)
- Execute diagnósticos:
lerobot-setup-can --mode=test --interfaces=can0 - Consulte o guia de solução de problemas do Damiao para mais detalhes
Interface CAN não encontrada
Verifique se a interface CAN está configurada:
ip link show can0