Ta strona używa ciasteczek (plików cookies), dzięki którym może działać lepiej. Dowiedz się więcejRozumiem i akceptuję

[Manipulator] Deltabot

Autor Wiadomość
deshipu 




Posty: 2043
Pomógł: 107 razy
Otrzymał 173 piw(a)
Programuję w:
Python, C, Lua
Należę do:
Nigmalabs
Moje roboty:
uKubik, pKubik, Katka, Tote

Wysłany: 18-03-2017, 17:29   [Manipulator] Deltabot

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:

Kod programu: Zaznacz cały

    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:
Kod programu: Zaznacz cały
    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))
Zobacz inne roboty w naszym katalogu

Polecany artykuł » Kurs Arduino - #11 - podsumowanie, QUIZ




IMG_20170317_125150.jpg
Plik ściągnięto 410 raz(y) 421.44 KB

Postaw piwo autorowi tego posta
 
 
SzymonDzw 




Posty: 39
Pomógł: 1 raz
Otrzymał 1 piw(a)
Należę do:
Kell ideas
Moje roboty:
Turtle Rover, Scorpio 4/5

Wysłany: 07-04-2017, 19:17   

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.


Turtle Rover - pierwszy na świecie łazik do zastosowań ekstremalnych, dostępny dla każdego!

www.facebook.com/TurtleRover
www.turtlerover.com
Postaw piwo autorowi tego posta
 
 
deshipu 




Posty: 2043
Pomógł: 107 razy
Otrzymał 173 piw(a)
Programuję w:
Python, C, Lua
Należę do:
Nigmalabs
Moje roboty:
uKubik, pKubik, Katka, Tote

Wysłany: 07-04-2017, 23:27   

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.

Postaw piwo autorowi tego posta
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Wersja do druku

Skocz do:  

Nie rozwiązałeś swojego problemu? Zobacz podobne tematy: [Wielozadaniowy] Rob... [Wielozadaniowy] IVS... [Wielozadaniowy] Rob... [Nanosumo] Robot &qu...
lub przeszukaj forum po wybranych tagach: deltabot


Powered by phpBB modified by Przemo © 2003 phpBB Group
Popularne kursy: Arduinopodstawy elektroniki