Guia de Configuração do AGV Damiao

Da abertura da embalagem à condução pelo seu navegador. Abrange segurança na abertura, carregamento, software, teleoperação, navegação autônoma e montagem do braço.

Equipamento pesado — levantamento em equipe necessário. O AGV Damiao é uma plataforma móvel substancial. Sempre use um levantamento em dupla para abrir a embalagem e reposicionar. Certifique-se de que o espaço de trabalho tenha pelo menos 2 m de folga em todas as direções antes de ligar pela primeira vez.
1

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

Inspecione o AGV e prepare o espaço de trabalho

Levantamento em equipe necessário. Use duas pessoas para levantar o AGV de sua caixa de transporte. Levante pela parte inferior do chassi — nunca pelas rodas ou qualquer eletrônica saliente. Coloque a plataforma em uma superfície plana e dura com os freios aplicados (se equipado).
  1. Remova a embalagem. Remova cuidadosamente todas as inserções de espuma, laços de cabo e restrições de transporte. Inspecione as rodas quanto a danos de transporte — as quatro rodas mecanum devem girar livremente à mão.
  2. Inspecione os conectores. Verifique se todos os conectores de cabo no controlador principal estão conectados. A vibração durante o transporte ocasionalmente solta conectores JST ou Deans.
  3. Desimpedimento do espaço de trabalho. Antes de qualquer acionamento, limpe pelo menos 2 m de espaço aberto em todas as direções. O AGV pode acelerar rapidamente — os espectadores devem se afastar durante os testes de movimento inicial.
  4. Parada de emergência. Localize o interruptor principal de corte de energia no chassi. Saiba como alcançá-lo antes de ligar. Para a primeira sessão, mantenha uma mão perto do corte a todo momento.
  5. Verificação da superfície. As rodas mecanum exigem uma superfície plana e dura (concreto, piso de madeira ou azulejo liso) para um desempenho omnidirecional correto. Carpete e superfícies irregulares reduzem significativamente a autoridade de controle lateral.
2

Carregamento da Bateria & Ligação

Carregue completamente o pacote de bateria antes do primeiro uso.

  1. Conecte o carregador. Localize a porta de carga da bateria no chassi do AGV (normalmente um conector grande em forma de barril ou porta XT60). Conecte o carregador de balanceamento incluído. Plugue o carregador em uma tomada aterrada de 110/220V.
  2. Carregue até o máximo. Permita que a bateria carregue completamente antes do primeiro uso — normalmente de 2 a 4 horas, dependendo do estado inicial. O LED do carregador ficará verde (ou parará de piscar) quando estiver completo. Não deixe sem supervisão durante o primeiro carregamento.
  3. Verifique a voltagem da bateria. Após o carregamento, a voltagem da bateria deve estar no nível nominal totalmente carregado (verifique o rótulo do seu pacote de bateria). Use um multímetro ou o display a bordo, se equipado.
  4. Sequência de ativação. Conecte a bateria ao controlador principal. Ative o interruptor de energia principal. O controlador deve inicializar em 5 a 10 segundos — os LEDs indicadores se estabilizarão. Não envie comandos de movimento durante a inicialização.
Segurança da bateria LiPo. Se o AGV usar um pacote de bateria LiPo (comum), nunca descarregue abaixo da voltagem mínima da célula (normalmente 3,0V/célula). Armazene com 50% de carga se não for usado por mais de uma semana. Nunca carregue uma LiPo inchada ou danificada.
3

Software & Pilha de Navegação ROS2

Instale o agente Python e pacotes ROS2 opcionais no seu PC.

A dami_agent.py O script é a principal ponte entre a Plataforma Fearless e o hardware do AGV. Ele requer Python 3.8+ e dois pacotes pip.

# Install dependencies
pip install pyserial websockets

# Confirm your USB-to-TTL adapter appears
ls /dev/ttyUSB*   # Linux

# Add your user to the dialout group (Linux) if you get permission errors
sudo usermod -aG dialout $USER
# Log out and back in for group change to take effect

Conecte o adaptador USB-para-TTL: conecte o pino do adaptador ao TX controlador principal do AGV. UART5_RX (pino PD2)Conecte GND a GND. NÃO conecte o pino RX do adaptador ou 5V ao AGV.

Para integração com ROS2, instale o stack de navegação:

# ROS2 Humble (Ubuntu 22.04) — adjust for your distro
sudo apt install ros-humble-navigation2 ros-humble-nav2-bringup ros-humble-slam-toolbox
Teste sem hardware primeiro. Execute o agente em modo simulado para verificar todo o pipeline de comandos antes de conectar o AGV:
python3 dami_agent.py --session RC-XXXX-XXXX --mock O modo simulado ignora a abertura da porta serial. Todo o parsing de comandos WebSocket, encaminhamento de telemetria e lógica de segurança de tempo limite funcionam de forma idêntica.
4

Teleoperação

Controle o AGV a partir do seu navegador via a Plataforma Fearless

  1. Aberto platform.roboticscenter.ai, navegue até a seção Teleop e crie uma nova sessão. Copie o ID da sessão (formato: RC-XXXX-XXXX).
  2. Inicie o agente com sua porta serial e ID da sessão:
    python3 dami_agent.py \
      --session RC-XXXX-XXXX \
      --serial-port /dev/ttyUSB0 \
      --backend ws://localhost:8000
  3. O agente se conecta à plataforma, registra o nó AGV como device_type: "mobile_base", e inicia o loop de controle a 30 Hz.
  4. Abra a URL da sessão no seu navegador. Use os controles direcionais para enviar move comandos. O AGV responde dentro de um ciclo de controle (33 ms a 30 Hz).

Tipos de comandos aceitos pelo agente:

# Move forward along X axis
{"type": "move", "axis": "x", "dir": 1}

# Move laterally right (Y axis)
{"type": "move", "axis": "y", "dir": 1}

# Rotate counter-clockwise (Z axis)
{"type": "move", "axis": "z", "dir": -1}

# Stop all motion immediately
{"type": "stop"}

# Goal-based delta movement
{"type": "goal", "delta": {"x": 0.5, "y": 0.0, "yaw": 0.0}}

Para ajustar a velocidade de movimento, use o --amp parâmetro (padrão 660, faixa recomendada 500–760). Valores mais altos produzem movimentos mais rápidos:

python3 dami_agent.py --session RC-XXXX-XXXX --serial-port /dev/ttyUSB0 --amp 500

Se o AGV se mover na direção errada, use --invert-x, --invert-y, ou --invert-z para inverter os eixos sem qualquer alteração de firmware.

5

Configuração de Navegação Autônoma

Configure ROS2 nav2, SLAM e seguimento de waypoint

Para navegação autônoma, publique dados de odometria e sensor (de um LiDAR ou câmera de profundidade no AGV) em tópicos ROS2, depois use nav2 para planejamento de trajetória.

# Launch SLAM Toolbox for mapping
ros2 launch slam_toolbox online_async_launch.py

# In a second terminal — launch nav2 with the AGV base footprint
ros2 launch nav2_bringup navigation_launch.py \
  params_file:=/path/to/your/agv_nav2_params.yaml

# Send a navigation goal via CLI
ros2 action send_goal /navigate_to_pose nav2_msgs/action/NavigateToPose \
  "{pose: {header: {frame_id: map}, pose: {position: {x: 1.0, y: 0.5}, orientation: {w: 1.0}}}}"

Principais parâmetros do nav2 a serem ajustados para o AGV Damiao:

  • raio_do_robô — Defina para a metade da largura do AGV mais uma margem de segurança (tipicamente 0,4–0,6 m).
  • vel_max_x / vel_max_y — Defina com base no seu --amp valor e na velocidade máxima medida. Comece de forma conservadora (0,3 m/s).
  • vel_max_theta — Limite de velocidade rotacional. Meça primeiro com um teste lento. --amp 400 test first.
  • holonômico — Defina para true no planejador local DWB para habilitar o planejamento de movimento lateral (necessário para rodas mecanum/omni).
Segurança de teleoperação durante a navegação. Mantenha o painel de teleoperação da Plataforma Fearless aberto durante os testes de navegação autônoma. O tempo limite de comando de 300 ms do agente significa que, se o nav2 parar de publicar metas, o AGV irá parar automaticamente — fornecendo uma rede de segurança em nível de software além do interruptor físico de corte.
6

Montagem de um Braço Robótico

Parafuse um OpenArm ou DK1 na placa superior e registre ambos em uma sessão de plataforma

A placa superior do AGV Damiao é projetada para aceitar flanges de base de braço robótico padrão. Esta etapa cobre a integração física e a configuração da sessão multi-nó da Plataforma Fearless.

Montagem física

  1. Desligue o AGV e o braço antes de qualquer trabalho mecânico.
  2. Posicione a placa de base do braço robô sobre os furos de montagem da placa superior do AGV. Use os parafusos de cabeça sextavada M6 fornecidos (ou M5 para braços mais leves). Aplique composto de travamento de rosca em todos os fixadores.
  3. Roteie os cabos de energia e CAN/USB do braço para baixo pelo canal de gerenciamento de cabos na placa superior até o compartimento do chassi do AGV. Prenda com abraçadeiras — deixe folga suficiente para o espaço de trabalho completo do braço sem puxar.
  4. Alimente o braço a partir de uma bateria separada ou fonte regulada no chassi do AGV. Não compartilhe a bateria de acionamento do AGV com o controlador do braço sem isolamento apropriado.

Sessão de plataforma multi-nó

Inicie ambos os agentes apontando para o mesmo ID de sessão. Eles se registram como nós independentes e a plataforma registra ambos os fluxos de forma síncrona:

# Terminal 1 — AGV agent
python3 dami_agent.py \
  --session RC-XXXX-XXXX \
  --serial-port /dev/ttyUSB0 \
  --node-id damiao-base

# Terminal 2 — OpenArm agent (example)
python3 openarm_agent.py \
  --session RC-XXXX-XXXX \
  --can-interface can0 \
  --node-id openarm-right

No painel de teleoperação da Fearless Platform, ambos os nós aparecem. Os operadores podem enviar comandos de movimento para o AGV (eixos x/y/z) e comandos de braço de forma independente na mesma sessão. A gravação do episódio captura a telemetria de todos os nós em um único arquivo JSONL — a trajetória completa de manipulação móvel, incluindo velocidade da base e posições das juntas do braço, sincronizadas por timestamp.

Veja também. A Hub de Hardware OpenArm 101 e o Kit Bimanual DK1 A página contém guias de configuração específicas para o braço. Complete a configuração do braço antes da etapa de montagem acima.
7

Configuração de CAN Bus e Motor

Configure o barramento CAN FD e defina os IDs dos motores para quaisquer atuadores Damiao montados no AGV

Quando um braço OpenArm ou DK1 é montado na placa superior do AGV, seus motores Damiao QDD se comunicam através de um barramento CAN FD a partir do computador embarcado. Esta seção cobre a ativação do barramento, atribuição de ID do motor, comandos de comissionamento e diagnósticos de LED.

Transmissão do AGV vs. motores do braço. O movimento do AGV é controlado via UART5/DBUS — não CAN. O barramento CAN FD descrito aqui é exclusivamente para motores Damiao QDD em qualquer carga de braço robótico montada no AGV. Não tente enviar quadros CAN para o controlador de transmissão do AGV.

Instale can-utils

# Install SocketCAN utilities (Ubuntu / Debian)
sudo apt update && sudo apt install -y can-utils

Ativo uma interface CAN FD

CAN FD a 1 Mbit/s nominal + 5 Mbit/s de dados é o modo recomendado para todas as novas implantações:

# Bring interface down first if already up
sudo ip link set can0 down

# Configure CAN FD: 1M nominal baud, 5M data baud, FD mode enabled
sudo ip link set can0 type can bitrate 1000000 dbitrate 5000000 fd on

# Bring interface up
sudo ip link set can0 up

# Verify — output should show "fd on"
ip link show can0

Se você tiver o PPA OpenArm instalado, o script auxiliar envolve esses comandos:

# CAN FD single arm
openarm-can-configure-socketcan can0 -fd -b 1000000 -d 5000000

# Classic CAN 2.0 (legacy / compatibility)
openarm-can-configure-socketcan can0

Monitore o Barramento

# Dump all CAN frames — verify connectivity before sending commands
candump -x can0

# Dump with timestamps
candump -td can0

Atribuição de ID do Motor (J1–J8)

Cada motor Damiao no barramento CAN deve ter um par único de IDs: um ID de transmissor (host → motor) e um ID de receptor (motor → host). Os IDs são configurados usando a ferramenta de depuração Damiao para Windows antes da montagem do braço. Mapeamento padrão do OpenArm:

Junta Modelo do Motor ID TX (host → motor) ID RX (motor → hospedeiro)
J1 — rotação da baseDM-J4340p-2EC0x010x11
J2 — inclinação do ombroDM-J4340p-2EC0x020x12
J3 — rotação do ombroDM-J4340p-2EC0x030x13
J4 — inclinação do cotoveloDM-J4340-2EC0x040x14
J5 — rotação do cotoveloDM-J4340-2EC0x050x15
J6 — inclinação do pulsoDM-J4340-2EC0x060x16
J7 — rotação do pulsoDM-J4310-2EC V1.10x070x17
J8 – chamaDM-J4310-2EC V1.10x080x18

Os IDs são únicos por barramento CAN, não globalmente. Uma configuração bimanual (dois braços) usa um segundo barramento — can1 — com o mesmo esquema de ID.

Enviar comandos de teste

Usar cansend para comissionamento de baixo nível. Substitua 001 pelo ID TX em hexadecimal da junta alvo (por exemplo, 002 para J2).

## CAN FD commands (use when interface has "fd on")

# Enable motor — motor holds position and accepts commands
cansend can0 001##1FFFFFFFFFFFFFFFC

# Disable motor — motor becomes free-wheeling
cansend can0 001##1FFFFFFFFFFFFFFFD

# Clear motor error — required before re-enabling after a fault
cansend can0 001##1FFFFFFFFFFFFFFFB

## CAN 2.0 equivalents (use when interface is classic CAN, no fd on)
cansend can0 001#FFFFFFFFFFFFFFFC   # Enable
cansend can0 001#FFFFFFFFFFFFFFFD   # Disable
cansend can0 001#FFFFFFFFFFFFFFFB   # Clear error
Combine o tipo de quadro com o modo de barramento. Use o ##1 Sintaxe CAN FD quando a interface foi configurada com fd on, e a única # sintaxe clássica para CAN 2.0. Misturar tipos de quadro no mesmo barramento causará erros de barramento.

Indicadores de Status LED

Cada motor Damiao possui um único LED a bordo visível através da janela da carcaça:

Padrão de LED Estado Ação Necessária
Verde (fixo) Motor habilitado e pronto Nenhum — motor está ativo e aceitando comandos
Vermelho (fixo) Motor desabilitado (alimentado, não habilitado) Envie o comando Habilitar para ativar o motor
Vermelho (piscando) Falha do motor / estado de erro Envie o comando Limpar Erro, investigue a causa e, em seguida, reabilite

Causas comuns de falha: sobrecorrente (reduzir ganhos ou carga), sobretemperatura (permitir resfriamento), erro de encoder (reconectar cabos), subtensão (fornecimento abaixo de ~18 V em um sistema de 24 V), CAN bus-off (verifique a terminação e a fiação).

Avisos de Gravação Flash

Limite de gravação flash: ~10.000 ciclos por motor. O armazenamento de ID do motor e parâmetros utiliza memória flash interna. Defina IDs CAN e parâmetros de calibração uma vez durante a comissionamento e deixe-os permanentemente. Alterações de parâmetros em tempo de execução aplicadas sem o --flash sinal vão para a RAM apenas e não consomem ciclos de flash. Evite scripts que regravem repetidamente os parâmetros do motor.
A configuração dos IDs requer a ferramenta Damiao Windows. Os IDs CAN devem ser configurados usando Debugging_Tools_v.1.6.8.8.exe — conecte apenas um motor por vez para evitar colisões de ID. Veja a referência completa do motor para instruções passo a passo.
Ver Especificações Completas → FAQ e Comunidade → Wiki do desenvolvedor →

Precisa de Ajuda?

Pergunte à comunidade ou entre em contato com o suporte SVRC com a saída de dami_agent.py --mock e o caminho da sua porta serial.