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.
Déballage et contrôle de sécurité
Inspecter l'AGV et préparer l'espace de travail
- 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.
- 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.
- 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.
- 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.
- 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.
Chargement et mise sous tension de la batterie
Chargez complètement la batterie avant la première utilisation
- 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.
- 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.
- 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é.
- 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.
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
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.
Téléopération
Pilotez l'AGV depuis votre navigateur via la plateforme Fearless
- Ouvrir platform.roboticscenter.ai, accédez à la section Teleop et créez une nouvelle session. Copiez l'ID de session (format :
RC-XXXX-XXXX). - 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
- 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. - Ouvrez l'URL de la session dans votre navigateur. Utilisez les commandes directionnelles pour envoyer
movecommandes. 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.
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
--ampvaleur et vitesse maximale mesurée. Commencez prudemment (0,3 m/s). - max_vel_theta — Limite de vitesse de rotation. Mesurez avec un ralenti
--amp 400tester d'abord. - holonomique — Régler sur
truedans le planificateur local DWB pour permettre la planification des mouvements latéraux (requis pour les roues mecanum/omni).
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
- Éteignez l'AGV et armez-le avant tout travail mécanique.
- 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.
- 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.
- 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.
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.
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 base | DM-J4340p-2EC | 0x01 | 0x11 |
| J2 — pas d'épaule | DM-J4340p-2EC | 0x02 | 0x12 |
| J3 – roulement d’épaule | DM-J4340p-2EC | 0x03 | 0x13 |
| J4 — pas de coude | DM-J4340-2EC | 0x04 | 0x14 |
| J5 — roulement du coude | DM-J4340-2EC | 0x05 | 0x15 |
| J6 — pas du poignet | DM-J4340-2EC | 0x06 | 0x16 |
| J7 — roulement du poignet | DM-J4310-2EC V1.1 | 0x07 | 0x17 |
| J8 — grottes | DM-J4310-2EC V1.1 | 0x08 | 0x18 |
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
##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
--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.