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.
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.
Schritt-für-Schritt-Aufzeichnungsworkflow
Ü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
Ü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()
"
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.
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.
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.
Ü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.
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
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
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ätscheckliste für gesammelte Daten
Führen Sie dies nach jeder Aufnahmesitzung durch, bevor Sie es an den Hub übertragen.
-
1Die 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.
-
2Keine Servogeschwindigkeitsspitzen Die STS3215-Servos haben eine begrenzte Bandbreite – es treten plötzliche Geschwindigkeitsspitzen auf
observation.stateweisen auf einen Ausfall des seriellen Busses hin. Löschen Sie diese Episoden. -
3Kamerabilder 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.
-
4Die 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.
-
5Die 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.
-
6Das Ö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.
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.