Guia de Configuração do OpenArm 101

Siga este caminho desde a abertura da caixa até seu primeiro movimento treinado por IA. Leva cerca de 4–5 horas no total.

Passo 1 de 7
1

Abertura da embalagem e Verificação de Segurança

⏱ ~30 min
⚠️
Leia as Diretrizes de Segurança Primeiro Leia o diretrizes de segurança completas antes de ligar. Nunca coloque a mão no espaço de trabalho enquanto estiver conectado. Sempre desconecte antes de ajustar os cabos.

Antes de Começar

  • Certifique-se de ter um espaço de trabalho claro de 1m × 1m em uma superfície estável
  • Tenha um laptop com Ubuntu 22.04 pronto (VM funciona, nativo preferido)
  • Mantenha o braço energizado desligado durante a inspeção física abaixo

Na Caixa

Unidade de braço OpenArm 101
Fonte de alimentação (24V DC)
Adaptador CAN USB
Hardware de montagem
Cartão de início rápido

Lista de Verificação de Inspeção

  • Todas as 8 articulações giram livremente (sem atrito ou resistência)
  • O roteamento de cabos está intacto ao longo do corpo do braço
  • O conector de energia está intacto
  • O botão de parada de emergência é acessível e funcional
⚠️
Regras de Segurança
  • Nunca alcance o espaço de trabalho enquanto o braço estiver energizado
  • Sempre desconecte antes de ajustar cabos ou fazer alterações de hardware
  • Mantenha crianças e animais de estimação afastados durante a operação
  • Prenda a base a uma superfície estável antes da primeira execução
2

Ambiente de Software e Configuração CAN

⏱ ~60 min

Requisitos do Sistema

  • Ubuntu 22.04 LTS (recomendado) ou 20.04
  • Python 3.10+
  • ROS2 Humble
  • Adaptador USB-CAN (CANable ou compatível — deve suportar CAN FD para a taxa de dados completa de 5 Mbit/s)

Passo 2a — Configuração do ID do Motor

Antes de qualquer configuração de software, cada motor Damiao deve ter seu ID CAN atribuído. Este é um passo único realizado no Windows usando o Depurador USB CAN Damiao.

Ferramenta de Depuração Damiao (Windows): Baixar Debugging_Tools_v.1.6.8.8.exe e usá-lo para definir o ID do transmissor e do receptor de cada motor. Sempre teste um motor de cada vez antes de encadear.

Use a tabela abaixo como a atribuição de ID canônica para cada junta (J1–J8):

Junta ID do Transmissor ID do receptor
J10x010x11
J20x020x12
J30x030x13
J40x040x14
J50x050x15
J60x060x16
J70x070x17
J80x080x18

Passo 2b — Instalar Pacotes OpenArm

No seu computador Ubuntu, instale todos os pacotes necessários do PPA oficial do OpenArm:

sudo apt install -y software-properties-common
sudo add-apt-repository -y ppa:openarm/main
sudo apt update
sudo apt install -y \
  can-utils \
  iproute2 \
  libeigen3-dev \
  libopenarm-can-dev \
  liborocos-kdl-dev \
  liburdfdom-dev \
  liburdfdom-headers-dev \
  libyaml-cpp-dev \
  openarm-can-utils

Passo 2c — Configurar Interface CAN (CAN FD)

Os motores OpenArm suportam tanto CAN 2.0 quanto CAN FD. O CAN FD é recomendado — ele executa a fase de dados a 5 Mbit/s e suporta cargas úteis de até 64 bytes, necessárias para a largura de banda total do motor Damiao.

Caminho Taxa de transmissão nominal transmissão de dados Carga útil
CAN 2.01 Mbit/s8 bytes
CAN FD1 Mbit/s5 Mbit/saté 64 bytes

Recomendado — use o helper OpenArm:

# CAN FD, 1M nominal / 5M data (recommended for single arm)
openarm-can-configure-socketcan can0 -fd -b 1000000 -d 5000000

# CAN 2.0 fallback (1M baud, no FD)
openarm-can-configure-socketcan can0

# 4-arm bimanual setup (can0–can3)
openarm-can-configure-socketcan-4-arms -fd

# Verify the interface is UP
ip link show can0

Comandos de link ip manuais (se não estiver usando o helper):

# CAN 2.0
sudo ip link set can0 down
sudo ip link set can0 type can bitrate 1000000
sudo ip link set can0 up

# CAN FD — 1M nominal / 5M data
sudo ip link set can0 down
sudo ip link set can0 type can bitrate 1000000 dbitrate 5000000 fd on
sudo ip link set can0 up
Uma porta CAN por braço. Uma configuração de braço único usa can0. Uma configuração bimanual usa can0 (líder direito) + can1 (líder esquerdo) + can2 (seguidor direito) + can3 (seguidor esquerdo).

Passo 2d — Comandos de Controle do Motor e Depuração

Use estes cansend comandos para depuração de baixo nível. Monitore o barramento primeiro antes de enviar quaisquer comandos:

# Monitor all CAN frames
candump -x can0

# Change motor baudrate (replace 1 with target motor CAN ID)
openarm-can-change-baudrate --baudrate 5000000 --canid 1 --socketcan can0
# Persist across power cycles (max ~10,000 flash writes per motor — use sparingly)
openarm-can-change-baudrate --baudrate 5000000 --canid 1 --socketcan can0 --flash

controle de motor CAN 2.0 — substituir 001 pelo ID do Transmissor da junta alvo da tabela acima:

# Clear motor error
cansend can0 001#FFFFFFFFFFFFFFFB
# Enable motor
cansend can0 001#FFFFFFFFFFFFFFFC
# Disable motor
cansend can0 001#FFFFFFFFFFFFFFFD

controle de motor CAN FD — note o extra #1 após ## (bandeira BRS):

# Clear motor error
cansend can0 001##1FFFFFFFFFFFFFFFB
# Enable motor
cansend can0 001##1FFFFFFFFFFFFFFFC
# Disable motor
cansend can0 001##1FFFFFFFFFFFFFFFD
⚠️
Teste Um Motor de Cada Vez Ao iniciar pela primeira vez, conecte e teste cada motor individualmente antes de encadear no barramento CAN. Isso isola conflitos de ID e falhas de fiação. O --flash flag persiste mudanças de baudrate — cada motor suporta um máximo de ~10.000 ciclos de gravação de flash.

Status do LED do Motor

Cada motor Damiao possui um LED embutido que indica o estado atual. Use isso como um rápido verificador de saúde após ligar:

Padrão de LED Significado
Verde (fixo)Motor habilitado e pronto
Vermelho (fixo)Motor desativado
Vermelho (piscando)Estado de erro do motor — envie o comando Limpar Erro antes de reativar

Passo 2e — Instalar Pacotes ROS2

sudo apt install ros-humble-ros2-control ros-humble-ros2-controllers
git clone https://github.com/enactic/openarm_ros2
cd openarm_ros2 && colcon build

Instale o SDK Python

pip install roboticscenter
python -c "import roboticscenter; print('SDK ready')"
3

Primeiro Movimento

⏱ ~30 min

Comece com Hardware Falso (Seguro — Sem Movimento Físico)

Sempre verifique na simulação antes de mover o braço real. Execute o arquivo de lançamento com use_fake_hardware:=true — sem conexão CAN necessária:

ros2 launch openarm_ros2 openarm.launch.py use_fake_hardware:=true
ros2 run openarm_ros2 test_trajectory

Abra o RViz para verificar se o braço simulado se move corretamente pela trajetória de teste. Todas as 8 articulações devem se animar suavemente.

Mude para Hardware Real

Uma vez que a simulação pareça correta, conecte o adaptador CAN e ligue o braço:

ros2 launch openarm_ros2 openarm.launch.py

Envie o Primeiro Comando de Movimento (Posição Inicial)

ros2 action send_goal /joint_trajectory_controller/follow_joint_trajectory \
  control_msgs/action/FollowJointTrajectory "{...}"
⚠️
Mantenha sua mão no botão de parada de emergência para a primeira execução real. O braço se moverá para a posição inicial. Esteja pronto para parar imediatamente se o movimento parecer errado.
4

Calibração e Homing

⏱ ~45 min

As posições zero das articulações devem corresponder à realidade física para um controle preciso. Articulações mal calibradas causam falhas de política a montante — não pule esta etapa.

Procedimento de Homing

  1. Ligue com o braço em uma posição segura conhecida (aproximadamente estendido, longe de obstáculos)
  2. Execute o script de homing:
    ros2 run openarm_ros2 homing
  3. O script solicitará que você guie manualmente cada articulação até seu limite — mova-se lentamente
  4. Confirme que a posição zero está salva para cada articulação quando solicitado

Verifique a Calibração

ros2 topic echo /joint_states  # check all positions read near zero
Resultado esperado: Todas as posições das juntas devem estar dentro de ±0,05 rad de zero quando o braço estiver em sua pose de referência. Desvios maiores indicam um problema na junta ou no encoder — repita o procedimento de homing para essa junta.
5

Teleoperação

⏱ ~60 min

Escolha seu Dispositivo de Operador

Controlador VR

Meta Quest / Steam VR — bom para tarefas espaciais

Teclado / Gamepad

Para testes básicos e posicionamento grosseiro

Conectar dispositivo do operador

ros2 launch openarm_ros2 teleop.launch.py operator:=wuji_hand

Verificar Latência

A latência alvo de ponta a ponta é inferior a 50 ms. Execute o teste de latência e verifique:

ros2 run openarm_ros2 latency_check
Alta latência? Adaptadores USB-CAN variam em desempenho. Se a latência exceder 80 ms, tente uma porta USB diferente (prefira USB 3.0), reduza processos em segundo plano ou mude para uma interface CAN nativa.
6

Coleta de Dados

⏱ Em andamento

Escolher Formato de Dados

  • LeRobot (recomendado) — projetado para aprendizado por imitação e treinamento de modelos
  • RLDS — compatível com Open-X-Embodiment e conjuntos de dados entre robôs

Começar a Gravar

ros2 launch openarm_ros2 record.launch.py \
  output_format:=lerobot \
  task_name:=pick_and_place \
  episode_id:=0

Cada episódio é salvo como um arquivo autônomo com estados de juntas, quadros de câmera e rótulos de ação. Execute vários episódios e, em seguida, use a plataforma SVRC para revisar e filtrar.

Lista de Verificação de Qualidade do Episódio

  • Os feeds de câmera estão sincronizados (timestamps dentro de 5 ms)
  • Estados conjuntos registrados em ≥ 50 Hz
  • Rótulos de ação correspondem ao comportamento demonstrado
  • Episódios falhados são marcados para exclusão, não deletados
Manter episódios de falha. Demonstrações falhadas contêm sinal útil para robustez de aprendizado. Marque-os com is_failure:=true — a plataforma pode usá-los para aprendizado contrastivo ou filtragem.
7

Treinamento e Implantação de Modelo de IA

⏱ Em andamento

Modelos Recomendados para OpenArm

  • ACT (Transformador de Blocos de Ação) — melhor para pick-and-place. Prediz blocos de ação a partir de observações da câmera.
  • Política de Difusão — melhor para tarefas ricas em contato. Gera trajetórias suaves através de desnoising.
  • OpenVLA — melhor para tarefas condicionadas por linguagem. Combina compreensão de visão-linguagem com ações de robô.

Ajuste fino do ACT em seus dados

pip install lerobot
python train.py --config act_openarm --data-path ./recordings/

O treinamento em uma GPU de consumidor (RTX 3090 ou melhor) geralmente leva de 2 a 4 horas para 50 episódios. Use o --resume sinalizador para continuar a partir de um ponto de verificação.

Implantar na Edge

ros2 launch openarm_ros2 inference.launch.py \
  model_path:=./checkpoints/best.pt

O nó de inferência lê quadros da câmera, executa o modelo e publica comandos conjuntos na frequência de controle. A latência de inferência alvo é inferior a 20 ms para controle em tempo real.

Você completou todo o caminho de configuração!

Seu OpenArm está calibrado, teleoperado, coletando dados e executando IA. Compartilhe o que você construiu com a comunidade.

← Voltar para o OpenArm Hub Visite o Fórum Compre Outro OpenArm →

Precisa de Ajuda?

O fórum OpenArm é o lugar mais rápido para obter respostas da comunidade e da equipe SVRC.