Witajcie, w ramach niewinnego powiewu świeżości na forum przedstawiam nową zabawkę nad którą pracowałem z kolegą przez ostatnie miesiące.
Quadrocopter, bo o nim mowa, to rodzaj platformy latającej typu multirotor. Z mojej perspektywy służy przede wszystkim do zabawy, filmowania i nauki. Poza tym ludzie wymyślają przeróżne zastosowania, o czym pewnie nieraz czytaliście na forum.
Generalnie podchodząc do tego projektu głównym założeniem było zbudowanie małego, zwinnego obiektu. Niezwykle istotna była więc waga i rozmiar. Kolejnym cele było osiągnięcie jakiejkolwiek autonomicznej stabilizacji w powietrzu. Z racji, iż w projekcie nie użyto ani gotowej płytki sterującej, ani gotowego programu - było to więc małe wyzwanie.
Pierwszym krokiem był wybór ramy. Z racji użycia włókna węglowego nie została wykonana samodzielnie. Wybrano ramę o przekątnej 330mm i wadze 55gram! To najlżejsza rama jaką znaleźliśmy w tym rozmiarze.
Jednym z podstawowych elementów wpływających na możliwości quadrocoptera są silniki. Szukano sensownego kompromisu między ceną, a mocą. Ostatecznie wybrano model Turnigy Park300 o maksymalnej mocy 85W każdy.
Następnie do sterowania silnikami bezszczotkowymi potrzebowano regulatorów, które będą nimi bezpośrednio sterować na podstawie sygnału zadanego z mikrokontrolera. Podstawowymi czynnikami jest oczywiście odpowiednia wydajność prądowa, waga, jak i wsparcie Fast PWM.
Maksymalny prąd pobierany przez jeden silnik wynosi 9A, więc wybrano regulatory o wydajności 12A.
Wybór aparatury do sterowania quadrocopterem nie był nadzwyczajnie istotny, ponieważ do naszych potrzeb wystarczyłyby pewnie większość tanich modeli.
Wybrano sprawdzony model Turnigy 9x, 8 kanałów w trybie modulacji PPM to aż za dużo. 🙂
Tutaj wynikła ciut dziwna sytuacja. Sprawa wygląda tak, że odbiornik odbiera ramkę PPM i następnie dzieli ją na 8 kanałów, gdzie każdy ma swoje własne wyprowadzenia. Bez sensu byłoby prowadzić tyle kabelków do mikrokontrolera, dlatego wykonano małą płytkę z 'enkoderem', który ponownie sumuje wszystkie kanały i tworzy ramkę PPM, a ta trafia do mikrokontrolera. Niestety nie było możliwości "wyciągnąć" ramki PPM z obiornika.
Mikrokontroler - ATmega 1284P.
Wybór podyktowany jest różnymi czynnikami. Przede wszystkim dosyć dobrze znam tą rodzinę, więc nie traciłem czasu na szukanie informacji o podstawach programowania AVR.
Myślałem tutaj o jakimś STMie, ale projekt był na tyle czasochłonny, że dodawanie sobie jeszcze nauki nowego mikrokontrolera nie było najlepszym pomysłem.
Finalnie ATmega ma wszystko czego było potrzeba i przy 20MHz jest na tyle wydajna, że nie tworzyła żadnych ograniczeń.
Serce modelu, czyli płytkę z mikrokontrolerem i jego podwórkiem zaprojektowano samodzielnie, przede wszystkim znajdują się tam stabilizatory napięć i różne wyprowadzenia (PWM, I2C, USART..).
Czujniki były niezwykle istotnym elementem projektu. Zbyt duża podatność na wibracje czy zakłócenia generowane przez silniki mogłyby wykluczyć możliwość realizacji założeń projektowych.
Ostatecznie udało się zakupić dosyć tanio moduł 10DOF IMU, czyli komplet czujników połączonych magistralą I2C.
Akcelerometr - BMA180.
Żyroskop - ITG3200.
Magnetometr - HMC5883L.
Barometr - BMP085.
Taki moduł okazał się bardzo dobrym wyborem, płytka jest bardzo mała, wystarczy ją dobrze ulokować i połączyć magistralą I2C z atmegą.
Całość oprogramowano również samodzielnie, od komunikacji z czujnikami po pętle sterujące.
Pierwszym krokiem w celu uzyskania jakiegokolwiek sterowania było uzyskanie stabilnych pomiarów i określenie położenia quadrocoptera, a konkretnie jego wychylenia w trzech osiach.
W imię nauki przetestowano kilka filtrów, ale najpierw dwa słowa wstępu - generalnie całkując dane z żyroskopu otrzymuje dosyć stabilne i odporne na wibracje (dzięki wewnętrznym filtrom dolnoprzepustowym) pomiary. Wszystko psuje jedna rzecz - dryft, błąd narasta w czasie, robi to szybko i bezwzględnie. Potrzebujemy zatem go wyeliminować - dlatego używamy kolejnego sensora - akcelerometru, który w zasadzie tylko koryguje odczyty z żyroskopu. Tak naprawdę acc+gyro to niezbędne minimum. Tandem ten nie potrafi jedynie wyeliminować dryftu kąta yaw i do tego wykorzystujemy magnetometr, aczkolwiek kąt yaw nie jest krytyczny i z powodzeniem można latać bez magnetometru.
Barometr zaś służy do stabilizacji wysokości, na ten moment nie zostało to jeszcze zaimplementowane.
Pierwszym filtrem łączącym dane z żyroskopu i akcelerometru był zwykły filtr komplementarny, który mieści się w jednej linijce i rzeczywiście eliminuje dryft zaskakująco dobrze, ale przez podatny na wibracje akcelerometr sygnał jest bardzo zaszumiony.
Następnie przetestowano Sebastian Madgwick Fusion Filter, który po drobnych zmianach dał zaskakująco dobre rezultaty, tak dobre, że poprzestano na nim i użycie filtru Kalmana odłożono na później jedynie w celach naukowych.
Na wykresie porównanie: danych z żyroskopu i wspomnianych dwóch filtrów:
Mając poprawne informacje o wychyleniach quadrocoptera zostało jedynie przygotować mu regulatory PID, autonomiczna stabilizacja w powietrzu jest już na wyciągnięciu ręki. 🙂
Należało stworzyć trzy pętle PID (na każdą oś) i po długim dobieraniu nastaw można było zacząć świętować!.. 😉
Dodam może, że dla ułatwienia poszukiwania nastaw zbudowaliśmy prowizoryczną platformę do unieruchomienia quadrocoptera (ale wciąż mógł przechylać się w jednej osi).
Jeszcze z istotniejszych faktów to niezwykle istotny jest człon D.
Warto jeszcze wspomnieć o śmigłach, też bardzo istotnych.
Na podstawie prób można by napisać scenariusz pod serial, a to okładka:
Na ten moment korzystamy z rozmiaru 6x4, śmigła trójpłatowe. Najlepsza konfiguracja dla naszej ramy (rozmiar) pod względem mocy.
Całość zasilamy z pakietu 3S 1800mAh, co jest kompromisem między wagą, a czasem latania.
W przypadku kiedy wszystko jest nastawione na wydajność i moc można uzyskać kilka minut szarżowania w powietrzu. 😉
Generalnie zabawa jest przednia, a świadomość, że Twoje dzieło lata i potrafi same zawisnąć w powietrzu naprawdę cieszy.. 🙂
Dodam jeszcze jakiś filmik z prób:
Polecam.