Datenerfassung

OpenArm ist als datennative Plattform konzipiert. Dieser Leitfaden deckt alles ab, von der Verkabelung von Kameras bis zur Aufnahme von Episoden im LeRobot-Format, mit Qualitätskontrollen in jeder Phase.

Vor der Aufnahme

Hardware-Anschlüsse für die Aufnahme

Die Datenerfassung erfordert mehr Hardware als die einfache Armsteuerung. In diesem Abschnitt erfahren Sie, was Sie wo anschließen müssen, bevor Sie LeRobot starten.

📷

Handkamera

Montieren Sie eine USB-Webcam oder Intel RealSense D435i am Endeffektorflansch. Verbindung über USB 3.0 für mehr als 30 fps. Verifizieren: ls /dev/video*

📖

Overhead-/Arbeitsplatzkamera

Feste Kamera über dem Arbeitsbereich für eine globale Ansicht. Montage ca. 60 cm über dem Tisch, 30° nach unten geneigt. Zweiter USB 3.0-Anschluss.

🔌

CAN-Bus (Armsteuerung)

Bereits vom Setup her verbunden. Verifizieren: ip link show can0. Die CAN-Schnittstelle muss vor dem Start von LeRobot aktiv sein.

👤

Teleop-Gerät

3D SpaceMouse, ein zweiter OpenArm als Führungsarm oder ein Gamepad. Leader-Follower mit zwei OpenArms bietet Demonstrationen höchster Qualität.

Hinweis zur Kamerasynchronisierung: LeRobot versieht alle Streams auf Host-PC-Ebene mit einem Zeitstempel. Verwenden Sie für Multikamera-Setups USB 3.0-Hubs (keine USB 2.0-Hubs), um Latenzunterschiede zwischen Kamerabildern und gemeinsamen Zustandsmessungen zu minimieren. Ziel: < 5 ms Zeitversatz zwischen Streams.

Aufnahme-Workflow

Schritt-für-Schritt-Aufzeichnungsworkflow

Befolgen Sie diese Schritte für jede Aufnahmesitzung. Jeder Schritt baut auf dem letzten auf – überspringen Sie keine Schritte.

1

Sicherheitscheck vor der Sitzung

Räumen Sie den Arbeitsbereich frei (1-m-Radius), stellen Sie sicher, dass der Arm die Ausgangsposition ungehindert erreicht, und testen Sie den Not-Aus-Schalter vor der Aufnahme. Sehen Sicherheitsseite.

2

Rufen Sie die CAN-Schnittstelle und ROS2 auf

sudo ip link set up can0
source /opt/ros/humble/setup.bash
source ~/openarm_ws/install/setup.bash
ros2 launch openarm_ros2 openarm.launch.py use_fake_hardware:=false can_interface:=can0
3

Bringe den Arm nach Hause

Führen Sie vor jeder Sitzung die Referenzierungsroutine aus, um die Referenzposition festzulegen. Der Arm muss seine Ausgangsposition erreichen, ohne dass der Endeffektor belastet wird.

python3 -m openarm_can.scripts.home --interface can0
4

Überprüfen Sie Kamera-Feeds

Überprüfen Sie, ob alle Kameras streamen, bevor Sie LeRobot starten. Eine fehlende Kamera beschädigt Ihren Datensatz stillschweigend, wenn LeRobot dies nicht meldet.

# Quick camera check (press Q to exit)
python3 -c "
import cv2
for i in range(4):
    cap = cv2.VideoCapture(i)
    if cap.isOpened():
        print(f'Camera {i}: OK')
    cap.release()
"
5

Richten Sie die Aufgabenszene ein

Platzieren Sie Objekte an einheitlichen Startpositionen. Eine konsistente Szeneninitialisierung ist für die Verallgemeinerung von Richtlinien von entscheidender Bedeutung. Fotografieren oder markieren Sie die Ausgangskonfiguration.

6

Starten Sie die LeRobot-Aufzeichnung

source ~/.venvs/openarm/bin/activate
python -m lerobot.scripts.control_robot \
  --robot.type=openarm \
  --control.type=record \
  --control.fps=30 \
  --control.repo_id=your-username/openarm-pick-place-v1 \
  --control.num_episodes=50 \
  --control.single_task="Pick up the red cube and place it in the bin" \
  --control.warmup_time_s=5 \
  --control.reset_time_s=10

LeRobot wird Sie vor jeder Episode dazu auffordern. Verwenden Sie warmup_time_s, um Ihre Teleop-Position vorzubereiten, bevor die Aufnahme beginnt.

7

Überprüfen und wiederholen Sie Episoden

Nach der Aufnahme können Sie verdächtige Episoden noch einmal abspielen, bevor Sie den Datensatz fertigstellen. Löschen Sie Episoden mit schlechter Qualität sofort.

python -m lerobot.scripts.visualize_dataset \
  --repo_id=your-username/openarm-pick-place-v1 \
  --episode_index=0
8

Drücken Sie auf HuggingFace Hub

huggingface-cli login
python -m lerobot.scripts.push_dataset_to_hub \
  --repo_id=your-username/openarm-pick-place-v1
Datensatzformat

LeRobot-Datensatzformat

LeRobot speichert Datensätze im HuggingFace-Datensatzformat unter Verwendung von Parquet-Dateien für tabellarische Daten und MP4/PNG-Dateien für Bildstreams. Jede Episode ist eine Abfolge zeitgestempelter Beobachtungen und Aktionen.

Verzeichnisstruktur

your-username/openarm-pick-place-v1/
├── meta/
│   ├── info.json          # Dataset metadata, fps, shapes
│   ├── episodes.jsonl     # Per-episode metadata (task, length, outcome)
│   └── stats.json         # Min/max/mean/std for all fields
├── data/
│   └── chunk-000/
│       ├── episode_000000.parquet
│       ├── episode_000001.parquet
│       └── ...
└── videos/
    └── chunk-000/
        ├── observation.images.wrist_cam/
        │   ├── episode_000000.mp4
        │   └── ...
        └── observation.images.overhead_cam/
            └── ...

Episodendatenschema

Felder in jeder Episoden-Parquet-Datei
Beobachtungszustand float32[8] Gelenkpositionen im Bogenmaß (8 DOF)
Beobachtungsgeschwindigkeit float32[8] Gelenkgeschwindigkeiten in rad/s
Beobachtungsaufwand float32[8] Gelenkdrehmomente in Nm
Beobachtungsbilder.* Videopfad Verweis auf Frame in MP4-Videodatei
Aktion float32[8] Zielen Sie die Gelenkpositionen vom Teleop-Gerät aus
Zeitstempel float64 Unix-Zeitstempel in Sekunden
Frame_Index int64 Bildnummer innerhalb der Episode
Episodenindex int64 Episodennummer im Datensatz
weiter.fertig bool Stimmt im letzten Frame einer Episode
task_index int64 Index in der Nachschlagetabelle für Aufgabenbeschreibungen

Fehlerepisoden als Daten

OpenArm ist darauf ausgelegt, Fehlversuche und nicht nur Erfolge sicher aufzuzeichnen. Fehlerverläufe – Ausrutscher, Missverständnisse, Kollisionen, Wiederherstellungsversuche – sind erstklassige Daten, die für eine robuste Verallgemeinerung von Richtlinien von entscheidender Bedeutung sind. Fehlerepisoden nicht automatisch löschen. Kommentieren Sie sie stattdessen mit dem success Feld in Episodenmetadaten ein und lassen Sie das Trainings-Framework entscheiden, ob diese verwendet werden sollen.

Qualitätssicherung

Qualitätscheckliste für gesammelte Daten

Gehen Sie diese Checkliste nach jeder Aufnahmesitzung und vor der Übertragung an den Hub durch. Schlechte Datenqualität schadet der politischen Leistung mehr als eine niedrige Episodenzahl.

  • 1
    Die Episodenlänge ist konsistent Alle Episoden für dieselbe Aufgabe sollten innerhalb von ±30 % der mittleren Länge liegen. Ausreißer weisen in der Regel darauf hin, dass der Bediener eine Pause gemacht hat, einen Griff verpasst hat oder die Aufzeichnung unterbrochen wurde.
  • 2
    Keine fehlenden Kamerabilder Überprüfen Sie, ob jede Episode die erwartete Anzahl an Frames pro Stream hat. Laufen lerobot.scripts.visualize_dataset in 3–5 Episoden, um die Videoqualität zu überprüfen.
  • 3
    Gelenkpositionen liegen innerhalb sicherer Grenzen Verifizieren observation.state überschreitet niemals die gemeinsamen Grenzwerte in Spezifikationen. Hochgeschwindigkeitsspitzen deuten auf einen CAN-Ausfall oder einen Steuerfehler hin – löschen Sie diese Episoden.
  • 4
    Die Aufgabenszene wurde zwischen den Episoden zurückgesetzt Jede Episode muss mit dem Objekt in derselben Ausgangsposition beginnen. Wenn Sie ein Zurücksetzen übersprungen haben, lernt die Richtlinie aus inkonsistenten Anfangsbedingungen und lässt sich schlecht verallgemeinern.
  • 5
    Die Kameraabdeckung ist abgeschlossen Die Handgelenkkamera sollte immer den Endeffektor und das manipulierte Objekt zeigen. Die Overhead-Kamera sollte den gesamten Arbeitsbereich zeigen. Passen Sie die Halterungen neu an, wenn das Objekt mitten in der Episode das Bild verlässt.
  • 6
    Der Demonstrationsstil ist konsistent Alle Bediener sollten den gleichen Annäherungspfad und Greifstil verwenden. Gemischte Strategien verwirren die politische Ausbildung. Verwenden Sie einen einzelnen Operator pro Aufgabenversion oder kennzeichnen Sie Episoden nach Operator.
  • 7
    Die Datensatzstatistiken sehen vernünftig aus Überprüfen meta/stats.json nach der Aufnahme. Stellen Sie sicher, dass der Aktionsmittelwert nahe Null liegt (nicht an gemeinsamen Grenzen hängen bleibt) und dass der Aktionsstandardwert groß genug ist, um Variationen über Episoden hinweg anzuzeigen.
  • 8
    Die Erfolgsquote wird dokumentiert Notieren Sie die menschliche Erfolgsquote während der Sammlung. Eine Erfolgsquote von 60–70 % ist typisch für kontaktreiche Aufgaben. Ein geringerer Erfolg kann darauf hindeuten, dass die Aufgabe zu schwer ist. Ein höherer Wert kann bedeuten, dass die Aufgabe zu einfach ist, um ein nützliches Trainingssignal zu liefern.
Nächster Schritt

Trainieren einer Richtlinie aus Ihrem Datensatz

Sobald Ihr Datensatz die Qualitätscheckliste besteht, können Sie ACT oder Diffusion Policy direkt mit LeRobot trainieren.

Trainiere ACT

python -m lerobot.scripts.train \
  --policy.type=act \
  --dataset.repo_id=your-username/openarm-pick-place-v1 \
  --policy.chunk_size=100 \
  --training.num_epochs=5000 \
  --output_dir=outputs/act-pick-place

Zugverbreitungspolitik

python -m lerobot.scripts.train \
  --policy.type=diffusion \
  --dataset.repo_id=your-username/openarm-pick-place-v1 \
  --training.num_epochs=8000 \
  --output_dir=outputs/diffusion-pick-place

Gehen Sie tiefer: Lesen Sie den vollständigen Text Übersicht über die Datenerfassungspipeline in der Robotics Library für eine ausführliche Behandlung der Episodenstruktur, Datensatzversionierung, Sim-to-Real-Ausrichtung und Multitasking-Datensatzzusammensetzung.

Datensatz bereit? Beginnen Sie mit dem Training.

Übertragen Sie Ihren Datensatz an HuggingFace und beginnen Sie mit dem Training von ACT oder Diffusion Policy.