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.
Abertura da embalagem e Verificação de Segurança
Inspecione o AGV e prepare o espaço de trabalho
- 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.
- 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.
- 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.
- 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.
- 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.
Carregamento da Bateria & Ligação
Carregue completamente o pacote de bateria antes do primeiro uso.
- 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.
- 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.
- 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.
- 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.
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
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.
Teleoperação
Controle o AGV a partir do seu navegador via a Plataforma Fearless
- 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). - 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
- O agente se conecta à plataforma, registra o nó AGV como
device_type: "mobile_base", e inicia o loop de controle a 30 Hz. - Abra a URL da sessão no seu navegador. Use os controles direcionais para enviar
movecomandos. 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.
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
--ampvalor 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 400test first. - holonômico — Defina para
trueno planejador local DWB para habilitar o planejamento de movimento lateral (necessário para rodas mecanum/omni).
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
- Desligue o AGV e o braço antes de qualquer trabalho mecânico.
- 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.
- 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.
- 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.
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.
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 base | DM-J4340p-2EC | 0x01 | 0x11 |
| J2 — inclinação do ombro | DM-J4340p-2EC | 0x02 | 0x12 |
| J3 — rotação do ombro | DM-J4340p-2EC | 0x03 | 0x13 |
| J4 — inclinação do cotovelo | DM-J4340-2EC | 0x04 | 0x14 |
| J5 — rotação do cotovelo | DM-J4340-2EC | 0x05 | 0x15 |
| J6 — inclinação do pulso | DM-J4340-2EC | 0x06 | 0x16 |
| J7 — rotação do pulso | DM-J4310-2EC V1.1 | 0x07 | 0x17 |
| J8 – chama | DM-J4310-2EC V1.1 | 0x08 | 0x18 |
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
##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
--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.