Bauen Sie Ihren eigenen SO-101-Roboter!

Die Teile für den SO-101 beschaffen

Folgen Sie diesem README. Es enthält die Stückliste mit einem Link zu Quellen für die Teile sowie die Anleitung zum 3D-Drucken der Teile. Geben Sie außerdem an, ob Sie zum ersten Mal drucken oder keinen 3D-Drucker besitzen.

LeRobot installieren

Um LeRobot zu installieren, folgen Sie der Installationsanleitung.
Zusätzlich zu dieser Anleitung müssen Sie das Feetech SDK installieren:
 pip install -e ".[feetech]"

Schritt-für-Schritt-Montageanleitung

Der Folgearm verwendet 6 STS3215-Motoren mit einer Übersetzung von 1/345. Der Führungsarm verwendet hingegen drei Motoren mit unterschiedlichen Übersetzungen, damit er sowohl sein eigenes Gewicht tragen als auch mit minimalem Kraftaufwand bewegt werden kann. Die folgende Tabelle zeigt, welcher Motor für jedes Gelenk erforderlich ist.
Achse des Führungsarms Motor Übersetzungsverhältnis
Basis / Schulterschwenken 1 1 / 191
Schulterheben 2 1 / 345
Ellbogenbeugung 3 1 / 191
Handgelenkbeugung 4 1 / 147
Handgelenkrotation 5 1 / 147
Greifer 6 1 / 147

Teile des SO-101 reinigen

Entfernen Sie sämtliches Stützmaterial von den 3D-gedruckten Teilen. Am einfachsten schieben Sie dazu einen kleinen Schraubendreher unter das Stützmaterial und entfernen es.
Nachdem die Motoren platziert wurden, vor dem Fortfahren mit der Montage jeweils ein 3-poliges Kabel an jeden Motor anschließen.

Gelenk 1 installieren

  1. Den ersten Motor in die Basis einsetzen.
  2. Den Motor mit vier M2x6-mm-Schrauben sichern (den kleinsten Schrauben): zwei von oben und zwei von unten.
  3. Den ersten Motorhalter über den Motor schieben und mit zwei M2x6-mm-Schrauben befestigen (eine auf jeder Seite).
  4. Beide Motorhörner anbringen und das obere Horn mit einer M3x6-mm-Schraube befestigen.
  5. Das Schulterteil montieren.
  6. Das Schulterteil oben mit vier M3x6-mm-Schrauben und unten mit vier M3x6-mm-Schrauben befestigen.
  7. Den Motorhalter für die Schulter installieren.

Gelenk 2 installieren

  1. Den zweiten Motor von oben nach unten in Position schieben.
  2. Den zweiten Motor mit vier M2x6-mm-Schrauben sichern.
  3. Beide Motorhörner an Motor 2 anbringen und das obere Horn mit einer M3x6-mm-Schraube befestigen.
  4. Den Oberarm anbringen und auf jeder Seite mit vier M3x6-mm-Schrauben befestigen.

Gelenk 3 installieren

  1. Motor 3 einsetzen und mit vier M2x6-mm-Schrauben sichern.
  2. Beide Motorhörner an Motor 3 anbringen und eines davon mit einer M3x6-mm-Hornschraube befestigen.
  3. Den Unterarm an Motor 3 befestigen und auf jeder Seite vier M3x6-mm-Schrauben verwenden.

Gelenk 4 installieren

  1. Motorhalter 4 in Position schieben.
  2. Motor 4 einsetzen.
  3. Sichern Sie Motor 4 mit vier M2x6-mm-Schrauben, bringen Sie anschließend die Motorhörner an und befestigen Sie eines davon mit einer M3x6-mm-Hornschraube.

Gelenk 5 installieren

  1. Setze Motor 5 in die Handgelenkhalterung ein und befestige ihn mit zwei M2x6-mm-Frontschrauben.
  2. Setze ein einzelnes Motorhorn auf den Handgelenksmotor und befestige es mit einer M3x6-mm-Hornschraube.
  3. Befestige das Handgelenk an Motor 4 und sichere es auf jeder Seite mit vier M3x6-mm-Schrauben.

Greifer / Griff installieren

Follower

  1. Montiere den Greifer an Motor 5, indem du ihn mit vier M3x6-mm-Schrauben am Motorhorn des Handgelenks befestigst.
  2. Setze den Greifermotor ein und befestige ihn auf jeder Seite mit zwei M2x6-mm-Schrauben.
  3. Setze die Motorhörner auf und befestige eines davon mit einer M3x6-mm-Hornschraube.
  4. Montiere die Greiferklaue und befestige sie auf jeder Seite mit vier M3x6-mm-Schrauben.

Leader

  1. Montiere die Leader-Halterung am Handgelenk und befestige sie mit vier M3x6-mm-Schrauben.
  2. Befestige den Griff mit einer M2x6-mm-Schraube an Motor 5.
  3. Setze den Greifermotor ein und befestige ihn auf jeder Seite mit zwei M2x6-mm-Schrauben. Setze ein Motorhorn auf und befestige es mit einer M3x6-mm-Hornschraube.
  4. Befestige den Follower-Trigger mit vier M3x6-mm-Schrauben.

Die Motoren des SO-101 konfigurieren

Die USB-Ports der beiden Arme ermitteln

Um den Port für jeden Bus-Servo-Adapter zu ermitteln, verbinde den MotorBus über USB und die Stromversorgung mit deinem Computer. Führe anschließend das folgende Skript aus und trenne den MotorBus, sobald du dazu aufgefordert wirst:
 lerobot-find-port

Mac

Beispielausgabe:
 Alle verfügbaren Ports für den MotorBus werden gesucht.
['/dev/tty.usbmodem575E0032081', '/dev/tty.usbmodem575E0031751']
Entferne das USB-Kabel von deinem MotorsBus und drücke anschließend die Eingabetaste.

[...Disconnect corresponding leader or follower arm and press Enter...]

Der Port dieses MotorsBus ist /dev/tty.usbmodem575E0032081
Schließe das USB-Kabel wieder an.
Der erkannte Port ist /dev/tty.usbmodem575E0032081, der deinem Leader- oder Follower-Arm entspricht.

Linux

Unter Linux musst du möglicherweise den Zugriff auf die USB-Ports gewähren, indem du Folgendes ausführst:

 sudo chmod 666 /dev/ttyACM0

 sudo chmod 666 /dev/ttyACM1

Beispielausgabe:
 Alle verfügbaren Ports für den MotorBus werden gesucht. 
['/dev/ttyACM0', '/dev/ttyACM1']

Entferne das USB-Kabel von deinem MotorsBus und drücke anschließend die Eingabetaste.

[...Disconnect corresponding leader or follower arm and press Enter...]

Der Port dieses MotorsBus ist /dev/ttyACM1
Schließe das USB-Kabel wieder an.

Der erkannte Port ist /dev/ttyACM1. Er entspricht deinem Leader- oder Follower-Arm.

Motor-IDs zuweisen und Baudraten festlegen

Jeder Motor hat eine eindeutige ID am Bus. Neue Motoren werden normalerweise mit der ID 1 ausgeliefert. Für eine ordnungsgemäße Kommunikation zwischen den Motoren und dem Controller muss jedem Motor eine eigene ID zugewiesen werden. Die Baudrate bestimmt die Datenübertragungsgeschwindigkeit am Bus; der Controller und alle Motoren müssen dieselbe Baudrate verwenden, um kommunizieren zu können.
Verbinde dazu jeden Motor einzeln über den Controller und konfiguriere seine ID und Baudrate. Diese Einstellungen werden im nichtflüchtigen Speicher (EEPROM) des Motors gespeichert, sodass der Vorgang nur einmal durchgeführt werden muss.
Wenn du Motoren von einem anderen Roboter wiederverwendest, musst du diesen Schritt wahrscheinlich wiederholen, da ihre IDs und Baudrate möglicherweise nicht übereinstimmen.
Das folgende Video zeigt die schrittweise Vorgehensweise zum Festlegen der Motor-IDs.

Follower

Verbinden Sie das USB-Kabel Ihres Computers und die Stromversorgung mit der Controllerplatine des Follower-Arms. Führen Sie anschließend den folgenden Befehl aus (oder verwenden Sie das API-Beispiel) und verwenden Sie dabei den zuvor ermittelten Port. Weisen Sie Ihrem Leader-Arm außerdem über den Parameter id einen Namen zu.
Befehl:

 lerobot-setup-motors \
      --robot.type=so101_follower \
      --robot.port=/dev/tty.usbmodem585A0076841 # <- Fügen Sie hier den im vorherigen Schritt gefundenen Port ein

API-Beispiel:
 from lerobot.robots.so101_follower import SO101Follower, SO101FollowerConfig

config = SO101FollowerConfig(
      port="/dev/tty.usbmodem585A0076841",
      id="my_awesome_follower_arm",
)
follower = SO101Follower(config)
follower.setup_motors()
Die folgende Anweisung wird angezeigt.
 Verbinden Sie die Controllerplatine ausschließlich mit dem Motor „gripper“ und drücken Sie Enter.
Schließen Sie den Greifermotor wie angegeben an – stellen Sie sicher, dass er als einziger Motor mit der Platine verbunden und nicht mit anderen Motoren durchgeschleift ist. Wenn Sie [Enter] drücken, konfiguriert das Skript automatisch die ID und Baudrate dieses Motors.
Fehlerbehebung:
Falls ein Fehler auftritt, überprüfen Sie alle Kabelverbindungen:
  • Stromversorgung
  • USB-Kabel zwischen Ihrem Computer und der Controllerplatine
  • 3-poliges Kabel von der Controllerplatine zum Motor
Wenn Sie eine Waveshare-Controllerplatine verwenden, bestätigen Sie, dass beide Jumper auf den B-Kanal (USB) eingestellt sind.
Anschließend sollte die folgende Meldung angezeigt werden:
 Die Motor-ID von „gripper“ wurde auf 6 gesetzt
Danach folgt die nächste Anweisung:
 Verbinden Sie die Controllerplatine ausschließlich mit dem Motor „wrist_roll“ und drücken Sie Enter.
Sie können das 3-polige Kabel von der Controllerplatine abziehen, das andere Ende jedoch am Greifermotor angeschlossen lassen, da sich dieses Ende bereits an der richtigen Position befindet. Schließen Sie anschließend ein neues 3-poliges Kabel von der Controllerplatine an den Handgelenk-Rollmotor an. Stellen Sie wie zuvor sicher, dass dieser Motor als einziger mit der Platine verbunden und nicht mit anderen Motoren durchgeschleift ist.
Wiederholen Sie diesen Vorgang für jeden Motor wie angegeben.
Überprüfen Sie vor jedem Drücken von Enter alle Kabelverbindungen – insbesondere das Stromkabel kann sich lösen, während Sie die Platine handhaben.
Wenn das Skript abgeschlossen ist, sind die Motoren konfiguriert und bereit. Anschließend können Sie die 3-poligen Kabel von Motor zu Motor durchschleifen und das Kabel vom ersten Motor (dem Schulter-Schwenkmotor mit id=1) mit der Controllerplatine verbinden, die an der Basis des Arms befestigt werden kann.

Leader

Führen Sie dieselben Schritte für den Leader-Arm durch.
Befehl:
 lerobot-setup-motors \
      --teleop.type=so101_leader \
      --teleop.port=/dev/tty.usbmodem575E0031751 # <- Fügen Sie hier den im vorherigen Schritt gefundenen Port ein
API-Beispiel:
 from lerobot.teleoperators.so101_leader import SO101Leader, SO101LeaderConfig
config = SO101LeaderConfig(
      port="/dev/tty.usbmodem585A0076841",
      id="my_awesome_leader_arm",
)
leader = SO101Leader(config)
leader.setup_motors()

Roboter kalibrieren

Kalibrieren Sie anschließend den Roboter so, dass der Leader- und der Follower-Arm identische Positionswerte melden, wenn sie sich in derselben physischen Haltung befinden. Diese Kalibrierung ist entscheidend, da sie es einem auf einem Roboter trainierten neuronalen Netzwerk ermöglicht, korrekt auf einem anderen Roboter zu funktionieren.

Follower

Führen Sie den folgenden Befehl aus (oder verwenden Sie das API-Beispiel), um den Follower-Arm zu kalibrieren:
Befehl:
 lerobot-calibrate \
      --robot.type=so101_follower \
      --robot.port=/dev/tty.usbmodem58760431551 \ # <- Der Port deines Roboters
      --robot.id=my_awesome_follower_arm # <- Gib dem Roboter einen eindeutigen Namen
API-Beispiel:
 from lerobot.robots.so101_follower import SO101FollowerConfig, SO101Follower

config = SO101FollowerConfig(
      port="/dev/tty.usbmodem585A0076891",
      id="my_awesome_follower_arm",
)
follower = SO101Follower(config)
follower.connect(calibrate=False)
follower.calibrate()
follower.disconnect()
Das folgende Video zeigt die Kalibrierung: Positioniere den Roboter zunächst so, dass jedes Gelenk mittig in seinem Bewegungsbereich steht. Drücke anschließend die Eingabetaste und bewege jedes Gelenk durch seinen vollständigen Bewegungsbereich.

Leader

Führe dieselben Schritte aus, um den Leader-Arm zu kalibrieren – führe den unten stehenden Befehl aus oder verwende das API-Beispiel:
Befehl:
 lerobot-calibrate \
      --teleop.type=so101_leader \
      --teleop.port=/dev/tty.usbmodem58760431551 \ # <- Der Port deines Roboters
      --teleop.id=my_awesome_leader_arm # <- Gib dem Roboter einen eindeutigen Namen
API-Beispiel:
 from lerobot.teleoperators.so101_leader import SO101LeaderConfig, SO101Leader
config = SO101LeaderConfig(
      port="/dev/tty.usbmodem58760431551",
      id="my_awesome_leader_arm",
)

leader = SO101Leader(config)
leader.connect(calibrate=False)
leader.calibrate()
leader.disconnect()

Häufig gestellte Fragen

1. Wofür wird der SO-101 hauptsächlich verwendet?
Der SO-101 wird hauptsächlich als kostengünstige Roboterarm-Plattform zum Lernen, Bauen und Experimentieren mit Bewegungssteuerung, Teleoperation und Robotik-Workflows verwendet. Er eignet sich besonders für Nutzer, die Projekte auf Basis von LeRobot erkunden.

2. Brauche ich einen 3D-Drucker, um den SO-101 zu bauen?
Nicht unbedingt. Das Projekt umfasst 3D-gedruckte Teile. Du brauchst daher entweder Zugang zu einem 3D-Drucker oder musst die gedruckten Teile anfertigen lassen. Wenn dies dein erster Aufbau ist, kann die Beschaffung bereits gedruckter Teile den Prozess erleichtern.

3. Warum muss ich jeden Motor einzeln konfigurieren?
Jedem Motor müssen die richtige ID und die korrekten Kommunikationseinstellungen zugewiesen werden, damit das System jedes Gelenk ordnungsgemäß erkennen kann. Die individuelle Konfiguration hilft, Konflikte zu vermeiden, und stellt sicher, dass Leader- und Follower-Arm korrekt reagieren.

4. Was soll ich tun, wenn die Motoreinrichtung fehlschlägt?
Überprüfe zunächst den Stromanschluss, das USB-Kabel, die Controllerplatine und das 3-polige Motorkabel. Stelle außerdem sicher, dass während der Einrichtung nur der vorgesehene Motor angeschlossen ist und dass bei der Konfiguration keine Motoren versehentlich in Reihe geschaltet sind.

5. Warum ist die Kalibrierung nach dem Zusammenbau wichtig?
Die Kalibrierung ist wichtig, weil sie die physischen Gelenkpositionen mit dem Verständnis des Roboters durch die Software abgleicht. Ohne eine ordnungsgemäße Kalibrierung stimmen Leader- und Follower-Arm möglicherweise nicht korrekt überein, was die Steuerungsgenauigkeit verringern und spätere Trainings- oder Teleoperationsergebnisse beeinträchtigen kann.

Register for our newsletter

Get the latest information about our products and special offers.

Website Feedback

Help us improve OpenELAB

Found a website issue or have an idea? Tell us what would make your experience better.