Damiao AGV-Einrichtungsanleitung

Vom Auspacken bis zum Fahren über Ihren Browser. Deckt Sicherheit beim Auspacken, Aufladen, Software, Teleoperation, autonome Navigation und Armmontage ab.

Schweres Gerät – Teamlift erforderlich. Das Damiao AGV ist eine leistungsstarke mobile Plattform. Verwenden Sie zum Auspacken und Neupositionieren immer einen Zwei-Personen-Lift. Stellen Sie vor dem ersten Einschalten sicher, dass der Arbeitsbereich in alle Richtungen mindestens 2 m Freiraum hat.
1

Auspacken und Sicherheitscheck

Überprüfen Sie das AGV und bereiten Sie den Arbeitsbereich vor

Teamlift erforderlich. Heben Sie das AGV mit zwei Personen aus der Versandkiste. Heben Sie das Gerät an der Unterseite des Fahrgestells an – niemals an den Rädern oder an hervorstehenden Elektronikgeräten. Stellen Sie die Plattform mit angezogenen Bremsen (falls vorhanden) auf eine ebene, harte Oberfläche.
  1. 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.
  2. Ü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.
  3. 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.
  4. 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.
  5. 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.
2

Laden des Akkus und Einschalten

Laden Sie den Akku vor dem ersten Gebrauch vollständig auf

  1. 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.
  2. 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.
  3. 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).
  4. 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.
Sicherheit des LiPo-Akkus. Wenn das AGV einen LiPo-Akku (üblich) verwendet, entladen Sie ihn niemals unter die minimale Zellenspannung (normalerweise 3,0 V/Zelle). Bei Nichtgebrauch länger als eine Woche bei 50 % Ladung lagern. Laden Sie niemals einen aufgeblähten oder beschädigten LiPo auf.
3

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
Testen Sie zunächst ohne Hardware. Führen Sie den Agenten im Scheinmodus aus, um die vollständige Befehlspipeline zu überprüfen, bevor Sie das AGV verbinden:
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.
4

Teleoperation

Steuern Sie das AGV von Ihrem Browser aus über die Fearless-Plattform

  1. Offen platform.roboticscenter.ai, navigieren Sie zum Abschnitt „Teleop“ und erstellen Sie eine neue Sitzung. Kopieren Sie die Sitzungs-ID (Format: RC-XXXX-XXXX).
  2. 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
  3. 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.
  4. Öffnen Sie die Sitzungs-URL in Ihrem Browser. Verwenden Sie zum Senden die Richtungssteuerung move Befehle. 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.

5

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 --amp Wert und gemessene Höchstgeschwindigkeit. Beginnen Sie konservativ (0,3 m/s).
  • max_vel_theta — Drehzahlbegrenzung. Messen Sie langsam --amp 400 erst mal testen.
  • Holonom – Auf einstellen true im DWB-Lokalplaner, um die seitliche Bewegungsplanung zu ermöglichen (erforderlich für Mecanum/Omni-Räder).
Teleop-Sicherheit während der Navigation. Halten Sie das Teleop-Panel der Fearless-Plattform während des autonomen Navigationstests geöffnet. Die 300-ms-Befehlszeitüberschreitung des Agenten bedeutet, dass das AGV automatisch stoppt, wenn nav2 die Veröffentlichung von Zielen einstellt – und so zusätzlich zum physischen Abschaltschalter ein Sicherheitsnetz auf Softwareebene bietet.
6

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

  1. Schalten Sie das AGV aus und aktivieren Sie es vor allen mechanischen Arbeiten.
  2. 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.
  3. 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.
  4. 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.

Siehe auch. Der OpenArm 101-Hardware-Hub und die DK1 Bimanual-Kit Die Seite enthält armspezifische Einrichtungsanleitungen. Schließen Sie die Armeinrichtung vor dem oben genannten Montageschritt ab.
7

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.

AGV-Antriebsstrang vs. Armmotoren. Die FTS-Bewegung wird über UART5/DBUS gesteuert – nicht über CAN. Der hier beschriebene CAN-FD-Bus ist ausschließlich für Damiao-QDD-Motoren in allen auf dem AGV montierten Roboterarm-Nutzlasten vorgesehen. Versuchen Sie nicht, CAN-Frames an die AGV-Antriebssteuerung zu senden.

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 – GrundrotationDM-J4340p-2EC0x010x11
J2 – SchulterneigungDM-J4340p-2EC0x020x12
J3 – SchulterrolleDM-J4340p-2EC0x030x13
J4 – EllenbogenneigungDM-J4340-2EC0x040x14
J5 – EllenbogenrolleDM-J4340-2EC0x050x15
J6 – HandgelenksneigungDM-J4340-2EC0x060x16
J7 – HandgelenksrolleDM-J4310-2EC V1.10x070x17
J8 – GreiferDM-J4310-2EC V1.10x080x18

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
Rahmentyp an Busmodus anpassen. Benutzen Sie die ##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-Schreiblimit: ~10.000 Zyklen pro Motor. Die Speicherung von Motor-ID und Parametern erfolgt über einen internen Flash-Speicher. Legen Sie CAN-IDs und Kalibrierungsparameter fest einmal während der Inbetriebnahme und belassen Sie diese dauerhaft. Laufzeitparameteränderungen werden ohne angewendet --flash Flag geht nur in den RAM und verbraucht keine Flash-Zyklen. Vermeiden Sie Skripte, die Motorparameter wiederholt neu flashen.
Für die Konfiguration von IDs ist das Windows-Tool Damiao erforderlich. CAN-IDs müssen mit eingestellt werden Debugging_Tools_v.1.6.8.8.exe — Schließen Sie jeweils nur einen Motor an, um ID-Kollisionen zu vermeiden. Sehen die vollständige Motorreferenz für Schritt-für-Schritt-Anleitungen.
Vollständige Spezifikationen anzeigen → FAQ & Community → Entwickler-Wiki →

Brauchen Sie Hilfe?

Fragen Sie die Community oder kontaktieren Sie den SVRC-Support mit der Ausgabe von dami_agent.py --mock und Ihren seriellen Portpfad.