Skocz do zawartości

Deltabot


deshipu

Pomocna odpowiedź

Jakiś czas temu obudziłem się rano z przeświadczeniem, że koniecznie muszę zbudować robota w konfiguracji delta. Postanowiłem spróbować spełnić ten kaprys przy pomocy tego, co akurat miałem w domu pod ręką -- czyli serw i spinaczy do papieru:

To niestety nie zadziałało za dobrze -- haczyki, które w teorii powinny stanowić przeguby, w praktyce miały tendencję do haczenia się i generalnie ustawiania w pozycjach, w których nie dało się nimi ruszać. Zdecydowałem, że trzeba podejść do sprawy bardziej profesjonalnie i użyć przegubów kulowych. Ruszyłem zatem do ulubionej chińskiej strony zakupowej w poszukiwaniu mosiężnych koralików. Niestety okrągłe koraliki sprzedawane były wyłącznie w ilościach od tysiąca sztuk w górę -- co prawda za grosze, ale co ja mam potem z resztą robić? Natomiast przy szukaniu koralików wpadły mi w oczy popychacze modelarskie z tak zwanymi "snapami" -- czyli tak naprawdę gotowymi przegubami kulowymi. Postanowiłem pójść na łatwiznę i zamówiłem.

Kilka dni temu popychacze przyszły. Trochę się zdziwiłem, że są większe niż się spodziewałem, ale nie szkodzi -- zrobię większego robota, użyje większych serw, które leżą już w szufladzie ładnych parę lat. Zacząłem się zastanawiać z czego zrobić pozostałe mechaniczne części robota i oczy moje padły na stertę płytek PCB, które zamówiłem do jednego z prototypów mich robotów -- teraz już zastąpione nowszą wersją. Płytki te stanowią ciało robota, więc mają odpowiednie otwory do przykręcenia orczyków serw -- to, czego potrzebuję. Postanowiłem wykorzystać je jako materiał budulcowy, po uprzednim pocięciu ich na odpowiedniej wielkości kawałki dremelem:

Trochę więcej pracy wymagało zrobienie głowicy robota, ale tutaj z pomocą przyszły porzucone uprzednio spinacze do papieru -- okazuje się, że całkiem dobrze dają się lutować do tych kawałków płytek, zatem zlutowałem je w odpowiedni kształt.

Podstawę robota zrobiłem z pozostałych płytek PCB, skręcając je razem śrubami. Serwa przymocowałem najpierw po prostu taśmą dwustronną, ale potem przylutowałem do płytek uszka ze spinaczy, do których przykręciłem serwa śrubami. I to tyle, jeśli chodzi o mechanikę.

Za mózg posłużyło ciało jednego ze starszych i pozbawionych już nóg prototypów moich kroczących robotów. ESP8266 i sterownik serw PCA9685, do tego bateria LiPo do zasilania -- nic skomplikowanego. Czas zabrać się za programowanie.

Dużo słyszałem narzekania na złożoność kinematyki odwrotnej robota w układzie delty, więc zostałem miło zaskoczony kiedy usiadłem do tego z papierem i ołówkiem i okazało się, że jest to prostsze niż przy tradycyjnym ramieniu. Wszystko, co muszę obliczyć to odległości punktu docelowego do poszczególnych serw, a następnie kąty, pod jakimi te serwa muszą się ustawić, żeby ich dźwignie właśnie w takich odległościach się ustawiły. To ostatnie daje się łatwo policzyć z prawa kosinusów, aczkolwiek przy pierwszym podejściu trochę sobie niepotrzebnie utrudniłem zadanie:

Otóż uwzględniłem w obliczeniach wielkość głowicy. Potem okazało się jednak, że niepotrzebnie, bo można ją z łatwością usunąć z równania, jeśli tylko przesuniemy o tę wielkość serwa -- w końcu kąt się wówczas nie zmienia. Ostatecznie, dwie krytyczne funkcje w moim programie to:

   def arm_ik(self, distance):
       alpha = math.acos(
           (self.BASE_LENGTH - self.HUB_LENGTH) /
           (distance)
       )
       beta = math.acos(
           (distance ** 2 + self.ARM_LENGTH ** 2 - self.ROD_LENGTH ** 2) /
           (2 * self.ARM_LENGTH * distance)
       )
       return math.pi - alpha - beta

   def robot_ik(self, x, y, z):
       return tuple(math.sqrt(
           (self.BASE_X[arm] - x) ** 2 +
           (self.BASE_Y[arm] - y) ** 2 +
           z ** 2
       ) for arm in (0, 1, 2))

Na razie testy wypadają pomyślnie -- udało mi się narysować na trzymanej kartce kółko. Co prawda kółko miało mieć promień 5cm, a ma ~2cm -- zapewne gdzieś zrobiłem jakiś błąd przy wymiarowaniu. Będę jeszcze się tym bawił.

Niestety, precyzja tego robota pozostawia wiele do życzenia. Stawy kulowe popychadeł modelarskich mają drobne luzy, które powodują chybotanie się głowicy -- nie jest ona idealnie poziomo. Dodatkowo luzy w samych serwach są dość spore i powodują niedokładności w pozycjonowaniu głowicy.

Ogólnie, jest to raczej zabawka edukacyjna niż cokolwiek z poważnym zastosowaniem, ale i tak jestem z niego dosyć zadowolony.

[ Dodano: 18-03-2017, 21:45 ]

No i siedziałem nad tym i siedziałem aż wysiedziałem. Nie da się wyliczyć poprawnie kąta ramienia tylko z odległości punktu docelowego, bo koniec popychacza musi jeszcze dodatkowo wskazywać w kierunku tego punktu -- zatem niezbędna jest jeszcze znajomość wysokości. Nie zauważyłem tego, bo zawsze rysowałem ramię w tej samej pozycji, w której akurat przypadkiem wysokość się zgadzała z kierunkiem.

Dodanie do obliczeń kinematyki odwrotnej ramienia wysokości znacząco poprawiło wyniki:

    def arm_ik(self, distance, z):
       alpha = math.asin(z / distance)
       beta = math.acos(
           (distance ** 2 + self.ARM2ROD2) / (2 * self.ARM_LENGTH * distance)
       )
       return math.pi - alpha - beta

   def robot_ik(self, x, y, z):
       return tuple(math.sqrt(
           (self.BASE_X[arm] - x) ** 2 +
           (self.BASE_Y[arm] - y) ** 2 +
           z ** 2
       ) for arm in (0, 1, 2))

   def move_to(self, x, y, z):
       for arm, distance in enumerate(self.robot_ik(x, y, z)):
           self.move(arm, self.arm_ik(distance, z))

IMG_20170317_125150.thumb.jpg.49b487634b3f323488af9f99accc28cc.jpg

Link do komentarza
Share on other sites

Podoba Ci się ten projekt? Zostaw pozytywny komentarz i daj znać autorowi, że zbudował coś fajnego!

Masz uwagi? Napisz kulturalnie co warto zmienić. Doceń pracę autora nad konstrukcją oraz opisem.

Teraz z tym wszystkim kinematyka działa jak należy? Też ostatnio wpadł mi taki temat, co prawda nie doszedł do skutku, ale zastanawiałem się nad skomplikowaniem samej kinematyki - jak trzy serwa zgrywają się ze sobą.

Pisałeś o luzach na przegubach: to wina przegubów czy montażu? Ciekawe, bo rzadko się zdarza, żeby tam podłapać luzy.

Link do komentarza
Share on other sites

Tak, teraz działa idealnie.

Luzy są niestety wszędzie -- serwa mają całkiem spory luz na trybach, podstawa nie jest idealnie sztywna, są niewielkie luzy pomiędzy mosiężnymi kulkami przegubów a ich plastikowymi obejmami, etc. -- niestety, ze względu na specyfikę konstrukcji, to wszystkie się dodaje i wzmacnia -- w efekcie głowica nie zawsze jest poziomo, tylko potrafi się przechylić nawet o kilka stopni -- co oczywiście ma tragiczny efekt na końcu przyczepionego do niej ołówka... Podejrzewam, że większość tych luzów dałoby się wyeliminować używając lepszej jakości materiałów -- metal, nie plastik, lepsze serwa, solidniejsza podstawa. Ja poleciałem po kosztach, bo bardziej chciałem z tym poeksperymentować niż zrobić coś konkretnego.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.