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.
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.
Schritt-für-Schritt-Aufzeichnungsworkflow
Befolgen Sie diese Schritte für jede Aufnahmesitzung. Jeder Schritt baut auf dem letzten auf – überspringen Sie keine Schritte.
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.
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
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
Ü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()
"
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.
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.
Ü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
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
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
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ä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.
-
1Die 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.
-
2Keine fehlenden Kamerabilder Überprüfen Sie, ob jede Episode die erwartete Anzahl an Frames pro Stream hat. Laufen
lerobot.scripts.visualize_datasetin 3–5 Episoden, um die Videoqualität zu überprüfen. -
3Gelenkpositionen 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. -
4Die 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.
-
5Die 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.
-
6Der 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.
-
7Die Datensatzstatistiken sehen vernünftig aus Überprüfen
meta/stats.jsonnach 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. -
8Die 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.
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.