Guide de configuration du Damiao AGV

Du déballage à la conduite depuis votre navigateur. Couvre la sécurité au déballage, le chargement, les logiciels, la téléopération, la navigation autonome et le montage sur le bras.

Équipement lourd – ascenseur d’équipe requis. Le Damiao AGV est une plate-forme mobile importante. Utilisez toujours un élévateur pour deux personnes pour le déballage et le repositionnement. Assurez-vous que l'espace de travail dispose d'au moins 2 m d'espace libre dans toutes les directions avant la première mise sous tension.
1

Déballage et contrôle de sécurité

Inspecter l'AGV et préparer l'espace de travail

Ascenseur d'équipe requis. Utilisez deux personnes pour soulever l'AGV hors de sa caisse d'expédition. Soulevez par le dessous du châssis – jamais par les roues ou tout élément électronique saillant. Posez la plate-forme sur une surface plane et dure avec les freins serrés (le cas échéant).
  1. Retirez l'emballage. Retirez soigneusement tous les inserts en mousse, les attaches de câble et les dispositifs de retenue d'expédition. Inspectez les roues pour déceler les dommages causés par le transport – les quatre roues Mecanum doivent tourner librement à la main.
  2. Inspectez les connecteurs. Vérifiez que tous les connecteurs de câble du contrôleur principal sont bien en place. Les vibrations liées au transport desserrent occasionnellement les connecteurs JST ou Deans.
  3. Dégagement de l'espace de travail. Avant toute mise sous tension, dégagez au moins 2 m d'espace libre dans toutes les directions. L'AGV peut accélérer rapidement : les spectateurs doivent rester en retrait lors des tests de premier mouvement.
  4. Arrêt d'urgence. Localisez l'interrupteur de coupure de courant principal sur le châssis. Sachez comment l'atteindre avant de mettre sous tension. Lors de la première séance, gardez toujours une main près du seuil.
  5. Vérification des surfaces. Les roues Mecanum nécessitent une surface plane et dure (béton, parquet ou carrelage lisse) pour des performances omnidirectionnelles correctes. La moquette et les surfaces inégales réduisent considérablement l'autorité de contrôle latéral.
2

Chargement et mise sous tension de la batterie

Chargez complètement la batterie avant la première utilisation

  1. Connectez le chargeur. Localisez le port de charge de la batterie sur le châssis AGV (généralement un gros connecteur cylindrique ou un port XT60). Connectez le chargeur de balance inclus. Branchez le chargeur sur une prise 110/220 V mise à la terre.
  2. Chargez complètement. Laissez la batterie se charger complètement avant la première utilisation – généralement 2 à 4 heures selon l'état initial. Le voyant du chargeur deviendra vert (ou cessera de clignoter) une fois terminé. Ne laissez pas sans surveillance lors de la première charge.
  3. Vérifiez la tension de la batterie. Après la charge, la tension de la batterie doit être au niveau nominal à pleine charge (vérifiez l'étiquette de votre batterie). Utilisez un multimètre ou l'écran de bord si équipé.
  4. Séquence de mise sous tension. Connectez la batterie au contrôleur principal. Basculez l’interrupteur d’alimentation principal. Le contrôleur devrait démarrer dans les 5 à 10 secondes — les voyants LED se stabiliseront. N'envoyez pas de commandes de mouvement pendant le démarrage.
Sécurité de la batterie LiPo. Si l'AGV utilise une batterie LiPo (commune), ne déchargez jamais en dessous de la tension minimale de la cellule (généralement 3,0 V/cellule). Conserver à 50 % de charge si inutilisé pendant plus d’une semaine. Ne chargez jamais un LiPo gonflé ou endommagé.
3

Logiciel et pile de navigation ROS2

Installez l'agent Python et les packages ROS2 en option sur votre PC

Le dami_agent.py Le script est le pont principal entre la plate-forme Fearless et le matériel AGV. Il nécessite Python 3.8+ et deux packages 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

Câblez l'adaptateur USB vers TTL : connectez le connecteur de l'adaptateur TX broche au contrôleur principal AGV UART5_RX (broche PD2). Connectez GND à GND. Ne connectez PAS la broche RX ou le 5 V de l'adaptateur à l'AGV.

Pour l'intégration de ROS2, installez la pile de navigation :

# ROS2 Humble (Ubuntu 22.04) — adjust for your distro
sudo apt install ros-humble-navigation2 ros-humble-nav2-bringup ros-humble-slam-toolbox
Testez d'abord sans matériel. Exécutez l'agent en mode simulé pour vérifier le pipeline de commandes complet avant de connecter l'AGV :
python3 dami_agent.py --session RC-XXXX-XXXX --mock Le mode simulé ignore l’ouverture du port série. Toutes les logiques d’analyse des commandes WebSocket, de transfert de télémétrie et de sécurité d’expiration s’exécutent de manière identique.
4

Téléopération

Pilotez l'AGV depuis votre navigateur via la plateforme Fearless

  1. Ouvrir platform.roboticscenter.ai, accédez à la section Teleop et créez une nouvelle session. Copiez l'ID de session (format : RC-XXXX-XXXX).
  2. Lancez l'agent avec votre port série et votre ID de session :
    python3 dami_agent.py \
      --session RC-XXXX-XXXX \
      --serial-port /dev/ttyUSB0 \
      --backend ws://localhost:8000
  3. L'agent se connecte à la plateforme, enregistre le nœud AGV comme device_type: "mobile_base", et commence la boucle de contrôle à 30 Hz.
  4. Ouvrez l'URL de la session dans votre navigateur. Utilisez les commandes directionnelles pour envoyer move commandes. L'AGV répond en un seul tick de boucle de contrôle (33 ms à 30 Hz).

Types de commandes acceptées par l'agent :

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

Pour régler la vitesse de déplacement, utilisez le --amp paramètre (par défaut 660, plage recommandée 500–760). Des valeurs plus élevées produisent un mouvement plus rapide :

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

Si l'AGV se déplace dans la mauvaise direction, utilisez --invert-x, --invert-y, ou --invert-z pour inverser les axes sans aucun changement de firmware.

5

Configuration de la navigation autonome

Configurez ROS2 nav2, SLAM et le suivi des waypoints

Pour une navigation autonome, publiez les données d'odométrie et de capteur (à partir d'un LiDAR ou d'une caméra de profondeur sur l'AGV) sur les sujets ROS2, puis utilisez nav2 pour la planification du trajet.

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

Paramètres clés de Nav2 à régler pour le Damiao AGV :

  • rayon_robot — Réglé sur la demi-largeur de l'AGV plus une marge de sécurité (généralement 0,4 à 0,6 m).
  • max_vel_x / max_vel_y — Définir en fonction de votre --amp valeur et vitesse maximale mesurée. Commencez prudemment (0,3 m/s).
  • max_vel_theta — Limite de vitesse de rotation. Mesurez avec un ralenti --amp 400 tester d'abord.
  • holonomique — Régler sur true dans le planificateur local DWB pour permettre la planification des mouvements latéraux (requis pour les roues mecanum/omni).
Sécurité téléop pendant la navigation. Gardez le panneau téléphonique Fearless Platform ouvert pendant les tests de navigation autonome. Le délai d'attente de commande de 300 ms de l'agent signifie que si nav2 arrête de publier des objectifs, l'AGV s'arrêtera automatiquement, fournissant ainsi un filet de sécurité au niveau logiciel en plus du commutateur de coupure physique.
6

Montage d'un bras de robot

Boulonnez un OpenArm ou un DK1 à la plaque supérieure et enregistrez les deux en une seule session de plateforme.

La plaque supérieure du Damiao AGV est conçue pour accepter les brides de base de bras de robot standard. Cette étape couvre l'intégration physique et la configuration de la session multi-nœuds de Fearless Platform.

Montage physique

  1. Éteignez l'AGV et armez-le avant tout travail mécanique.
  2. Positionnez la plaque de base du bras du robot sur les trous de montage de la plaque supérieure de l'AGV. Utilisez les boulons à tête creuse M6 fournis (ou M5 pour les bras de briquet). Appliquez du frein-filet sur toutes les fixations.
  3. Acheminez les câbles d'alimentation et CAN/USB du bras vers le bas à travers le canal de gestion des câbles dans la plaque supérieure jusqu'au compartiment du châssis AGV. Fixez avec des attaches de câble — laissez suffisamment de jeu pour tout l'espace de travail du bras sans tirer.
  4. Alimentez le bras à partir d’une batterie séparée ou d’une alimentation régulée dans le châssis AGV. Ne partagez pas la batterie d'entraînement AGV avec le contrôleur du bras sans une isolation appropriée.

Session de plateforme multi-nœuds

Lancez les deux agents pointant vers le même ID de session. Ils s'enregistrent en tant que nœuds indépendants et la plateforme enregistre les deux flux de manière synchrone :

# 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

Dans le panneau téléop de Fearless Platform, les deux nœuds apparaissent. Les opérateurs peuvent envoyer des commandes de mouvement à l'AGV (axe x/y/z) et des commandes d'armement indépendamment au cours de la même session. L'enregistrement des épisodes capture la télémétrie de tous les nœuds dans une seule archive JSONL : la trajectoire complète de manipulation mobile, y compris la vitesse de base et les positions des articulations des bras, synchronisées par horodatage.

Voir aussi. Le Concentrateur matériel OpenArm 101 et le Kit bimanuel DK1 La page contient des guides de configuration spécifiques au bras. Terminez la configuration du bras avant l’étape de montage ci-dessus.
7

Configuration du bus CAN et du moteur

Configurez le bus CAN FD et définissez les ID de moteur pour tous les actionneurs Damiao montés sur l'AGV.

Lorsqu'un bras OpenArm ou DK1 est monté sur la plaque supérieure de l'AGV, ses moteurs Damiao QDD communiquent via un bus CAN FD depuis l'ordinateur de bord. Cette section couvre l'activation du bus, l'attribution de l'ID du moteur, les commandes de mise en service et les diagnostics des LED.

Transmission AGV vs moteurs à bras. Le mouvement AGV est contrôlé via UART5/DBUS — et non CAN. Le bus CAN FD décrit ici est exclusivement destiné aux moteurs Damiao QDD dans toute charge utile de bras de robot monté sur l'AGV. N'essayez pas d'envoyer des trames CAN au contrôleur de transmission AGV.

Installateur can-utils

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

Afficher l'interface CAN FD

CAN FD à 1 Mbit/s nominal + 5 Mbit/s de données est le mode recommandé pour tous les nouveaux déploiements :

# 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 OpenArm PPA est installé, le script d'assistance encapsule ces commandes :

# 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

Surveiller le bus

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

# Dump with timestamps
candump -td can0

Attribution de l'ID du moteur (J1 à J8)

Chaque moteur Damiao sur le bus CAN doit avoir une paire unique d'identifiants : un identifiant d'émetteur (hôte → moteur) et un identifiant de récepteur (moteur → hôte). Les ID sont configurés à l'aide de l'outil de débogage Damiao Windows avant l'assemblage du bras. Cartographie OpenArm standard :

Articulation Modèle de moteur ID TX (hôte → moteur) ID RX (moteur → hôte)
J1 — rotation de la baseDM-J4340p-2EC0x010x11
J2 — pas d'épauleDM-J4340p-2EC0x020x12
J3 – roulement d’épauleDM-J4340p-2EC0x030x13
J4 — pas de coudeDM-J4340-2EC0x040x14
J5 — roulement du coudeDM-J4340-2EC0x050x15
J6 — pas du poignetDM-J4340-2EC0x060x16
J7 — roulement du poignetDM-J4310-2EC V1.10x070x17
J8 — grottesDM-J4310-2EC V1.10x080x18

Les identifiants sont uniques par bus CAN, pas globalement. Une configuration bimanuelle (deux bras) utilise un deuxième bus — can1 - avec le même schéma d'identification.

cansend Commandes de test

Utiliser cansend pour une mise en service de bas niveau. Remplacer 001 avec l'ID hexadécimal TX de l'articulation cible (par exemple, 002 pour 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
Faites correspondre le type de trame au mode bus. Utilisez le ##1 Syntaxe CAN FD lorsque l'interface a été configurée avec fd on, et le single # syntaxe classique pour CAN 2.0. Le mélange de types de trames sur le même bus entraînera des erreurs de bus.

Indicateurs d'état LED

Chaque moteur Damiao possède une seule LED intégrée visible à travers la fenêtre du boîtier :

Modèle de LED État Action requise
Vert (fixe) Moteur activé et prêt Aucun — le moteur est actif et accepte les commandes
Rouge (fixe) Moteur désactivé (alimenté, non activé) Envoyez la commande Enable pour activer le moteur
Rouge (clignotant) Défaut moteur / état d'erreur Envoyez la commande Clear Error, recherchez la cause, puis réactivez

Causes de défaut courantes : surintensité (réduire les gains ou la charge), surchauffe (autoriser le refroidissement), erreur d'encodeur (réinstaller les câbles), sous-tension (alimentation inférieure à ~ 18 V sur un système 24 V), bus CAN désactivé (vérifier la terminaison et le câblage).

Avertissements d'écriture Flash

Limite d'écriture Flash : ~10 000 cycles par moteur. L'ID du moteur et le stockage des paramètres utilisent la mémoire flash interne. Définir les ID CAN et les paramètres d'étalonnage une fois pendant la mise en service et les laisser définitivement. Les modifications des paramètres d'exécution sont appliquées sans le --flash Le drapeau va uniquement à la RAM et ne consomme pas de cycles de flash. Évitez les scripts qui reflashent à plusieurs reprises les paramètres du moteur.
La configuration des identifiants nécessite l'outil Windows Damiao. Les ID CAN doivent être définis à l’aide Débogage_Tools_v.1.6.8.8.exe - connectez un seul moteur à la fois pour éviter les collisions d'identification. Voir la référence complète du moteur pour des instructions étape par étape.
Voir les spécifications complètes → FAQ et communauté → Wiki du développeur →

Besoin d'aide ?

Demandez à la communauté ou contactez le support SVRC avec le résultat de dami_agent.py --mock et le chemin de votre port série.