MKNM "Synergia"

Stan: W ciągłym doskonaleniu

SynerPlatform

SynerPlatform

Cześć!

Jest to projekt rekrutacyjny. Jego celem było zbudowanie platformy, która będzie utrzymywała kulkę na stałym poziomie, czyli tzw. balansująca kulka. Jako platformę wybrałem manipulator równoległy na bazie platformy Stewarta. Ma on 6 stopni swobody (translacja wzdłuż 3 osi oraz obrotu wokół tych osi).
Jako sprzężenie zwrotne od położenia kulki wybrałem zwykłą kamerkę komputerową marki Tracer. Program na komputerze odczytuje obraz, przetwarza go, wykrywa kulkę oraz jej współrzędne i wylicza kąty obrotu serw, które są przekazywane przez port szeregowy do sterownika serwomechanizmów.

Teraz pokrótce opiszę powyższe rzeczy

1. Program komputerowy

Program został napisany w C++ z wykorzystaniem biblioteki OpenCV oraz Qt do stworzenia interfejsu graficznego.

Program sterujący

Aby program działał płynniej, zastosowałem wielowątkowość w Qt. Polega to na tym, że na początku programu załączam wątek obiektu klasy przetwarzającej obraz i z pomocą mechanizmu sygnałów i slotów (szerzej na ten temat w dokumentacji biblioteki Qt) program główny porozumiewa się z obiektem przetwarzającym obraz. W ten sposób równolegle działa i sam program, wysyłający dane i przetwarzanie obrazu. Przetwarzanie obrazu jest wywoływane co kilkadziesiąt milisekund.

Następnie program w zależności od ustawienia użytkownika (sterowanie ręczne i z kamerą) oblicza kąty dla serw. Obliczenia są realizowane symulacyjne z pomocą odwrotnej kinematyki platformy (odwrotna kinematyka mechanizmu równoległego jest dużo prostsza od kinematyki odwrotnej mechanizmu szeregowego, jak ramię robota).

Kinematyka

Wzór do wyliczenia li:

wzór

Po wyliczeniu długości li, program dla każdego kąta od -90 do 90 st. oblicza dla którego z nich długość wyliczonego popychacza (s) jest najbliższa długości prawdziwego (twierdzenie cosinusów). Przyjmuję tolerancję na poziomie 2 mm.

Serwo_kinematyka

Następnie jeżeli wszystkie wyliczone dane są poprawne, zapisuję je w ramce danych do wysłania. Wtedy program po otrzymaniu odpowiednich komend od sterownika (litery ‚a’ – ‚f’) wysyła odpowiednie wartości kątów. Na końcu przesyłana jest suma kontrolna (suma wszystkich kątów dla typu char, więc zmienna kilkukrotnie się przeładowuje) i taką wysyłam jako ostatnią. Jeżeli suma na sterownika różni się od sumy programu, wtedy sterownik odrzuca te wartości dla serw.

 

Źródło obrazków: http://memememememememe.me/post/stewart-platform-math/

2. Sterownik serwomechanizmów

Sterownik jest oparty na mikrokontrolerze ATmega8.  Z pomocą Timer0 i Timer1 steruje ona impulsami dla serw. Timer2 co kilka ms wysyła komendę do komputera o kolejne dane dla serw. Całość chodzi na kwarcu 11.0592MHz ze względu na transmisję szeregową. Prędkość transmisji to 57600 bps. Schemat i płytka została zaprojektowana w programie Eagle. Wykonałem płytkę metodą „żelazkową”

schemat

PCB

Zarówno sterownik jak i serwa są zasilane z zasilacza komputerowego. Powód? Serwa potrafią podczas zablokowania pobierać prąd nawet 1A, więc dmuchając na zimne, zdecydowałem się na ten sposób zasilania, który jest zresztą tani – 15 zł używany zasilacz na aukcji :)

Moduł sterownika

3. Konstrukcja mechaniczna

Całość została zaprojektowana w programie Autodesk Inventor. Zalet takiego rozwiązania jest kilka. Już na fazie projektowej można wyeliminować błędy  związane z nakładaniem się części, ich ruchem. Można łatwo ustalić parametry konstrukcyjne potrzebne przy wyliczaniu kinematyki odwrotnej. Na koniec można mieć ogląd na to, co już niedługo powstanie;)

Zrzut z programu Inventor

Podstawą jest 6 serwomechanizmów Tower Pro SG-5010. Każdy posiada metalowy orczyk z gwintem M3 na końcu, do którego śrubą, przymocowany jest popychacz zakończony przegubem kulowym zarówno z jednej jak i z drugiej strony.

Serwa

Podstawa i górna część została wydrukowana na drukarce 3D dzięki uprzejmości opiekunów Koła Naukowego Synergia.

widok z góry

Widok ogólny

Krótki filmik przedstawiający działanie platformy (przepraszam za jakość, za niedługo po dostrojeniu platformy wrzucę filmy w lepszej jakości):

4. Utrzymywanie poziomu kulki

Jest to rzecz nad którą aktualnie pracuję. Został zaimplementowany tutaj regulator PID, jednak puki nie jest on nastawiony dobrze, czego wynik jest na poniższym filmie. Nagrałem go na szybko aby pokazać ogólną koncepcje projektu, stąd też słaba jakość nagrania. W najbliższym czasie, po lepszym nastrojeniu regulatora, wrzucę lepszą wersję filmiku.

Na koniec plany na przyszłość.

Oczywiście lepiej nastroić regulator PID, a także dodać kilka funkcji, na przykład sterowanie położeniem platformy przez akcelerometr/żyroskop.

Bartłomiej Ostrowski