Datenerfassung

Der SO-101 ist einer der am häufigsten verwendeten Datenerfassungsarme in der LeRobot-Community. Dieser Leitfaden deckt alles ab, von Hardwareverbindungen über das Aufzeichnen von Episoden bis hin zum Übertragen Ihres Datensatzes an HuggingFace.

Vor der Aufnahme

Hardware-Setup für die Aufnahme

Der Datenerfassungsaufbau des SO-101 ist einfacher als bei CAN-Bus-Armen – alles läuft über USB. Hier erfahren Sie, was Sie verbinden müssen.

📷

Arbeitsplatzkamera

USB-Webcam, die von oben oder von der Seite auf den Arbeitsplatz gerichtet ist. Montieren Sie es an einer festen Position – bewegen Sie es nicht zwischen den Episoden. Verifizieren: ls /dev/video*

🔒

Handkamera (optional)

Kleine USB-Kamera am Endeffektor montiert. Fügt die Ego-Perspektive hinzu. Ein zweiter USB-Anschluss erforderlich. LeRobot unterstützt die Synchronisierung mehrerer Kameras.

🔌

Follower Arm (USB seriell)

Der Arm, der Aktionen ausführt. Anschluss über USB-Servocontroller. Überprüfen Sie den Port mit ls /dev/ttyUSB*

👤

Führungsarm (USB seriell)

Ein zweiter SO-101 im Compliance-Modus – bewegen Sie ihn mit der Hand, um den Follower anzutreiben. Schließen Sie es an einen zweiten USB-Anschluss an. Bietet Demonstrationen höchster Qualität.

Kein ROS, keine Kernel-Treiber: Im Gegensatz zu CAN-Bus-Setups läuft der SO-101-Datenerfassungsstapel vollständig über USB-Seriell. Sie können auf einem MacBook oder Windows-Laptop aufnehmen – kein Ubuntu erforderlich.

Aufnahme-Workflow

Schritt-für-Schritt-Aufzeichnungsworkflow

1

Überprüfen Sie, ob die Kalibrierung aktuell ist

Führen Sie vor jeder neuen Sitzung eine Kalibrierung durch, wenn der Arm zerlegt oder bewegt wurde. Sehen Software → Kalibrierung.

python -m lerobot.scripts.control_robot \
  --robot.type=so101 --robot.port=/dev/ttyUSB0 \
  --control.type=calibrate
2

Überprüfen Sie Kamera-Feeds

python -c "
import cv2
for i in range(4):
    cap = cv2.VideoCapture(i)
    if cap.isOpened():
        print(f'Camera {i}: OK')
    cap.release()
"
3

Bewegen Sie den Arm in die Ausgangsposition

Platzieren Sie den Folgearm in der Ausgangsposition (vollständig ausgestreckt, Endeffektor zeigt nach vorne). Bringen Sie den Führungsarm wieder in die gleiche Position, bevor Sie mit dem Teleop beginnen.

4

Richten Sie die Aufgabenszene ein

Platzieren Sie Objekte an ihren einheitlichen Startpositionen. Markieren Sie die Tabelle bei Bedarf – konsistente Anfangsbedingungen sind für die Verallgemeinerung von Richtlinien von entscheidender Bedeutung.

5

Starten Sie die LeRobot-Aufzeichnung

python -m lerobot.scripts.control_robot \
  --robot.type=so101 \
  --robot.port=/dev/ttyUSB1 \
  --robot.leader_arms.main.type=so101 \
  --robot.leader_arms.main.port=/dev/ttyUSB0 \
  --control.type=record \
  --control.fps=30 \
  --control.repo_id=your-username/so101-pick-place-v1 \
  --control.num_episodes=50 \
  --control.single_task="Pick the red block and place it in the bin" \
  --control.warmup_time_s=3 \
  --control.reset_time_s=8

LeRobot-Eingabeaufforderungen vor jeder Episode. Während des Aufwärmens können Sie Ihren Griff am Führungsarm anpassen, bevor die Aufnahme beginnt.

6

Überprüfen und wiederholen Sie Episoden

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

Löschen Sie Episoden mit schlechter Qualität sofort. Überprüfen Sie, ob Kamerabilder ausgefallen sind, die Gelenkgeschwindigkeiten unregelmäßig sind oder die Aufgabenausführung unvollständig ist.

7

Drücken Sie auf HuggingFace Hub

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

SO-101-Datensatzformat

Der SO-101 verwendet das standardmäßige LeRobot/HuggingFace-Datensatzformat – identisches Schema wie OpenArm, Koch und andere LeRobot-Arme. Das bedeutet, dass Ihre Datensätze direkt mit dem gesamten LeRobot-Trainingsökosystem kompatibel sind.

Episodendatenschema

Felder in jeder Episoden-Parquet-Datei
Beobachtungszustand float32[6] Gelenkpositionen in Grad (6 DOF – 5 Gelenke + Greifer)
Beobachtungsbilder.* Videopfad Verweis auf Frame in MP4-Videodatei pro Kamera
Aktion float32[6] Zielen Sie die Gelenkpositionen vom Führungsarm aus an
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 jeder Episode
task_index int64 Index in der Nachschlagetabelle für Aufgabenbeschreibungen

SO-101-spezifische Hinweise

Der Aktionsraum des SO-101 verwendet Gelenkpositionen in Grad (Feetech-Servoeinheiten), nicht im Bogenmaß. Wenn Sie SO-101- und OpenArm-Datensätze für plattformübergreifendes Training mischen, normalisieren Sie beide zuerst auf das Bogenmaß, indem Sie die Statistiken in verwenden meta/stats.json.

Qualitätssicherung

Qualitätscheckliste für gesammelte Daten

Führen Sie dies nach jeder Aufnahmesitzung durch, bevor Sie es an den Hub übertragen.

  • 1
    Die Episodenlängen sind konsistent Episoden mit Ausreißerlänge bedeuten normalerweise, dass der Bediener eine Pause eingelegt hat, der Greifer abgerutscht ist oder die Aufzeichnung unterbrochen wurde. Innerhalb von ±30 % der mittleren Länge bleiben.
  • 2
    Keine Servogeschwindigkeitsspitzen Die STS3215-Servos haben eine begrenzte Bandbreite – es treten plötzliche Geschwindigkeitsspitzen auf observation.state weisen auf einen Ausfall des seriellen Busses hin. Löschen Sie diese Episoden.
  • 3
    Kamerabilder werden an den gemeinsamen Daten ausgerichtet Überprüfen Sie, ob die Zeitstempel der Kamera und die gemeinsamen Zeitstempel maximal 20 ms voneinander entfernt sind. Die serielle USB-Latenz kann bei langen Aufnahmen zu Abweichungen führen. Synchronisieren Sie die Kameras alle 100 Episoden neu.
  • 4
    Die Führung des Führungsarms verlief reibungslos Wenn der Follower während der Aufzeichnung merklich zurückgeblieben ist (aufgrund der seriellen USB-Latenz), werden die Aktionsbezeichnungen zeitversetzt gegenüber den Beobachtungen angezeigt. Zur Kontrolle noch einmal abspielen.
  • 5
    Die Aufgabenszene war zu Beginn jeder Episode konsistent Objekte in derselben Position und Ausrichtung. Aufgrund der geringeren Wiederholgenauigkeit des SO-101 (im Vergleich zu CAN-Armen) ist dies besonders wichtig – Abweichungen in den Anfangsbedingungen beeinträchtigen die Schulung der Richtlinien.
  • 6
    Das Öffnen/Schließen des Greifers wird eindeutig aufgezeichnet Der SO-101-Greiferzustand ist Gelenk 6. Stellen Sie sicher, dass Greifereignisse in den Daten einen deutlichen Gelenkpositionsübergang (offen → geschlossen) und keine allmähliche Abweichung zeigen.
Nächster Schritt

Trainieren einer Richtlinie aus Ihrem Datensatz

Sobald Ihr Datensatz die Qualitätsprüfungen bestanden hat, trainieren Sie ACT oder Diffusion Policy mit LeRobot.

Trainiere ACT

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

Zugverbreitungspolitik

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

Community-Datensätze: Das SO-101 verfügt über eine der größten Community-Datensatzsammlungen im LeRobot-Ökosystem. Überprüfen Sie dies, bevor Sie Ihre eigenen Daten erheben HuggingFace Hub für vorhandene SO-101-Datensätze – Möglicherweise können Sie anhand eines vorhandenen Basisdatensatzes eine Feinabstimmung vornehmen und Aufzeichnungszeit sparen.

Datensatz bereit? Beginnen Sie mit dem Training.

Übertragen Sie Ihren Datensatz an HuggingFace und trainieren Sie ACT oder Diffusion Policy.