Comunidade Damiao AGV e FAQ

Perguntas frequentes sobre o protocolo DBUS, navegação, solução de problemas e manipulação móvel com OpenArm. Links para fórum e suporte.

Perguntas Frequentes

Quais são as configurações exatas da porta serial para o Damiao AGV?

O firmware do AGV escuta na UART5 (pino PD2, RX) em 100000 baud com 8 bits de dados, paridade par e 2 bits de parada (8E2). No pyserial, abra a porta com:

serial.Serial(
    port='/dev/ttyUSB0',
    baudrate=100000,
    bytesize=serial.EIGHTBITS,
    parity=serial.PARITY_EVEN,
    stopbits=serial.STOPBITS_TWO
)

Um erro muito comum é usar 8N1 (sem paridade, 1 bit de parada). O AGV parecerá conectar, mas ignorará silenciosamente ou interpretará incorretamente todos os quadros. Sempre use PARITY_EVEN e STOPBITS_TWO.

Como o quadro DBUS de 18 bytes codifica a velocidade?

O quadro DBUS empacota quatro valores de canal de 11 bits (ch0–ch3) nos bytes 0–5 usando empacotamento de bits little-endian. Cada canal varia de 0 a 2047, com 1024 como centro (neutro/parado). O mapeamento de velocidade é: ch3 = 1024 + vx × amp (para frente), ch2 = 1024 + vy × amp (lateral), ch0 = 1024 + (−vw) × amp (rotação). Os bytes 6–15 são campos de mouse/teclado zerados. Os bytes 16–17 contêm ch4, fixo em 1024. Veja Especificações para a tabela completa de mapeamento de canais.

O AGV se move brevemente e depois para — o que está acontecendo?

Este é o recurso de segurança de tempo limite de comando sendo acionado. Se nenhum comando de movimento ou parada for recebido dentro de --cmd-timeout-ms (300 ms por padrão), o agente automaticamente zera todos os canais de velocidade e o AGV para. Isso geralmente significa que a plataforma não está enviando comandos rápido o suficiente, ou há latência na rede causando lacunas. Soluções: (1) aumentar --cmd-timeout-ms 500 para conexões de alta latência, (2) garantir que o painel de teleop do navegador esteja enviando repetidamente move comandos a ~10 Hz enquanto um botão de direção estiver pressionado, (3) verificar seu RTT de rede para a plataforma.

O AGV se move na direção errada — como posso corrigir isso?

Use as flags de inversão de eixo no agente — nenhuma alteração de firmware necessária:

# Flip forward/backward
python3 dami_agent.py --session RC-XXXX --serial-port /dev/ttyUSB0 --invert-x

# Flip lateral (left/right)
python3 dami_agent.py ... --invert-y

# Flip rotation direction
python3 dami_agent.py ... --invert-z

Teste cada eixo individualmente (por exemplo, envie apenas um comando X, observe o movimento) para determinar quais flags são necessárias para a orientação da sua instalação física.

Posso testar sem o AGV físico?

Sim. Passe --mock ao iniciar dami_agent.py. No modo simulado, a porta serial nunca é aberta. O loop de controle ainda codifica quadros DBUS (armazenados na memória), a telemetria é encaminhada para o WebSocket da plataforma, e toda a análise de comandos funciona de forma idêntica. Isso permite que você verifique todo o pipeline do WebSocket, teste a interface da plataforma e integre no CI sem hardware:

python3 dami_agent.py --session RC-XXXX-XXXX --mock

Eu recebo pyserial.SerialException ao iniciar — o que devo verificar?

Primeiro: ls /dev/ttyUSB* para confirmar se o adaptador aparece. Se não aparecer, o driver do adaptador USB-para-TTL pode não estar carregado (tente uma porta USB diferente). Se a porta aparecer, mas você receber um erro de permissão, adicione seu usuário ao grupo dialout:

sudo usermod -aG dialout $USER
# Log out and back in, then retry

Se a porta aparecer na lista de dispositivos, mas o agente ainda não conseguir abri-la, outro processo pode estar utilizando-a (por exemplo, uma instância anterior do agente ou um monitor serial). Feche todos os outros processos que estão usando a porta.

O agente se conecta, mas a plataforma não mostra telemetria — o que está errado?

Confirme se o ID da sessão passado para --session ainda está ativo na interface da plataforma. As sessões podem expirar se inativas. Verifique a saída do terminal do agente para a resposta do handshake de registro — se imprimir "handshake failed" ou não imprimir "ready", a sessão pode ter expirado. Crie uma nova sessão na plataforma e passe o novo ID para o agente. Também verifique se --backend aponta para a URL correta do WebSocket da plataforma.

Como posso ajustar a velocidade do AGV?

Ajuste o --amp parâmetro. Isso define o deslocamento do canal a partir do centro (1024) que representa o comando de movimento. O padrão é 660, dando aproximadamente 64% da velocidade máxima. Para operação mais lenta e controlada durante tarefas de manipulação montadas no braço, use --amp 400. Para velocidade máxima em um piso aberto, use até --amp 900. Note que rodas mecanum perdem alguma eficiência lateral em velocidades muito altas — mantenha --amp abaixo de 800 para manobras laterais.

Dicas para Integração com OpenArm

Planeje o roteamento dos cabos antes de montar o braço

Roteie os cabos CAN/USB do braço através do canal interno de gerenciamento de cabos do AGV antes de fixar o braço. Uma vez que o braço está montado, é difícil re-rotear os cabos sem removê-lo. Deixe 20–30 cm de folga extra de cabo no pulso — o espaço de trabalho do braço se estende para os lados e para trás, onde a tensão do cabo pode criar resistência inesperada nas trajetórias das juntas.

Use menor --amp quando o braço estiver montado e em movimento

Um braço robótico no AGV eleva o centro de massa. Aceleração lateral rápida pode fazer a plataforma balançar, o que cria perturbações na trajetória do braço — particularmente em posições de alcance estendido. Comece com --amp 400 para movimento da base durante a operação do braço e aumente apenas se necessário. Para coleta de dados de teleoperação, um movimento de base consistente e lento produz dados de treinamento mais limpos do que movimentos rápidos e bruscos.

Registre ambos os agentes com valores --node-id distintos

Ao executar o agente AGV e o agente de braço simultaneamente na mesma sessão da plataforma, atribua a cada um um distinto --node-id. Isso garante que a plataforma exiba fluxos de telemetria separados e o arquivo JSONL do episódio rotule os dados de cada nó de forma independente. Convenção de nomenclatura recomendada: damiao-base para o AGV e openarm-right / openarm-left para nós de braço.

Coordene o movimento da base e o movimento do braço em teleop

No painel de teleop da Plataforma Fearless, ambos os nós aparecem simultaneamente. Um padrão útil de teleoperação é: parar a base, mover o braço para agarrar, mover a base para reposicionar, repetir. O arquivo JSONL do episódio captura a telemetria de todos os nós de forma síncrona por timestamp, para que políticas posteriores possam aprender com a trajetória completa de manipulação móvel. Considere usar os marcadores de gravação da plataforma para anotar onde o movimento da base transita para o movimento do braço dentro de cada episódio.

Adicione o sensor Paxini GEN3 para dados de manipulação móvel ricos em contato

monte Paxini PX-6AX GEN3 sensores táteis nas pontas dos dedos do OpenArm ou no efetor final. Registre a ponte do sensor como um terceiro nó na mesma sessão. A plataforma grava fluxos de telemetria tátil, de articulação do braço e de velocidade da base de forma síncrona — criando conjuntos de dados ricos em manipulação móvel ciente de contato para clonagem de comportamento e aprendizado por reforço.

Fórum & Suporte

Tem uma pergunta que não foi respondida aqui? Pergunte à comunidade SVRC ou entre em contato com o suporte de hardware.

Vá para o Fórum → Contate o Suporte →

Pronto para construir um sistema de manipulação móvel?

Siga o guia de configuração, monte seu braço e comece a coletar demonstrações de teleoperação de corpo inteiro na plataforma.