Skocz do zawartości

Sterowanie hexapodem - kilka pytań


mhl

Pomocna odpowiedź

Witam, mam gotowego hexapoda z 12 serwami hitec hs-322hd. Chcę zaimplementować w nim różne algorytmy chodu. Chciałbym się spytać o optymalny sposób realizacji sterowania nim. Mam w głowie kilka wariantów:

1. Arduino jako platforma do obliczania zadania odwrotnego kinematyki, komunikacji z PC (np. bluetooth), obsługi czujników (np styku nogi z podłożem), oraz wysyłania sygnału do sterownika serwomechanizmów.

2. Arduino jako sterownik serwomechanizmów (Arduino UNO więc chciałbym jakoś rozszerzyć ilość PWM-ów, bo rozumiem, że tymi serwami nie można sterować zwykłym wyjściem ctfrowym?), komunikacja z PC, natomiast obliczanie zadania odwrotnego odbywałoby się w Matlabie

Zaznaczam, że nie jestem pasjonatem elektronikiem, wybór platformy Arduino (którą już zakupiłem) padł ze względu na prosty sposób programowania a głównym tematem projektu są te algorytmy.

Nie mam doświadczenia praktycznego w programowaniu takich robotów, także chciałbym się poradzić, które z zaproponowanych rozwiązań będą mniej kłopotliwe we wdrożeniu (tak by zająć się najszybciej kwestią samych algorytmów). Czy lepiej jest kupić serwokontroler, czy zlecić wykonanie płytki jakiejś firmie. Jak wówczas wygląda komunikacja między tym kontrolerem a Arduino? Do samego Arduino zauważyłem fajny moduł Matlaba, ale jeszcze go nie testowałem.

Generalnie pytania są fundamentalne dla mnie, a pewnie trywialne dla uczestników tego forum, ale proszę o wyrozumiałość. Można je uprościć do krótkiego: Jak najszybciej zrobić sterowanie za pomocą Arduino?🙂

Link do komentarza
Share on other sites

Wykorzystanie Matlaba do obliczeń w czasie rzeczywistym jest kompletnie chybionym pomysłem. Mimo, że dzięki niemu można łatwo wykonać wszystkie obliczenia, jest on bardzo wolny i nieoptymalny. Matlab w tego typu projekcie mógł by zostać wykorzystany do testów, natomiast właściwa implementacja kinematyki musiała by się odbywać w programie na komputer komunikującym się z serwokontrolerem, albo w samym mikrokontrolerze.

Jeżeli chodzi o obliczanie kinematyki odwrotnej na AVRach to także jest to dosyć skomplikowany problem ze względu na niewystarczającą pamięć i szybkość obliczeń, szczególnie mając do czynienia z floatami i skomplikowaną matematyką. Nie jest to jednak niemożliwe do wykonania, powstało wiele robotów kroczących z zaimplementowaną kinematyką sterowanych w ten sposób. Nie wiem tylko czy akurat język Arduino będzie tutaj optymalny, może lepiej to pisać w zwykłym C.

Implementacja sterowania PWM zwykłymi pinami cyfrowymi nie jest specjalnie trudna. Trzeba po prostu wykorzystać przerwania od timera i dodać kilka linijek kodu. Musisz tylko pamiętać, że w głównej pętli będą się wykonywały głównie obliczenia kinematyki, a sterowanie PWM, komunikacja i odczyty z czujników wymagają obsługi przerwaniowej.

Konkluzja jest taka, że moim zdaniem i tak nie uciekniesz gruntownej nauki programowania AVRów. Ewentualną alternatywą był by program na PC obliczający całą kinematykę i wysyłający obliczone nastawy po porcie COM. Wtedy soft na sterownik ograniczał by się do odczytywania danych z czujników, wysyłania ich do komputera i realizacja otrzymanych nastaw. Jeżeli chcesz nie martwić się o optymalizację kodu powinieneś wybrać coś mocniejszego np ARMy.

Link do komentarza
Share on other sites

Witam ponownie, dzięki za wszelkie uwagi. Zapomniałem później o tym temacie, ale nadal pracuję nad projektem. Zdecydowałem się na obsługę poprzez matlaba tymczasowo, bo jednak liczy bardzo szybko (to zaledwie kilka wzorów) gorzej z czasem otwierania serial portu (20s!) więc port otwieram raz i dopiero potem działa reszta programu.

Na razie wyliczyłem odwrotną kinematykę, wymyśliłem trajektorię nogi(wiele do popisu nie miałem przy 2 stopniach swobody 🙂) i teraz bawię się w składanie ruchu jednej nogi. Tu mam problemy z ustawieniem tego i płynnością przejść między kolejnymi częściami chodu.

Na Arduino jest napisany program który odpowiednio rozdziela ciąg znaków wysłanych poprzez port. Prędkością serw steruję póki co zakresem kątowym zmian oraz częstotliwością wysyłania impulsów do mikrokontrolera, czyli nie wysyłam prędkości portem, bo i takie rozwiązania widziałem.

Hexapod z 12 serwami = dwa serwa na nogę. To daje chyba trochę za mało możliwości pozycjonowania żeby stosować kinematykę odwrotną...

Oczywiście zadanie odwrotne można wyznaczyć bezproblemowo zależnie od konstrukcji, ale przy 2 stopniach swobody i 3 punktach w przestrzeni mamy jedną ze zmiennych zależną od reszty. Np określam 'x','y' a 'z' jest zależne od nich, ale to nie jest problem, trzeba tylko dokładnie znać wymiary i zdawać sobie sprawę z ograniczeń.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dzięki, ale biblioteka servo + arduino uno właściwie załatwiają sprawę sterowania dwunastoma serwami (nie stosuję niczego więcej, żadnych czujników). Mam mega do dyspozycji, ale nie będę go używał, wolałbym przeznaczyć je na inny projekt 🙂

Więcej problemów będę miał z przekształcaniem układów współrzędnych i synchronizacją wszystkich nóg, chyba potrzebny jest jakiś zwrotny znacznik wysyłany po porcie, bo stosowanie opóźnienia w programie sterującym na PC daje tylko teoretyczną gwarancję płynnej pracy.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • 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.