Kolejna konstrukcja Quadro od podstaw

Autorskie projekty naszych użytkowników

Moderatorzy: marbalon, moderatorzy2014, moderatorzy

Hokus
Posty: 14
Rejestracja: piątek 30 gru 2011, 16:50
Lokalizacja: Okolice Warszawy

Kolejna konstrukcja Quadro od podstaw

Post autor: Hokus »

Jako że jestem nowy witam wszystkich serdecznie :-)

To forum zawsze było dla mnie kopalnią ciekawych informacji oraz opinii związanych
z wieloma elementami modelarstwa.
Trochę o mnie: Latam z kamerką na modelu Beta 1400, wcześniej trochę na samoróbkach :-)

Postanowiłem zbudować quadrocopter od podstaw jako ciekawy projekt i właściwie przekrój przez wiele dziedzin elektroniki - moim zdaniem świetny sposób na usystematyzowanie wiedzy. Przeczytałem multum publikacji, postów oraz dokumentacji na temat quadro i wielowirnikowców. Po dużej ilości pracy udało się osiągnąć obecny, prawie działający stan.
I o to "prawie" chodzi. Nie zawracał bym nikomu głowy ale nie mam już pomysłów co by zmodyfikować żeby działało jak trzeba :-/

Setup:
- Sterowanie płytka STM32 72MHZ, 3 osiowe żyro + 3 osiowy akcelerometr
- regulatory Hobby King 18 - 20 A
- silniki TowerPro 2408 (z tego co pamiętam)
- śmigła GWS 8x4 potrójne
- rama profil aluminiowy 10x10mm i laminat szklano epoksydowy
- baterie 7V4 2200mAh

Zaprojektowałem własną płytkę z elektroniką opartą o żyroskop i akcelerometr trójosiowy. Dane mieli STM32 na 72MHz. Estymacja jest dokonywana za pomocą filtracji Kalmana. Z częstotliwością 50Hz estymuje kąt oraz steruje silnikami. Kalmana symulowałem w matlabie, potem przepisałem na wersję łatwiejszą do liczenia przez procek - wielomiany zamiast macierzy. Załączam zrzut pokazujący kąt z akcelerometru, żyroskopu i Kalmana.
Wartości Q i R dobrałem tak by był w miarę szybki a jednocześnie odporny na szumy.

Konstrukcja jest sztywna, testowałem kilka konfiguracji. Jedną jest rama o średnicy około 35cm na profilach kwadratowych alu 10x10mm. Druga to rama 50cm na rurkach alu o średnicy około 7mm (załączone fotki). Teoretycznie większa średnica to większa "dźwignia" na jakiej pracuje śmigło więc więcej czasu dla regulatora.

Regulatory HK kupiłem bo akurat miałem zestaw 4 dobrej cenie. Zadaje im sygnał PWM ograniczony prawie do długości dodatniej szpilki aby je przyśpieszyć, ramkę skróciłem do 5ms. Wydaje mi się że trochę się im poprawiło. Przeglądając różne regulatory bebechy miały zawsze te same - Mega8 i 3 półmostki H na tranzystorach dopasowanych do prądu regla. Więc tutaj chyba różnicy jakiejś między firmami nie będzie?

Na wejście PID dawałem różne rzeczy. Testowałem z podaniem jako błędu kąta (Kp),
jako różniczka surowa prędkość z żyroskopów (Kd) a jako całka suma kątów w czasie (Ki).
Testowałem też wariant z prędkością kątową z żyroskopów (Kp), wtedy całka jest kątem (Ki) a różniczka przyśpieszeniem kątowym (Kd) czyli (omega2 - omega1) / dT. Nie udało mi się tego zestroić na żadnym wariancie. Miałem czasem nawet problemy żeby otrzymać stałe oscylacje pod kątem strojenia Ziegleram Nicholsem. Jak otrzymałem i przeliczyłem też nędznie to działało. Testowałem też dla różnej średnicy platformy i dla różnych śmigieł (APC, GWS - 9x6, 8x4...).

Reasumując:
Pomimo zmian średnicy quadro, przyśpieszenia regulatorów oraz kombinowania z różnymi śmigłami nie udało mi się uzyskać zadowalającego efektu. Stroiłem PID na różne sposoby. Wychodził albo zbyt nerwowy - wpadał w zwiększające się oscylacje, albo zbyt powolny, za długo lecący w pochyleniu. Brak tego złotego środka. Intuicja podpowiada mi że coś jest za wolne albo ma za małą rozdzielczość. Ale równie dobrze silniki mogą być nie odpowiednie albo cokolwiek innego być nie tak. Czy bardzo ważne jest wyważenie śmigieł? Jaki detal mogłem przeoczyć?

Pytanie:
Czy ktoś kto odpalił swój quadro mógł by się pochwalić swoim setupem albo spojrzeć fachowym okiem na to co zrobiłem i powiedzieć gdzie może leżeć słaby punkt (sprzęt? soft?).
Załączniki
Estymacja kąta filtrem Kalmana
Estymacja kąta filtrem Kalmana
q1.JPG
q2.JPG
q3.JPG
Awatar użytkownika
miś
Posty: 9242
Rejestracja: niedziela 07 lut 2010, 15:24
Lokalizacja: Bytom

Post autor: miś »

Pytanie numer 1. Jakich żyroskopów użyłeś ? Jeśli masz żyra o niskiej częstotliwości rezonansu własnego (np z ST) to dostajesz z nich sieczkę przy pracujących silnikach (kluczowanie silników na 8 kHz oraz wibracje przenoszą się na żyra). Resztę sobie sam dopowiedz. Druga sprawa to szybkość obliczeń i sterowania regulatorami. 50Hz do trochę za mało. Spróbuj zwiększyć tempo do 100-200Hz, a powinno sporo pomóc.
Pzdr. -----MIŚ-----
Hokus
Posty: 14
Rejestracja: piątek 30 gru 2011, 16:50
Lokalizacja: Okolice Warszawy

Post autor: Hokus »

Żyroskopy to L3G4200D od ST, ale testowałem też z włączonymi silnikami i nie wychodziły jakiś bzdury:/ Dodatkowo zrobiłem osobną płytkę, która rozdziela zasilanie i jest na niej bateria kondensatorów więc tędy też się nic nie przedostanie. Testowałem zarówno na bardzo sztywnej konstrukcji jak i na nieco bardziej "sprężystej" - efekty te same.

Te żyra są bardzo beznadziejne? Jak testowałem na analogowych to z kolei było sporo zakłóceń od silników.

Dane z żyro wrzucam bezpośrednio do Kalmana ale mogę też włączyć filtrację w nich, jednak jak sprawdzałem też nie robiła żadnej różnicy (zarówno HP i jak i LP oraz obie na raz).

Czy fakt że te silniki mają 1400kV nie powoduje że mogą być za "zrywne" i za ostro reagować?
Awatar użytkownika
miś
Posty: 9242
Rejestracja: niedziela 07 lut 2010, 15:24
Lokalizacja: Bytom

Post autor: miś »

KV1400 i 8'' śmigła to dobre połączenie. Zyra nie łapią śmieci po zasilaniu, ale mechanicznie. Tych konkretnych nie znam, ale wiekszość z ST kiepsko sobie radziła w copterach. Zamontuj płytkę z czujnikami (żyra, ACC) elastycznie (ale nie za bardzo), np podłóż 1cm warstwe twardej gąbki i dociśnij gumkami lub taśmą, podłączenie miękkimi przewodami, i wtedy zobacz jak się całość zachowuje. Jak będzie dużo lepiej, to winowajcą są żyroskopy.
Pzdr. -----MIŚ-----
Hokus
Posty: 14
Rejestracja: piątek 30 gru 2011, 16:50
Lokalizacja: Okolice Warszawy

Post autor: Hokus »

Sprawdzę to przy najbliższej okazji razem ze zwiększeniem częstotliwości estymacji.

Tak się zastanawiałem czy na pakiecie 7.4V (2s) nie mam za małego zapasu mocy ale całość odrywa się od ziemi na połowie ciągu więc chyba jest zapas. Dodatkowo to kV nie wymaga tak dużego napięcia jak silniki z kV poniżej 900 (teoretycznie).

I to co mnie zastanawia, czy wąskim gardłem nie będą i tak regulatory? Ale jak to zwykle bywa "u innych działa" na zwykłych regulatorach:)
Hokus
Posty: 14
Rejestracja: piątek 30 gru 2011, 16:50
Lokalizacja: Okolice Warszawy

Post autor: Hokus »

Zwiększyłem częstotliwość sterowania regulatorami do ponad 330Hz, do tego estymację kąta robię z częstotliwością 200Hz. Wyraźnie się poprawiło, jutro będę próbował zestroić na nowo. Odpaliłem też silniki i kąt jaki wychodził mi z filtracji Kalmanem drgał maksymalnie o 1 stopień.

Na PID wrzuciłem na początek kąt na Kp, prędkość kątową na Kd i sumę kątów w czasie na Ki. I teraz tak intuicyjnie: duża wartość Kd spowoduje dobre "trzymanie" w jednym miejscu, z kolei Kp spowoduje powracanie z odchylenia. Ki ma skompensować różnice w silnikach.

1) Czy dobrze mi się wydaje i Ki można wywalić a zamiast tego trymować sobie quadro z aparatury?

2) Podczas zabawy ze strojeniem wychodziło mi że przy zmianach Kp i Kd jest jednak zachowana proporcja między nimi. I tak jak zwiększę Kp żeby wracało dla mniejszego kąta to musi się zwiększyć i Kd żeby po powrocie wyhamowało to w zerze.

3) Czy PID zda egzamin? Tutaj przecież kąt i silniki nie są powiązane funkcją liniową, prędkość kątowa z silnikami jest ale nie kąt. Czy w związku z tym nie powinno się tego PIDa wymnażać dla kąta funkcją która kompensuje tą nieliniowość?
Awatar użytkownika
PitLab
Posty: 967
Rejestracja: środa 17 mar 2010, 20:29
Lokalizacja: Warszawa
Kontakt:

Post autor: PitLab »

Fajnie ze jest jeszcze ktoś, kto bawi się takimi rzeczami. Być może widziałeś moją zabawkę: http://www.pitlab.pl/autopitlot.html Szerzej opisana jest na moim forum, oraz na RC-CAM.
Podałeś trochę mało danych aby można było głębiej diagnozować problem. Zwykle problem też jest znacznie bardziej złożony niż się na początku uważa. Trzeba czyścic pole przed sobą metodą małych kroczków.
Widziałem obrazek wykresami - co na nich jest przedstawione? Jakieś porównanie metod liczenia kąta, ale co konkretnie? W szczególności interesuje mnie ten czerwony wykres.
Na początku proponowałbym sprawdzić czy problemy nie wynikają z metod liczenia kąta. Zrób sobie wzorzec kąta i zmieniaj położenie IMU o ten znany kąt. Patrz jaki masz wynik, w szczególności zwróć uwagę na dynamikę pomiaru.

Co do PIDów to masz nietypowy algorytm regulatora - podajesz różne wartości na różne człony, więc nic dziwnego że metody Z-N dają niewłaściwe wyniki. Spróbuj oprogramować klasyczny regulator szeregowy i wtedy zrób test, to będziesz wiedział jakie są różnice miedzy twoim a standardem. Nie mówię że Twój jest niewłaściwy, ale jest inny niż używany w tej metodzie. Ja na przykład używam regulatora równoległego, ale znam zależność między klasycznym szeregowym a równoległym i mogę sobie przeliczyć wartości dla siebie.
Pytasz o wyrzucenie członu całkującego - to zły pomysł. Na samym PD nie uzyskasz zerowego uchybu. Trymowanie z aparatury działa na pseudostatyczną wartość zadaną a człon całkujący jest dynamiczny. W wielu prostych projektach używa się tylko członów PI.

W strojeniu regulatora bardzo pomaga wizualizacja tego co się dzieje. W moim wątku znajdziesz sporo przykładów wizualizacji działania PIDa. Jeżeli wiesz co testujesz i widzisz co wychodzi każdego członu życie staje się o wiele prostsze.
Ostatnio zmieniony czwartek 05 sty 2012, 17:22 przez PitLab, łącznie zmieniany 2 razy.
Piotrek.
Z różnych form kontaktu preferuję e-mail
darek53
Posty: 432
Rejestracja: środa 21 lip 2010, 00:45
Lokalizacja: PL

Post autor: darek53 »

Dlaczego zrobiłeś tak niepewny sposób zamocowania silnika do rurek na opaskach ?
Masz duże prawdopodobieństwo że silnik może się odchylić od pionu.
Awatar użytkownika
slawko_k
Posty: 1596
Rejestracja: niedziela 28 lut 2010, 14:24
Lokalizacja: podkarpackie

Post autor: slawko_k »

Hokus,
Chyba namieszałeś z tym regulatorem.
Może się mylę ale wprowadź do niego tylko błąd kąta od poziomu.
Regulator z odpowiednio dobranymi nastawami będzie dążył do wyzerowaniu błędu a wiec do wypoziomowania.
Hokus
Posty: 14
Rejestracja: piątek 30 gru 2011, 16:50
Lokalizacja: Okolice Warszawy

Post autor: Hokus »

darek53> To tylko tag wygląda, silniki są przykręcone śrubkami od dołu do spłaszczonej części rurki. Opaski mocują tylko "patyki" z piłeczkami do osłony śmigieł:)

PitLab> Co do linku to niestety 404, co do reszty to jak tylko dzisiaj dojadę do domu to szerzej się wypowiem:)

slawko_k> Co do tego błędu to chodzi mi o to że nie ma liniowej zależności między kątem (dana wejściowa regulatora) a prędkością silnika (wyjście regulatora). Dodatkowo jak na Kp dam błąd to na Kd powinna być jego różniczka, czyli dla kąta - prędkość kątowa. I mogę ją otrzymać dzieląc różnice w kącie aktualnym i poprzednim przez czas albo brać bezpośrednio z żyroskopu który ją mierzy.
Awatar użytkownika
PitLab
Posty: 967
Rejestracja: środa 17 mar 2010, 20:29
Lokalizacja: Warszawa
Kontakt:

Post autor: PitLab »

Hokus pisze:PitLab> Co do linku to niestety 404
Poprawione. Kropka na końcu zdania była źle interpretowana jako element linku.
Piotrek.
Z różnych form kontaktu preferuję e-mail
Awatar użytkownika
slawko_k
Posty: 1596
Rejestracja: niedziela 28 lut 2010, 14:24
Lokalizacja: podkarpackie

Post autor: slawko_k »

Dodatkowo jak na Kp dam błąd to na Kd powinna być jego różniczka, czyli dla kąta - prędkość kątowa
Hmm.
Ja to robiłem w sposób jaki znalazłem w internecie.

Kod: Zaznacz cały

pv = kat
Error = Setpoint - Pv                                
Pterm = Kp * Error                                    

Dterm = Kd * (pv-Last_pv)/dt                                   
Last_pv = Pv

Sum_error = Sum_error + Error*dt                         
Iterm = Ki * Sum_error
                                                                                          '
Regulacja = Pterm + Iterm - Dterm
Nie wiem czy to dobrze jest. Na logikę raczej działa. Mojego balansa w pionie utrzymuje.
Awatar użytkownika
PitLab
Posty: 967
Rejestracja: środa 17 mar 2010, 20:29
Lokalizacja: Warszawa
Kontakt:

Post autor: PitLab »

slawko_k pisze:Ja to robiłem w sposób jaki znalazłem w internecie.

Kod: Zaznacz cały

Regulacja = Pterm + Iterm - Dterm
Ja mam prawie tak samo. Trzeba tylko pamiętać że to jest regulator równoległy a reguły doboru Z-N są dla szeregowego czyli ostatnie równanie będzie wyglądało tak:

Kod: Zaznacz cały

Regulacja = Pterm * (1 + Iterm - Dterm)
Piotrek.
Z różnych form kontaktu preferuję e-mail
Awatar użytkownika
slawko_k
Posty: 1596
Rejestracja: niedziela 28 lut 2010, 14:24
Lokalizacja: podkarpackie

Post autor: slawko_k »

Piotrek jesteś pewny na 100% ?
Kilka programów analizowałem i było to żywcem sumowane jak u mnie.
Patrzę w kod MWC i też wygląda że jest to sumowane.
Awatar użytkownika
PitLab
Posty: 967
Rejestracja: środa 17 mar 2010, 20:29
Lokalizacja: Warszawa
Kontakt:

Post autor: PitLab »

slawko_k pisze:Piotrek jesteś pewny na 100% ?
Kilka programów analizowałem i było to żywcem sumowane jak u mnie.
Patrzę w kod MWC i też wygląda że jest to sumowane.
Bo tak jest najprościej zrobić i przynajmniej mnie jest łatwiej zrozumieć działanie poszczególnych członów jeżeli każdym kręcę każdym członem osobno niż kp regulowało by wszystkim.
Tak czy inaczej jestem na 99% pewien że metoda Z-N odnosi się do podstawowego, szeregowego modelu regulatora.
Zresztą nawet wikipedia pisze o wielu rodzajach regulatorów wymieniając transmitancję szeregowego i równoległego: http://pl.wikipedia.org/wiki/Regulator_ ... ichols.27a

Mam jeszcze sporo za małe doświadczenie aby to jednoznacznie stwierdzić. Trzeba zrobić trochę doświadczeń aby to potwierdzić albo obalić. Podstawowe przeliczenie z szeregowego na równoległy polega na uwzględnieniu wzmocnienia w wartościach Ti i Td. Wydaje mi się że to co wychodzi z Z-N trzeba podzielić przez wzmocnienie.


Edit: zerknąłem do swojego kodu, bo dopatrzyłem się że sumujesz człon różniczkujący z minusem. Być może mam błąd, ale u siebie dodaję wszystkie człony. Dodatkowo człon różniczkujący liczę nie z regulowanej wartości tylko z błędu (wartość zadana - wartość wejściowa).
Tak na chłopski rozum regulator ma ustawiać obiekt tak jak mu każe wartość zadana (u nas drążek aparatury). Jeżeli hipotetycznie zdarzyło by się takie coś że przesuwasz drążkiem i obiekt przesuwa się dokładnie tyle ile trzeba to ile ma wynosić akcja różniczkująca?
Licząc człon różniczkujący ze zmiennej wejściowej dostaniesz dużą wartość bo była zmiana chociaż błąd jest zerowy. Moim zdaniem masz źle.
Znak przy członie różniczkującym chyba jest dlatego ujemny, bo nie ma tam uwzględnionego liczenia błędu a tam własnie jest odejmowanie.
Podejrzewam że ktoś pisząc algorytm pomylił się, ale że różniczkowanie źle mu wychodziło, więc "naprawił to" zmieniając znak podczas sumowania członów.

Kiedyś robiłem testy regulatora. Być może warto było by do tego wrócić. Wyglądało to tak: http://www.pitlab.pl/forum/viewtopic.ph ... eb60#p1495

Edit2: Wczytałem się w to co piszą na wikipedii i akurat twierdzą odwrotnie, czyli że metoda Z-N dotyczy regulatora równoległego. Próbuję dotrzeć do źródeł swojej pierwotnej informacji ale nie mogę tego odszukać. Tak czy inaczej trzeba mieć świadomość i trzeba będzie to zweryfikować empirycznie.
Piotrek.
Z różnych form kontaktu preferuję e-mail
ODPOWIEDZ