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.
Desempaquetado y verificación de seguridad
Inspeccione el AGV y prepare el espacio de trabajo
- 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.
- 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.
- 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.
- 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.
- 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.
Carga de batería y encendido
Cargue completamente el paquete de baterías antes del primer uso.
- 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.
- 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.
- 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.
- 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.
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
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.
Teleoperación
Conduce el AGV desde tu navegador a través de la Plataforma Fearless
- 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). - 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
- 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. - Abre la URL de la sesión en tu navegador. Usa los controles direccionales para enviar
movecomandos. 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.
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
--ampvalor 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).
trueholonómico
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.
- 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.
- 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.
- 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.
- 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.
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.
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 base | DM-J4340p-2EC | 0x01 | 0x11 |
| J2 — inclinación del hombro | DM-J4340p-2EC | 0x02 | 0x12 |
| J3 — rotación del hombro | DM-J4340p-2EC | 0x03 | 0x13 |
| J4 — inclinación del codo | DM-J4340-2EC | 0x04 | 0x14 |
| J5 — rotación del codo | DM-J4340-2EC | 0x05 | 0x15 |
| J6 — inclinación de la muñeca | DM-J4340-2EC | 0x06 | 0x16 |
| J7 — rotación de la muñeca | DM-J4310-2EC V1.1 | 0x07 | 0x17 |
| J8 - abrazadera | DM-J4310-2EC V1.1 | 0x08 | 0x18 |
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
##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
--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.