Damiao AGV-Einrichtungsanleitung
Vom Auspacken bis zum Fahren über Ihren Browser. Deckt Sicherheit beim Auspacken, Aufladen, Software, Teleoperation, autonome Navigation und Armmontage ab.
Auspacken und Sicherheitscheck
Überprüfen Sie das AGV und bereiten Sie den Arbeitsbereich vor
- Verpackung entfernen. Entfernen Sie vorsichtig alle Schaumstoffeinlagen, Kabelbinder und Transportsicherungen. Untersuchen Sie die Räder auf Transportschäden – alle vier Mecanum-Räder sollten sich frei von Hand drehen lassen.
- Überprüfen Sie die Anschlüsse. Überprüfen Sie, ob alle Kabelanschlüsse am Hauptcontroller fest sitzen. Durch Transporterschütterungen werden gelegentlich JST- oder Deans-Anschlüsse gelöst.
- Freiraum für den Arbeitsplatz. Machen Sie vor dem Einschalten mindestens 2 m freien Raum in alle Richtungen frei. Das AGV kann schnell beschleunigen – Umstehende sollten während der Erstbewegungstests zurückhalten.
- Nothalt. Suchen Sie den Hauptstrom-Ausschalter am Gehäuse. Informieren Sie sich vor dem Einschalten darüber, wie Sie es erreichen. Halten Sie bei der ersten Sitzung immer eine Hand in der Nähe des Cutoffs.
- Oberflächenprüfung. Für eine korrekte omnidirektionale Leistung benötigen die Mecanum-Räder eine ebene, harte Oberfläche (Beton, Holzboden oder glatte Fliesen). Teppiche und unebene Oberflächen verringern die seitliche Kontrollbefugnis erheblich.
Laden des Akkus und Einschalten
Laden Sie den Akku vor dem ersten Gebrauch vollständig auf
- Schließen Sie das Ladegerät an. Suchen Sie den Batterieladeanschluss am AGV-Chassis (normalerweise ein großer Hohlstecker oder XT60-Anschluss). Schließen Sie das mitgelieferte Balance-Ladegerät an. Stecken Sie das Ladegerät in eine geerdete 110/220-V-Steckdose.
- Vollständig aufladen. Lassen Sie den Akku vor dem ersten Gebrauch vollständig aufladen – normalerweise 2–4 Stunden, je nach Ausgangszustand. Sobald der Ladevorgang abgeschlossen ist, leuchtet die LED des Ladegeräts grün (oder hört auf zu blinken). Lassen Sie das Gerät beim ersten Aufladen nicht unbeaufsichtigt.
- Batteriespannung prüfen. Nach dem Laden sollte die Batteriespannung dem Nennwert für den voll aufgeladenen Zustand entsprechen (überprüfen Sie das Etikett Ihres Batteriesatzes). Verwenden Sie ein Multimeter oder das integrierte Display (falls vorhanden).
- Einschaltsequenz. Schließen Sie die Batterie an den Hauptcontroller an. Schalten Sie den Hauptnetzschalter um. Der Controller sollte innerhalb von 5–10 Sekunden hochfahren – die Anzeige-LEDs stabilisieren sich. Senden Sie beim Booten keine Bewegungsbefehle.
Software und ROS2-Navigationsstack
Installieren Sie den Python-Agenten und optionale ROS2-Pakete auf Ihrem PC
Der dami_agent.py Das Skript ist die primäre Brücke zwischen der Fearless-Plattform und der AGV-Hardware. Es erfordert Python 3.8+ und zwei Pip-Pakete.
# 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
Verkabeln Sie den USB-zu-TTL-Adapter: Schließen Sie die Adapter an TX Pin an den AGV-Hauptcontroller anschließen UART5_RX (Pin PD2). Verbinden Sie GND mit GND. Verbinden Sie NICHT den RX-Pin oder 5V des Adapters mit dem AGV.
Installieren Sie für die ROS2-Integration den Navigationsstapel:
# 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
Der Mock-Modus überspringt das Öffnen der seriellen Schnittstelle. Die gesamte WebSocket-Befehlsanalyse, Telemetrieweiterleitung und Timeout-Sicherheitslogik läuft identisch ab.
Teleoperation
Steuern Sie das AGV von Ihrem Browser aus über die Fearless-Plattform
- Offen platform.roboticscenter.ai, navigieren Sie zum Abschnitt „Teleop“ und erstellen Sie eine neue Sitzung. Kopieren Sie die Sitzungs-ID (Format:
RC-XXXX-XXXX). - Starten Sie den Agenten mit Ihrem seriellen Port und Ihrer Sitzungs-ID:
python3 dami_agent.py \ --session RC-XXXX-XXXX \ --serial-port /dev/ttyUSB0 \ --backend ws://localhost:8000
- Der Agent stellt eine Verbindung zur Plattform her und registriert den AGV-Knoten als
device_type: "mobile_base", und beginnt den Regelkreis bei 30 Hz. - Öffnen Sie die Sitzungs-URL in Ihrem Browser. Verwenden Sie zum Senden die Richtungssteuerung
moveBefehle. Das AGV reagiert innerhalb eines Regelkreis-Ticks (33 ms bei 30 Hz).
Vom Agent akzeptierte Befehlstypen:
# 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}}
Um die Bewegungsgeschwindigkeit anzupassen, verwenden Sie die --amp Parameter (Standard 660, empfohlener Bereich 500–760). Höhere Werte erzeugen eine schnellere Bewegung:
python3 dami_agent.py --session RC-XXXX-XXXX --serial-port /dev/ttyUSB0 --amp 500
Wenn sich das AGV in die falsche Richtung bewegt, verwenden Sie --invert-x, --invert-y, oder --invert-z Achsen ohne Firmware-Änderung umzudrehen.
Autonome Navigationseinrichtung
Konfigurieren Sie ROS2 Nav2, SLAM und Wegpunktverfolgung
Veröffentlichen Sie für die autonome Navigation Odometrie- und Sensordaten (von einem LiDAR oder einer Tiefenkamera auf dem AGV) in ROS2-Themen und verwenden Sie dann nav2 für die Pfadplanung.
# 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}}}}"
Wichtige nav2-Parameter zur Abstimmung auf das Damiao AGV:
- robot_radius — Auf die halbe Breite des AGV zuzüglich eines Sicherheitsspielraums (typischerweise 0,4–0,6 m) eingestellt.
- max_vel_x / max_vel_y – Stellen Sie es basierend auf Ihren Anforderungen ein
--ampWert und gemessene Höchstgeschwindigkeit. Beginnen Sie konservativ (0,3 m/s). - max_vel_theta — Drehzahlbegrenzung. Messen Sie langsam
--amp 400erst mal testen. - Holonom – Auf einstellen
trueim DWB-Lokalplaner, um die seitliche Bewegungsplanung zu ermöglichen (erforderlich für Mecanum/Omni-Räder).
Montage eines Roboterarms
Schrauben Sie einen OpenArm oder DK1 an die obere Platte und registrieren Sie beide in einer Plattformsitzung
Die obere Platte des Damiao AGV ist für die Aufnahme von Standard-Roboterarm-Basisflanschen ausgelegt. Dieser Schritt umfasst die physische Integration und die Einrichtung der Fearless Platform-Sitzung mit mehreren Knoten.
Physische Montage
- Schalten Sie das AGV aus und aktivieren Sie es vor allen mechanischen Arbeiten.
- Positionieren Sie die Grundplatte des Roboterarms über den Befestigungslöchern der AGV-Oberplatte. Verwenden Sie die mitgelieferten M6-Innensechskantschrauben (oder M5 für leichtere Arme). Tragen Sie auf alle Befestigungselemente Schraubensicherungsmasse auf.
- Führen Sie die Strom- und CAN/USB-Kabel des Arms durch den Kabelführungskanal in der oberen Platte nach unten zum AGV-Chassisfach. Befestigen Sie ihn mit Kabelbindern – lassen Sie ausreichend Spielraum für den gesamten Arbeitsbereich des Arms, ohne zu ziehen.
- Betreiben Sie den Arm über eine separate Batterie oder eine geregelte Stromversorgung im AGV-Chassis. Teilen Sie die AGV-Antriebsbatterie nicht ohne entsprechende Isolierung mit der Armsteuerung.
Plattformsitzung mit mehreren Knoten
Starten Sie beide Agenten, die auf dieselbe Sitzungs-ID verweisen. Sie registrieren sich als unabhängige Knoten und die Plattform zeichnet beide Streams synchron auf:
# 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
Im Teleop-Panel der Fearless Platform werden beide Knoten angezeigt. Bediener können in derselben Sitzung unabhängig voneinander Bewegungsbefehle an das AGV (Achse x/y/z) und Scharfschaltbefehle senden. Die Episodenaufzeichnung erfasst die Telemetriedaten aller Knoten in einem einzigen JSONL-Archiv – die vollständige mobile Manipulationsbahn einschließlich Basisgeschwindigkeit und Armgelenkpositionen, synchronisiert durch Zeitstempel.
CAN-Bus- und Motorkonfiguration
Konfigurieren Sie den CAN-FD-Bus und legen Sie Motor-IDs für alle am AGV montierten Damiao-Aktuatoren fest
Wenn ein OpenArm- oder DK1-Arm auf der oberen Platte des AGV montiert ist, kommunizieren seine Damiao-QDD-Motoren über einen CAN-FD-Bus mit dem Bordcomputer. In diesem Abschnitt werden Busaufbau, Motor-ID-Zuweisung, Inbetriebnahmebefehle und LED-Diagnose behandelt.
Can-Utils installieren
# Install SocketCAN utilities (Ubuntu / Debian)
sudo apt update && sudo apt install -y can-utils
Rufen Sie die CAN-FD-Schnittstelle auf
CAN FD mit 1 Mbit/s nominal + 5 Mbit/s Daten ist der empfohlene Modus für alle neuen Bereitstellungen:
# 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
Wenn Sie OpenArm PPA installiert haben, umschließt das Hilfsskript diese Befehle:
# 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
Überwachen Sie den Bus
# Dump all CAN frames — verify connectivity before sending commands candump -x can0 # Dump with timestamps candump -td can0
Motor-ID-Zuweisung (J1–J8)
Jeder Damiao-Motor am CAN-Bus muss ein eindeutiges ID-Paar haben: eine Sender-ID (Host → Motor) und eine Empfänger-ID (Motor → Host). IDs werden vor der Armmontage mit dem Damiao Windows-Debugging-Tool konfiguriert. Standard-OpenArm-Zuordnung:
| Gemeinsam | Motormodell | TX-ID (Host → Motor) | RX-ID (Motor → Host) |
|---|---|---|---|
| J1 – Grundrotation | DM-J4340p-2EC | 0x01 | 0x11 |
| J2 – Schulterneigung | DM-J4340p-2EC | 0x02 | 0x12 |
| J3 – Schulterrolle | DM-J4340p-2EC | 0x03 | 0x13 |
| J4 – Ellenbogenneigung | DM-J4340-2EC | 0x04 | 0x14 |
| J5 – Ellenbogenrolle | DM-J4340-2EC | 0x05 | 0x15 |
| J6 – Handgelenksneigung | DM-J4340-2EC | 0x06 | 0x16 |
| J7 – Handgelenksrolle | DM-J4310-2EC V1.1 | 0x07 | 0x17 |
| J8 – Greifer | DM-J4310-2EC V1.1 | 0x08 | 0x18 |
IDs sind pro CAN-Bus eindeutig, nicht global. Ein bimanuelles Setup (zwei Arme) verwendet einen zweiten Bus – can1 – mit dem gleichen ID-Schema.
kann Testbefehle senden
Verwenden cansend für die Inbetriebnahme auf niedriger Ebene. Ersetzen 001 mit der Hex-TX-ID des Zielgelenks (z. B. 002 für 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 CAN-FD-Syntax, als die Schnittstelle mit konfiguriert wurde fd on, und die Single # klassische Syntax für CAN 2.0. Das Mischen von Frame-Typen auf demselben Bus führt zu Busfehlern.
LED-Statusanzeigen
Jeder Damiao-Motor verfügt über eine einzelne integrierte LED, die durch das Gehäusefenster sichtbar ist:
| LED-Muster | Zustand | Aktion erforderlich |
|---|---|---|
| Grün (konstant) | Motor aktiviert und bereit | Keine – der Motor ist aktiv und akzeptiert Befehle |
| Rot (dauerhaft) | Motor deaktiviert (mit Strom versorgt, nicht aktiviert) | Senden Sie den Enable-Befehl, um den Motor zu aktivieren |
| Fäulnis (glänzend) | Motorfehler/Fehlerzustand | Senden Sie den Befehl „Fehler löschen“, untersuchen Sie die Ursache und aktivieren Sie ihn dann erneut |
Häufige Fehlerursachen: Überstrom (Verstärkungen oder Last reduzieren), Übertemperatur (Kühlung zulassen), Encoderfehler (Kabel neu einsetzen), Unterspannung (Versorgung unter ~18 V in einem 24-V-System), CAN-Bus-Aus (Abschluss und Verkabelung prüfen).
Flash-Write-Warnungen
--flash Flag geht nur in den RAM und verbraucht keine Flash-Zyklen. Vermeiden Sie Skripte, die Motorparameter wiederholt neu flashen.