Skocz do zawartości

Sterowanie hexapodem - kilka pytań


Pomocna odpowiedź

Napisano

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?🙂

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.

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

  • 1 miesiąc później...

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ń.

ja osbiście polecam

spider-sterownik serw(arduino mega) z możliwością sterowania do 48 serw.

__________

Komentarz dodany przez: Treker

Zdania rozpoczynamy z wielkich liter.

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.

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...