Zbuduj własnego robota SO-101!

Pozyskaj części do SO-101

Postępuj zgodnie z tym README. Zawiera on listę materiałów z linkiem do źródeł części, a także instrukcje drukowania 3D części. Dodatkowo poinformuj, czy to Twój pierwszy raz drukując lub czy nie posiadasz drukarki 3D.

Zainstaluj LeRobot

Aby zainstalować LeRobot, postępuj zgodnie z Przewodnikiem instalacji.
Oprócz tych instrukcji, musisz zainstalować Feetech SDK:
 pip install -e "".[feetech].""

Instrukcje montażu krok po kroku

Ramię podążające używa 6x silników STS3215 z przełożeniem 1/345. Lider natomiast używa trzech silników z różnymi przełożeniami, aby zapewnić wsparcie własnej wagi i umożliwić poruszanie się przy minimalnym wysiłku. Poniższa tabela pokazuje, który silnik jest wymagany dla każdego stawu.
Oś ramienia lidera Silnik Przełożenie
Podstawa / Obrót barku 1 1 / 191
Podniesienie barku 2 1 / 345
Zgięcie łokcia 3 1 / 191
Zgięcie nadgarstka 4 1 / 147
Obrót nadgarstka 5 1 / 147
Chwytak 6 1 / 147

Wyczyść części SO-101

Usuń cały materiał podporowy z części wydrukowanych w 3D. Najłatwiej jest wsunąć mały śrubokręt pod materiał podporowy, aby go usunąć.
Po umieszczeniu silników, przed kontynuacją montażu podłącz do każdego silnika jeden kabel 3-pinowy.

Zainstaluj przegub 1

  1. Włóż pierwszy silnik do podstawy.
  2. Zabezpiecz silnik czterema śrubami M2x6mm (najmniejszymi śrubami): dwoma od góry i dwoma od dołu.
  3. Wsuwaj pierwszy uchwyt silnika na silnik i przymocuj go dwoma śrubami M2x6mm (po jednej z każdej strony).
  4. Załóż oba rogi silnika i przykręć górny róg śrubą M3x6mm.
  5. Zamontuj część barkową.
  6. Zabezpiecz część barkową czterema śrubami M3x6mm od góry i czterema śrubami M3x6mm od dołu.
  7. Zainstaluj uchwyt silnika barkowego.

Zainstaluj przegub 2

  1. Wsuwaj drugi silnik na miejsce od góry.
  2. Zabezpiecz drugi silnik czterema śrubami M2x6mm.
  3. Załóż oba rogi silnika na silnik 2 i przykręć górny róg śrubą M3x6mm.
  4. Przymocuj ramię górne, zabezpieczając je czterema śrubami M3x6mm z każdej strony.

Zainstaluj przegub 3

  1. Włóż silnik 3 i zabezpiecz go czterema śrubami M2x6mm.
  2. Zamontuj oba rogi silnika na silniku 3, przykręcając jeden z nich śrubą M3x6mm do rogu.
  3. Przymocuj przedramię do silnika 3, używając po cztery śruby M3x6mm z każdej strony.

Zainstaluj przegub 4

  1. Wsuwaj uchwyt silnika 4 na miejsce.
  2. Włóż silnik 4.
  3. Zabezpiecz silnik 4 czterema śrubami M2x6mm, następnie załóż jego rogi silnika i przymocuj jeden śrubą M3x6mm do rogu.

Zainstaluj staw 5

  1. Włóż silnik 5 do uchwytu nadgarstka i przymocuj go dwoma przednimi śrubami M2x6mm.
  2. Załóż pojedynczy róg silnika na silnik nadgarstka i zabezpiecz go śrubą M3x6mm do rogu.
  3. Przymocuj nadgarstek do silnika 4, zabezpieczając go czterema śrubami M3x6mm z każdej strony.

Zainstaluj chwytak / uchwyt

Follower

  1. Zamontuj chwytak na silniku 5, przymocowując go do rogu silnika nadgarstka za pomocą czterech śrub M3x6mm.
  2. Włóż silnik chwytaka i zabezpiecz go dwoma śrubami M2x6mm z każdej strony.
  3. Załóż rogi silnika i przymocuj jeden śrubą M3x6mm do rogu.
  4. Zainstaluj pazur chwytaka i zabezpiecz go czterema śrubami M3x6mm z każdej strony.

Leader

  1. Zamontuj uchwyt leader na nadgarstku i przymocuj go czterema śrubami M3x6mm.
  2. Przymocuj uchwyt do silnika 5 za pomocą jednej śruby M2x6mm.
  3. Włóż silnik chwytaka i zabezpiecz go dwoma śrubami M2x6mm z każdej strony; załóż róg silnika i przymocuj go śrubą M3x6mm do rogu.
  4. Przymocuj wyzwalacz follower za pomocą czterech śrub M3x6mm.

Skonfiguruj silniki SO-101

Zlokalizuj porty USB odpowiadające każdemu ramieniu

Aby zidentyfikować port dla każdego adaptera serwomechanizmu szynowego, podłącz MotorBus do komputera przez USB i zasilanie. Uruchom poniższy skrypt i odłącz MotorBus, gdy zostaniesz o to poproszony:
 lerobot-find-port

Mac

Przykładowy wynik:
 Wyszukiwanie wszystkich dostępnych portów dla MotorBus.
['/dev/tty.usbmodem575E0032081', '/dev/tty.usbmodem575E0031751']
Odłącz kabel USB od swojego MotorsBus i naciśnij [Enter], gdy skończysz.

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

Port tego MotorsBus to /dev/tty.usbmodem575E0032081
Ponownie podłącz kabel USB.
Wykryty port to /dev/tty.usbmodem575E0032081, który odpowiada twojemu ramieniu lidera lub naśladowcy.

Linux

Na Linuksie może być konieczne nadanie dostępu do portów USB, uruchamiając:

 sudo chmod 666 /dev/ttyACM0

 sudo chmod 666 /dev/ttyACM1

Przykładowy wynik:
 Wyszukiwanie wszystkich dostępnych portów dla MotorBus. 
['/dev/ttyACM0', '/dev/ttyACM1']

Odłącz kabel usb od swojego MotorsBus i naciśnij [Enter], gdy skończysz.

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

Port tego MotorsBus to /dev/ttyACM1
Ponownie podłącz kabel USB.

Wykryty port to /dev/ttyACM1, który odpowiada twojemu ramieniu lidera lub naśladowcy.

Przypisz ID silnikom i ustaw ich baudrate

Każdy silnik ma unikalne ID na magistrali. Nowe silniki zazwyczaj są dostarczane z ID 1. Dla prawidłowej komunikacji między silnikami a kontrolerem, każdy silnik musi mieć przypisane unikalne ID. Baudrate określa prędkość transmisji danych na magistrali; kontroler i wszystkie silniki muszą mieć ten sam baudrate, aby mogły się komunikować.
Aby to zrobić, połącz się z każdym silnikiem indywidualnie za pomocą kontrolera i skonfiguruj jego ID oraz baudrate. Te ustawienia są zapisywane w nieulotnej pamięci silnika (EEPROM), więc proces ten trzeba wykonać tylko raz.
Jeśli ponownie używasz silników z innego robota, prawdopodobnie będziesz musiał powtórzyć ten krok, ponieważ ich ID i baudrate mogą się nie zgadzać.
Poniższe wideo pokazuje krok po kroku procedurę ustawiania ID silników.

Follower

Podłącz kabel USB z komputera oraz zasilacz do płytki kontrolera ramienia follower. Następnie wykonaj poniższe polecenie (lub uruchom przykład API) używając wcześniej uzyskanego portu. Przypisz także nazwę swojemu ramieniu leader, używając parametru id.
Polecenie:

 lerobot-setup-motors \
      --robot.type=so101_follower \
      --robot.port=/dev/tty.usbmodem585A0076841 # <- wklej tutaj port znaleziony w poprzednim kroku

Przykład API:
 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()
Zobaczysz następującą instrukcję.
 Podłącz płytkę kontrolera tylko do silnika 'gripper' i naciśnij [Enter].
Zgodnie z instrukcjami podłącz silnik chwytaka — upewnij się, że jest to jedyny silnik podłączony do płytki i nie jest połączony szeregowo z innymi. Po naciśnięciu [Enter] skrypt automatycznie skonfiguruje ID i prędkość transmisji tego silnika.
Rozwiązywanie problemów:
Jeśli wystąpi błąd, sprawdź wszystkie połączenia kablowe:
  • Zasilacz
  • Kabel USB między komputerem a płytką kontrolera
  • Kabel 3‑pinowy od płytki kontrolera do silnika
Jeśli używasz płytki kontrolera Waveshare, potwierdź, że oba zworki są ustawione na kanał B (USB).
Po tym powinieneś zobaczyć następującą wiadomość:
 ustawiono id silnika 'gripper' na 6
Następnie wykonaj kolejną instrukcję:
 Podłącz płytkę kontrolera tylko do silnika 'wrist_roll' i naciśnij [Enter].
Możesz odłączyć kabel 3‑pinowy od płytki kontrolera, ale pozostaw jego drugi koniec podłączony do silnika chwytaka, ponieważ ten koniec jest już na miejscu. Następnie podłącz nowy kabel 3‑pinowy od płytki kontrolera do silnika obrotu nadgarstka. Jak wcześniej, upewnij się, że ten silnik jest jedynym podłączonym do płytki i nie jest połączony szeregowo z żadnym innym silnikiem.
Powtórz tę procedurę dla każdego silnika zgodnie z instrukcjami.
Przed każdym naciśnięciem [Enter] sprawdź wszystkie połączenia kabli — na przykład kabel zasilający może się poluzować podczas obsługi płyty.
Po zakończeniu skryptu silniki będą skonfigurowane i gotowe. Możesz wtedy połączyć kable 3-pinowe łańcuchowo od silnika do silnika oraz podłączyć kabel z pierwszego silnika (obrót barku z id=1) do płyty kontrolera, którą można zamontować u podstawy ramienia.

Leader

Wykonaj te same kroki dla ramienia leader.
Polecenie:
 lerobot-setup-motors \
      --teleop.type=so101_leader \
      --teleop.port=/dev/tty.usbmodem575E0031751 # <- wklej tutaj port znaleziony w poprzednim kroku
Przykład API:
 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()

Skalibruj swojego Robota

Następnie skalibruj robota, aby ramiona leader i follower raportowały identyczne wartości pozycji, gdy zajmują tę samą fizyczną pozycję. Ta kalibracja jest kluczowa, ponieważ pozwala sieci neuronowej wytrenowanej na jednym robocie działać poprawnie na innym.

Follower

Wykonaj poniższe polecenie (lub użyj przykładu API), aby skalibrować ramię follower:
Polecenie:
 lerobot-calibrate \
      --robot.type=so101_follower \
      --robot.port=/dev/tty.usbmodem58760431551 \ # <- Port twojego robota
      --robot.id=my_awesome_follower_arm # <- Nadaj robotowi unikalną nazwę
Przykład API:
 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()
Poniższe wideo pokazuje kalibrację: najpierw ustaw robota tak, aby każde złącze było wyśrodkowane w swoim zakresie, następnie naciśnij [Enter] i poruszaj każdym złączem przez cały zakres ruchu.

Leader

Wykonaj te same kroki, aby skalibrować ramię leader — uruchom poniższe polecenie lub użyj przykładu API:
Polecenie:
 lerobot-calibrate \
      --teleop.type=so101_leader \
      --teleop.port=/dev/tty.usbmodem58760431551 \ # <- Port twojego robota
      --teleop.id=my_awesome_leader_arm # <- Nadaj robotowi unikalną nazwę
Przykład API:
 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()

Pasek boczny

Najnowszy post

Ta sekcja nie zawiera obecnie żadnych treści. Dodaj treść do tej sekcji, korzystając z paska bocznego.

Zarejestruj się do naszego newslettera

Uzyskaj najnowsze informacje o naszych produktach i specjalnych ofertach.