SO-ARM101 Roboterarm 7-Achsen Tutorial
SO-ARM101 7-DOF · Vorbereitung vor der Inbetriebnahme
Diese Anleitung richtet sich an Anwender, die den SO-ARM101 von 6 Servos auf 7 Servos umgebaut haben und anschließend mit LeRobot den kompletten Ablauf (Kalibrierung → Aufzeichnung → Training → Deployment) durchlaufen möchten. Zugehöriger Code: dieses Repository (
lerobot-7dof), ein Fork des offiziellen lerobot, bei dem nur die SO-relevanten Motorkonfigurationen geändert wurden.
0. Prüfen Sie zuerst Ihren Roboterarm
7 Servos (alle STS3215), Zuordnung von Servo-ID zu Gelenkname:
| Servo-ID | Gelenkname | Beschreibung |
|---|---|---|
| 1 | shoulder_pan | Horizontale Schulterdrehung |
| 2 | shoulder_lift | Schulterhebung |
| 3 | elbow_flex | Ellenbogenbeugung |
| 4 | wrist_flex | Handgelenk-Neigung (Auf- und Abbewegung) |
| 5 | wrist_yaw | Handgelenk-Gierung (Links-/Rechtsdrehung ca. 90°) · das in diesem Umbau neu hinzugefügte Servo (eingefügt zwischen den bisherigen Nummern 4 und 5) |
| 6 | wrist_roll | Handgelenk-Rollen · der bisherige Rollmotor Nr. 5, ID 5→6, Druckteile unverändert, Name unverändert |
| 7 | gripper | Greifer · bisher ID=6, nach dem Umbau auf 7 nachgerückt |
Reihenfolge der Gelenkdaten (die Reihenfolge der Gelenkdimensionen von action / observation.state in der Parquet-Datei nach der Aufzeichnung): shoulder_pan → shoulder_lift → elbow_flex → wrist_flex → wrist_yaw → wrist_roll → gripper.
⚠️ Achtung: Datensätze, Kalibrierdateien und bereits trainierte Modelle der 6-Servo-Version sind mit diesem Repository nicht kompatibel und müssen gemäß den folgenden Schritten komplett neu erstellt werden.
1. Welche Dateien ersetzt/geändert werden müssen, wenn Sie vom offiziellen Code-Repository geklont haben
Variante A: Code dieses Repositories direkt verwenden (empfohlen)
Variante B: Nach dem git clone des offiziellen lerobot manuell ersetzen
Kopieren Sie aus diesem Repository 3 Dateien über den offiziellen Clone:
| Datei in diesem Repository (Quelle) | Überschreiben nach (Ziel) |
|---|---|
src/lerobot/robots/so_follower/so_follower.py | gleichnamige Datei im offiziellen Clone |
src/lerobot/teleoperators/so_leader/so_leader.py | gleichnamige Datei im offiziellen Clone |
src/lerobot/robots/so_follower/robot_kinematic_processor.py | gleichnamige Datei im offiziellen Clone (nur Kommentar-Korrektur, ohne Funktionsauswirkung, muss nicht ersetzt werden) |
cp src/lerobot/robots/so_follower/so_follower.py <offizieller Clone>/src/lerobot/robots/so_follower/so_follower.py
cp src/lerobot/teleoperators/so_leader/so_leader.py <offizieller Clone>/src/lerobot/teleoperators/so_leader/so_leader.pyVoraussetzung: Ihr offizieller Clone entspricht in der Struktur der Baseline dieses Repositories (lerobot-Version 2026-08). Bei großer Versionsabweichung nicht die gesamten Dateien überschreiben, sondern nur die beiden Stellen gemäß der folgenden „manuellen Änderung" anpassen.
Manuelle Änderung bei abweichender Version (nur zwei Stellen)
① Motor-Dictionary (je eine Kopie in so_follower.py und so_leader.py, inhaltlich identisch) — ändern Sie das ursprüngliche
"wrist_flex": Motor(4, "sts3215", norm_mode_body),
"wrist_roll": Motor(5, "sts3215", norm_mode_body),
"gripper": Motor(6, "sts3215", MotorNormMode.RANGE_0_100),in
"wrist_flex": Motor(4, "sts3215", norm_mode_body),
"wrist_yaw": Motor(5, "sts3215", norm_mode_body), # Neues Servo, Links-/Rechtsdrehung
"wrist_roll": Motor(6, "sts3215", norm_mode_body), # Bisheriger Rollmotor Nr. 5, ID 5→6
"gripper": Motor(7, "sts3215", MotorNormMode.RANGE_0_100),② Kalibrierlogik (die jeweilige calibrate() in beiden Dateien) — entfernen Sie die Sonderbehandlung für das „Vollumdrehungs-Gelenk" und ersetzen Sie das
full_turn_motor = "wrist_roll"
unknown_range_motors = [motor for motor in self.bus.motors if motor != full_turn_motor]
range_mins, range_maxes = self.bus.record_ranges_of_motion(unknown_range_motors)
range_mins[full_turn_motor] = 0
range_maxes[full_turn_motor] = 4095durch eine einzige Zeile, die die tatsächlichen Bereiche aller Gelenke erfasst:
range_mins, range_maxes = self.bus.record_ranges_of_motion()Warum: Der Originalcode behandelt
wrist_roll(Rollen um die Unterarmachse) als Gelenk, das eine volle Umdrehung (0~4095) ausführen kann, und verdrahtet den vollen Bereich fest. Nach dem 7-DOF-Umbau sind die Handgelenke Nr. 5/6 (yaw / roll) mechanisch begrenzt und können keine volle Umdrehung ausführen; eine feste Vollumdrehungs-Vorgabe führt dazu, dass der Code Gelenkbefehle auf Winkel sendet, die mechanisch nicht erreichbar sind — es besteht Beschädigungsgefahr. Bei der Kalibrierung wird nun für jeden Motor der tatsächliche min/max-Bereich manuell erfasst.
Hinweise zu zwei Folgearmen
bi_so_follower / bi_so_leader (src/lerobot/robots/bi_so_follower/, src/lerobot/teleoperators/bi_so_leader/) wickeln einen einzelnen Arm nur mit left_/right_\-Präfix ein,enthalten keine Motordefinitionen. Sobalddie obigen Einzelarm\-Dateienangepasst sind, sind die Zweiarm\-Befehle (--robot.type=bi_so_follower) automatisch 7\-DOF.
1. LeRobot-Umgebung
2. Dateien ersetzen (Anpassung an 7-DOF)
3. Serielle Ports
4. Kalibrierung
5. Teleoperation
6. Teleop mit Kamera
7. Datenerfassung
- Datensatz ansehen und wiedergeben
- Hinweise zum Erfassen von Datensätzen
- Hugging Face-Konto registrieren (optional)
- Datensatz auf HuggingFace hochladen (optional)
- Datensatz durch Demonstration erfassen-Handschlag 200
- Datensatz durch Demonstration erfassen
8. Modelltraining
- Cloud-GPU-Trainingsumgebung einrichten
- Trainingsbefehl-ACT (empfohlen für den Einstieg)
- Trainingsbefehl-Diffusion
- Trainingsbefehl-pi0.5
- Trainingsbefehl-pi0 (beste Ergebnisse)
- Trainingsbefehl-pi0fast
- Trainingsbefehl-smolvla (empfohlen für Fortgeschrittene)
- Modell zu HuggingFace hochladen (optional)
- Von LeRobot unterstützte Imitation-Learning-Algorithmen
- Lokales Training unter Ubuntu
- Modelldateien abrufen
- Empfehlungen für Trainingsparameter
- Trainingskurven in Echtzeit mit wandb anzeigen

