Guía de configuración del Damiao AGV

Desde el desempaquetado hasta la conducción desde su navegador. Cubre seguridad al desempaquetar, carga, software, teleoperación, navegación autónoma y montaje del brazo.

Equipo pesado — se requiere levantamiento en equipo. El Damiao AGV es una plataforma móvil sustancial. Siempre use un levantamiento de dos personas para el desempaquetado y reposicionamiento. Asegúrese de que el espacio de trabajo tenga al menos 2 m de despeje en todas las direcciones antes de encenderlo por primera vez.
1

Desempaquetado y verificación de seguridad

Inspeccione el AGV y prepare el espacio de trabajo

Se requiere levantamiento en equipo. Use dos personas para levantar el AGV fuera de su caja de envío. Levante desde el chasis inferior — nunca por las ruedas o cualquier electrónica saliente. Coloque la plataforma sobre una superficie plana y dura con los frenos aplicados (si está equipada).
  1. Retire el embalaje. Retire cuidadosamente todos los insertos de espuma, bridas y restricciones de envío. Inspeccione las ruedas en busca de daños por envío — las cuatro ruedas mecanum deben girar libremente a mano.
  2. Inspeccione los conectores. Verifique que todos los conectores de cable en el controlador principal estén bien colocados. La vibración durante el envío ocasionalmente afloja los conectores JST o Deans.
  3. Despeje del espacio de trabajo. Antes de encender, despeje al menos 2 m de espacio abierto en todas las direcciones. El AGV puede acelerar rápidamente — los transeúntes deben mantenerse alejados durante las pruebas de primer movimiento.
  4. Parada de emergencia. Localice el interruptor de corte de energía principal en el chasis. Sepa cómo alcanzarlo antes de encender. Para la primera sesión, mantenga una mano cerca del corte en todo momento.
  5. Verificación de superficie. Las ruedas mecanum requieren una superficie plana y dura (hormigón, suelo de madera o azulejo liso) para un rendimiento omnidireccional correcto. La alfombra y las superficies irregulares reducen significativamente la autoridad de control lateral.
2

Carga de batería y encendido

Cargue completamente el paquete de baterías antes del primer uso.

  1. Conecte el cargador. Localice el puerto de carga de la batería en el chasis del AGV (típicamente un conector de barril grande o un puerto XT60). Conecte el cargador de balance incluido. Enchufe el cargador en una toma de corriente a tierra de 110/220V.
  2. Cargue hasta el máximo. Permita que la batería se cargue completamente antes del primer uso — típicamente de 2 a 4 horas dependiendo del estado inicial. El LED del cargador se volverá verde (o dejará de parpadear) cuando esté completo. No lo deje desatendido durante la primera carga.
  3. Verifique el voltaje de la batería. Después de cargar, el voltaje de la batería debe leer en el nivel nominal completamente cargado (verifique la etiqueta de su paquete de baterías). Use un multímetro o la pantalla a bordo si está equipada.
  4. Secuencia de encendido. Conecte la batería al controlador principal. Active el interruptor de alimentación principal. El controlador debería arrancar en 5 a 10 segundos — los LEDs indicadores se estabilizarán. No envíe comandos de movimiento durante el arranque.
Seguridad de la batería LiPo. Si el AGV utiliza un paquete de baterías LiPo (común), nunca descargue por debajo del voltaje mínimo de celda (típicamente 3.0V/celda). Almacene al 50% de carga si no se utiliza durante más de una semana. Nunca cargue una LiPo hinchada o dañada.
3

Software y pila de navegación ROS2

Instale el agente de Python y los paquetes opcionales de ROS2 en su PC.

La dami_agent.py El script es el puente principal entre la Plataforma Fearless y el hardware del AGV. Requiere Python 3.8+ y dos paquetes de 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 el adaptador USB a TTL: conecte el pin del adaptador a la TX del controlador principal del AGV. Conecte GND a GND. NO conecte el pin RX del adaptador o 5V al AGV. Para la integración de ROS2, instale el stack de navegación:Para la integración de ROS2, instale el stack de navegación:

For ROS2 integration, install the navigation stack:

# ROS2 Humble (Ubuntu 22.04) — adjust for your distro
sudo apt install ros-humble-navigation2 ros-humble-nav2-bringup ros-humble-slam-toolbox
Prueba primero sin hardware. Ejecuta el agente en modo simulado para verificar todo el pipeline de comandos antes de conectar el AGV:
python3 dami_agent.py --session RC-XXXX-XXXX --mock El modo simulado omite la apertura del puerto serie. Todo el análisis de comandos de WebSocket, el reenvío de telemetría y la lógica de seguridad de tiempo de espera se ejecutan de manera idéntica.
4

Teleoperación

Conduce el AGV desde tu navegador a través de la Plataforma Fearless

  1. Abierto platform.roboticscenter.ai, navega a la sección de Teleop y crea una nueva sesión. Copia el ID de la sesión (formato: RC-XXXX-XXXX).
  2. Inicia el agente con tu puerto serie y ID de sesión:
    python3 dami_agent.py \
      --session RC-XXXX-XXXX \
      --serial-port /dev/ttyUSB0 \
      --backend ws://localhost:8000
  3. El agente se conecta a la plataforma, registra el nodo AGV como device_type: "mobile_base", y comienza el bucle de control a 30 Hz.
  4. Abre la URL de la sesión en tu navegador. Usa los controles direccionales para enviar move comandos. El AGV responde dentro de un tick del bucle de control (33 ms a 30 Hz).

Tipos de comandos aceptados por el 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 la velocidad de movimiento, usa el --amp parámetro (predeterminado 660, rango recomendado 500–760). Valores más altos producen un movimiento más rápido:

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

Si el AGV se mueve en la dirección incorrecta, usa --invert-x, --invert-y, oh --invert-z para invertir los ejes sin ningún cambio de firmware.

5

Configuración de navegación autónoma

Configura ROS2 nav2, SLAM y seguimiento de waypoints

Para navegación autónoma, publica datos de odometría y sensores (de un LiDAR o cámara de profundidad en el AGV) en temas de ROS2, luego usa nav2 para la planificación de rutas.

# 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}}}}"

Parámetros clave de nav2 a ajustar para el AGV Damiao:

  • radio_robot — Establecer en la mitad del ancho del AGV más un margen de seguridad (típicamente 0.4–0.6 m).
  • max_vel_x / max_vel_y — Establecer según tu --amp valor y velocidad máxima medida. Comienza de manera conservadora (0.3 m/s).
  • — Establecer en — Límite de velocidad rotacional. Mide primero con una prueba lenta. --amp 400 — Establecer en
  • Mantén el panel de teleoperación de la Plataforma Fearless abierto durante las pruebas de navegación autónoma. El tiempo de espera de comando de 300 ms del agente significa que si nav2 deja de publicar objetivos, el AGV se detendrá automáticamente, proporcionando una red de seguridad a nivel de software además del interruptor de corte físico. en el planificador local DWB para habilitar la planificación de movimiento lateral (requerido para ruedas mecanum/omni). true holonómico
Atornilla un OpenArm o DK1 a la placa superior y registra ambos en una sesión de plataforma. Seguridad de teleoperación durante la navegación.
6

Montaje de un brazo robótico

La placa superior del AGV Damiao está diseñada para aceptar bridas de base de brazo robótico estándar. Este paso cubre la integración física y la configuración de sesión multi-nodo de la Plataforma Fearless.

Montaje físico

antes de cualquier trabajo mecánico.

  1. Coloca la placa base del brazo robótico sobre los agujeros de montaje de la placa superior del AGV. Usa los tornillos de cabeza hexagonal M6 proporcionados (o M5 para brazos más ligeros). Aplica compuesto de bloqueo de roscas en todos los sujetadores. Apaga el AGV y el brazo.
  2. Dirige los cables de alimentación y CAN/USB del brazo hacia abajo a través del canal de gestión de cables en la placa superior hasta el compartimento del chasis del AGV. Asegura con bridas — permite suficiente holgura para el espacio de trabajo completo del brazo sin tirar.
  3. Alimenta el brazo desde una batería separada o una fuente regulada en el chasis del AGV. No compartas la batería de tracción del AGV con el controlador del brazo sin la adecuada aislamiento.
  4. Power the arm from a separate battery or regulated supply in the AGV chassis. Do not share the AGV drive battery with the arm controller without appropriate isolation.

Sesión de plataforma de múltiples nodos

Inicie ambos agentes apuntando al mismo ID de sesión. Se registran como nodos independientes y la plataforma registra ambos flujos de forma sincrónica:

# 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

En el panel de teleoperación de la Plataforma Fearless, ambos nodos aparecen. Los operadores pueden enviar comandos de movimiento al AGV (ejes x/y/z) y comandos de brazo de forma independiente en la misma sesión. La grabación de episodios captura la telemetría de todos los nodos en un único archivo JSONL: la trayectoria completa de manipulación móvil, incluyendo la velocidad de la base y las posiciones de las articulaciones del brazo, sincronizadas por marca de tiempo.

Ver también. La Centro de hardware OpenArm 101 y el Kit Bimanual DK1 La página contiene guías de configuración específicas para el brazo. Complete la configuración del brazo antes del paso de montaje anterior.
7

Configuración de CAN Bus y Motor

Configure el bus CAN FD y establezca los ID de motor para cualquier actuador Damiao montado en el AGV

Cuando un brazo OpenArm o DK1 está montado en la placa superior del AGV, sus motores Damiao QDD se comunican a través de un bus CAN FD desde la computadora a bordo. Esta sección cubre la activación del bus, la asignación de ID de motor, los comandos de puesta en marcha y el diagnóstico de LED.

Transmisión del AGV vs. motores del brazo. El movimiento del AGV se controla a través de UART5/DBUS — no CAN. El bus CAN FD descrito aquí es exclusivamente para motores Damiao QDD en cualquier carga de brazo robótico montada en el AGV. No intente enviar tramas CAN al controlador de transmisión del AGV.

Instalar can-utils

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

Activar la interfaz CAN FD

CAN FD a 1 Mbit/s nominal + 5 Mbit/s de datos es el modo recomendado para todos los nuevos despliegues:

# 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

Si tiene instalado el PPA de OpenArm, el script auxiliar envuelve estos 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

Monitorear el bus

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

# Dump with timestamps
candump -td can0

Asignación de ID de motor (J1–J8)

Cada motor Damiao en el bus CAN debe tener un par único de ID: un ID de transmisor (host → motor) y un ID de receptor (motor → host). Los ID se configuran utilizando la herramienta de depuración de Damiao en Windows antes del ensamblaje del brazo. Mapeo estándar de OpenArm:

Articulación Modelo de motor ID TX (host → motor) ID RX (motor → host)
J1 — rotación de baseDM-J4340p-2EC0x010x11
J2 — inclinación del hombroDM-J4340p-2EC0x020x12
J3 — rotación del hombroDM-J4340p-2EC0x030x13
J4 — inclinación del codoDM-J4340-2EC0x040x14
J5 — rotación del codoDM-J4340-2EC0x050x15
J6 — inclinación de la muñecaDM-J4340-2EC0x060x16
J7 — rotación de la muñecaDM-J4310-2EC V1.10x070x17
J8 - abrazaderaDM-J4310-2EC V1.10x080x18

Los IDs son únicos por bus CAN, no globalmente. Una configuración bimanual (dos brazos) utiliza un segundo bus — can1 — con el mismo esquema de ID.

enviar comandos de prueba

para usar cansend para la puesta en marcha de bajo nivel. Reemplace 001 con el ID TX hexadecimal de la articulación objetivo (por ejemplo, 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
Coincidir el tipo de marco con el modo de bus. Usa el ##1 Sintaxis CAN FD cuando la interfaz fue configurada con fd on, y la única # sintaxis clásica para CAN 2.0. Mezclar tipos de tramas en el mismo bus causará errores de bus.

Indicadores de estado LED

Cada motor Damiao tiene un único LED a bordo visible a través de la ventana de la carcasa:

Patrón LED Estado Acción requerida
Verde (fijo) Motor habilitado y listo Ninguno — motor activo y aceptando comandos
Rojo (fijo) Motor deshabilitado (alimentado, no habilitado) Enviar el comando Habilitar para activar el motor
Rojo (parpadeando) Fallo del motor / estado de error Enviar el comando Borrar Error, investigar la causa y luego volver a habilitar

Causas comunes de fallos: sobrecorriente (reducir ganancias o carga), sobretemperatura (permitir enfriamiento), error de encoder (reconectar cables), bajo voltaje (suministro por debajo de ~18 V en un sistema de 24 V), CAN bus-off (verificar terminación y cableado).

Advertencias de escritura en flash

Límite de escritura en flash: ~10,000 ciclos por motor. El almacenamiento de ID de motor y parámetros utiliza memoria flash interna. Establecer IDs de CAN y parámetros de calibración una vez durante la puesta en marcha y dejarlos de forma permanente. Los cambios de parámetros en tiempo de ejecución se aplican sin el --flash indicador y van a RAM solamente y no consumen ciclos de flash. Evitar scripts que vuelvan a escribir repetidamente los parámetros del motor.
Configurar los ID requiere la herramienta Damiao para Windows. Los ID de CAN deben configurarse utilizando Debugging_Tools_v.1.6.8.8.exe — conecta solo un motor a la vez para evitar colisiones de ID. Ver la referencia completa del motor para instrucciones paso a paso.
Ver especificaciones completas → Preguntas frecuentes y comunidad → Wiki del desarrollador →

¿Necesitas ayuda?

Pregunta a la comunidad o contacta al soporte de SVRC con la salida de dami_agent.py --mock y tu ruta de puerto serie.