Bygg din egen SO-101-robot!

Skaffa delarna till SO-101

Följ denna README. Den innehåller en materiallista med en länk till källor för delarna samt anvisningar för 3D-utskrift av delarna. Ange dessutom om det är första gången du skriver ut eller om du inte äger en 3D-skrivare.

Installera LeRobot

För att installera LeRobot följer du installationsguiden.
Utöver dessa anvisningar måste du installera Feetech SDK:
 pip install -e ".[feetech]"

Steg-för-steg-anvisningar för montering

Följararmen använder 6 STS3215-motorer med utväxlingen 1/345. Ledarmen använder däremot tre motorer med olika utväxlingar för att säkerställa att den både kan bära sin egen vikt och flyttas med minimal ansträngning. Tabellen nedan visar vilken motor som krävs för varje led.
Ledarmens axel Motor Utväxling
Bas / axelrotation 1 1 / 191
Axellyft 2 1 / 345
Armbågens böjning 3 1 / 191
Handledens böjning 4 1 / 147
Handledens rotation 5 1 / 147
Gripdon 6 1 / 147

Rengör delar till SO-101

Ta bort allt stödmaterial från de 3D-printade delarna. Det enklaste sättet är att föra in en liten skruvmejsel under stödmaterialet och ta bort det.
När motorerna har placerats ska du installera en 3-stiftskabel i varje motor innan du fortsätter monteringen.

Montera led 1

  1. Sätt i den första motorn i basen.
  2. Fäst motorn med fyra M2x6 mm-skruvar (de minsta skruvarna): två uppifrån och två underifrån.
  3. Skjut den första motorhållaren över motorn och fäst den med två M2x6 mm-skruvar (en på varje sida).
  4. Montera båda motorhornen och fäst det övre hornet med en M3x6 mm-skruv.
  5. Montera axeldelen.
  6. Fäst axeldelen med fyra M3x6 mm-skruvar på ovansidan och fyra M3x6 mm-skruvar på undersidan.
  7. Montera axelns motorhållare.

Montera led 2

  1. Skjut ned den andra motorn på plats uppifrån.
  2. Fäst den andra motorn med fyra M2x6 mm-skruvar.
  3. Montera båda motorhornen på motor 2 och fäst det övre hornet med en M3x6 mm-skruv.
  4. Fäst överarmen med fyra M3x6 mm-skruvar på varje sida.

Montera led 3

  1. Sätt i motor 3 och fäst den med fyra M2x6 mm-skruvar.
  2. Montera båda motorhornen på motor 3 och fäst det ena med en M3x6 mm-hornskruv.
  3. Fäst underarmen på motor 3 med fyra M3x6 mm-skruvar på varje sida.

Montera led 4

  1. Skjut motorhållare 4 på plats.
  2. Sätt i motor 4.
  3. Fäst motor 4 med fyra M2x6 mm-skruvar, montera sedan dess motorhorn och fäst ett av dem med en M3x6 mm-hornskruv.

Montera led 5

  1. Sätt i motor 5 i handledshållaren och fäst den med två M2x6mm-skruvar framtill.
  2. Montera ett enda motorhorn på handledsmotorn och fäst det med en M3x6mm-hornskruv.
  3. Fäst handleden vid motor 4 med fyra M3x6mm-skruvar på varje sida.

Montera gripdon/handtag

Följare

  1. Montera gripdonet på motor 5 genom att fästa det vid handledsmotorns horn med fyra M3x6mm-skruvar.
  2. Sätt i gripmotorn och fäst den med två M2x6mm-skruvar på varje sida.
  3. Montera motorhornen och fäst ett av dem med en M3x6mm-hornskruv.
  4. Montera gripklon och fäst den med fyra M3x6mm-skruvar på varje sida.

Ledararm

  1. Montera ledarens hållare på handleden och fäst den med fyra M3x6mm-skruvar.
  2. Fäst handtaget på motor 5 med en M2x6mm-skruv.
  3. Sätt i gripmotorn och fäst den med två M2x6mm-skruvar på varje sida. Montera ett motorhorn och fäst det med en M3x6mm-hornskruv.
  4. Fäst följarens avtryckare med fyra M3x6mm-skruvar.

Konfigurera motorerna i SO-101

Lokalisera USB-portarna som motsvarar varje arm

För att identifiera porten för varje buss-servoadapter ansluter du MotorBus till datorn med USB och ström. Kör följande skript och koppla bort MotorBus när du uppmanas till det:
 lerobot-find-port

Mac

Exempel på utdata:
 Söker efter alla tillgängliga portar för MotorBus.
['/dev/tty.usbmodem575E0032081', '/dev/tty.usbmodem575E0031751']
Koppla bort USB-kabeln från din MotorsBus och tryck på Enter när du är klar.

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

Den här MotorsBus-bussens port är /dev/tty.usbmodem575E0032081
Anslut USB-kabeln igen.
Den identifierade porten är /dev/tty.usbmodem575E0032081, vilket motsvarar antingen din ledar- eller följararm.

Linux

I Linux kan du behöva ge åtkomst till USB-portarna genom att köra:

 sudo chmod 666 /dev/ttyACM0

 sudo chmod 666 /dev/ttyACM1

Exempel på utdata:
 Söker efter alla tillgängliga portar för MotorBus. 
['/dev/ttyACM0', '/dev/ttyACM1']

Koppla bort USB-kabeln från din MotorsBus och tryck på Enter när du är klar.

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

Den här MotorsBus-bussens port är /dev/ttyACM1
Anslut USB-kabeln igen.

Den identifierade porten är /dev/ttyACM1, vilket motsvarar din ledar- eller följararm.

Tilldela motorernas ID:n och ställ in deras baudhastigheter

Varje motor har ett unikt ID på bussen. Nya motorer levereras vanligtvis med ID 1. För att motorerna och styrenheten ska kunna kommunicera korrekt måste varje motor tilldelas ett unikt ID. Baudhastigheten avgör dataöverföringshastigheten på bussen; styrenheten och alla motorer måste ha samma baudhastighet för att kunna kommunicera.
För att göra detta ansluter du styrenheten till varje motor separat och konfigurerar dess ID och baudhastighet. Dessa inställningar skrivs till motorns icke-flyktiga minne (EEPROM), så processen behöver bara genomföras en gång.
Om du återanvänder motorer från en annan robot behöver du troligen upprepa detta steg, eftersom deras ID:n och baudhastighet kanske inte överensstämmer.
Videon nedan visar steg-för-steg-proceduren för att ställa in motorernas ID:n.

Följare

Anslut USB-kabeln från datorn och strömförsörjningen till följararmens styrenhet. Kör sedan kommandot nedan (eller API-exemplet) med porten som du hämtade tidigare. Tilldela även din ledararm ett namn med hjälp av parametern id.
Kommando:

 lerobot-setup-motors \
      --robot.type=so101_follower \
      --robot.port=/dev/tty.usbmodem585A0076841 # <- klistra in porten som hittades i föregående steg här

API-exempel:
 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()
Du kommer att se följande instruktion.
 Anslut styrenheten endast till motorn 'gripper' och tryck på Enter.
Anslut gripmotorn enligt anvisningarna – kontrollera att den är den enda motorn som är ansluten till kortet och att den inte är seriekopplad med någon annan. När du trycker på [Enter] konfigurerar skriptet automatiskt motorns id och baudhastighet.
Felsökning:
Om ett fel inträffar ska du kontrollera alla kabelanslutningar:
  • Strömförsörjning
  • USB-kabel mellan datorn och styrenheten
  • 3-stiftskabel från styrenheten till motorn
Om du använder ett Waveshare-styrenhetskort ska du bekräfta att båda byglarna är inställda på B-kanalen (USB).
Därefter bör du se följande meddelande:
 Motorns 'gripper'-id har ställts in på 6
Följt av nästa instruktion:
 Anslut styrenheten endast till motorn 'wrist_roll' och tryck på Enter.
Du kan koppla bort 3-stiftskabeln från styrenheten men låta den andra änden sitta kvar i gripmotorn, eftersom den änden redan är på plats. Anslut sedan en ny 3-stiftskabel från styrenheten till handledens rotationsmotor. Kontrollera som tidigare att den här motorn är den enda som är ansluten till kortet och att den inte är seriekopplad med någon annan motor.
Upprepa proceduren för varje motor enligt anvisningarna.
Innan du trycker på Enter varje gång ska du kontrollera alla kabelanslutningar – till exempel kan strömkabeln lossna när du hanterar kortet.
När skriptet har slutförts är motorerna konfigurerade och klara. Du kan sedan seriekoppla 3-stiftskablarna från motor till motor och ansluta kabeln från den första motorn (axelns panoreringsmotor med id=1) till styrenheten, som kan monteras på armens bas.

Ledararm

Gör samma steg för ledararmen.
Kommando:
 lerobot-setup-motors \
      --teleop.type=so101_leader \
      --teleop.port=/dev/tty.usbmodem575E0031751 # <- klistra in porten som hittades i föregående steg här
API-exempel:
 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()

Kalibrera din robot

Kalibrera därefter roboten så att ledar- och följararmarna rapporterar identiska positionsvärden när de befinner sig i samma fysiska position. Den här kalibreringen är avgörande eftersom den gör att ett neuralt nätverk som tränats på en robot kan fungera korrekt på en annan.

Följare

Kör kommandot nedan (eller använd API-exemplet) för att kalibrera följararmen:
Kommando:
 lerobot-calibrate \
      --robot.type=so101_follower \
      --robot.port=/dev/tty.usbmodem58760431551 \ # <- Robotens port
      --robot.id=my_awesome_follower_arm # <- Ge roboten ett unikt namn
API-exempel:
 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()
Videon nedan visar kalibreringen: placera först roboten så att varje led är centrerad inom sitt rörelseområde, tryck sedan på Enter och för varje led genom hela dess rörelseområde.

Ledararm

Utför samma steg för att kalibrera ledararmen — kör kommandot nedan eller använd API-exemplet:
Kommando:
 lerobot-calibrate \
      --teleop.type=so101_leader \
      --teleop.port=/dev/tty.usbmodem58760431551 \ # <- Robotens port
      --teleop.id=my_awesome_leader_arm # <- Ge roboten ett unikt namn
API-exempel:
 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()

Vanliga frågor

1. Vad används SO-101 främst till?
SO-101 används främst som en prisvärd robotarmsplattform för att lära sig, bygga och experimentera med rörelsestyrning, fjärrstyrning och arbetsflöden inom robotteknik. Den är särskilt användbar för användare som utforskar LeRobot-baserade projekt.

2. Behöver jag en 3D-skrivare för att bygga SO-101?
Inte nödvändigtvis. Projektet innehåller 3D-printade delar, så du behöver antingen tillgång till en 3D-skrivare eller få delarna utskrivna åt dig. Om det här är ditt första bygge kan det vara enklare att skaffa färdigutskrivna delar.

3. Varför måste jag konfigurera varje motor en i taget?
Varje motor måste tilldelas rätt ID och kommunikationsinställningar så att systemet kan identifiera varje led korrekt. Om du konfigurerar dem en i taget undviker du konflikter och säkerställer att ledar- och följararmarna reagerar korrekt.

4. Vad ska jag göra om motorinstallationen misslyckas?
Kontrollera först strömanslutningen, USB-kabeln, styrenheten och motorkabeln med tre stift. Kontrollera också att endast den avsedda motorn är ansluten under installationen och att inga motorer oavsiktligt seriekopplas under konfigurationssteget.

5. Varför är kalibrering viktig efter montering?
Kalibrering är viktig eftersom den anpassar de fysiska ledpositionerna till programvarans uppfattning av roboten. Utan korrekt kalibrering kanske ledar- och följararmarna inte överensstämmer korrekt, vilket kan minska precisionen i styrningen och påverka senare resultat vid träning eller fjärrstyrning.

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.