Ta odpowiedź cieszy się zainteresowaniem. Patryk Sokol Opublikowano 17 Listopada 2019 Ta odpowiedź cieszy się zainteresowaniem. Opublikowano 17 Listopada 2019 Kiedy zaczynałem bawić się w quady, to naczytałem się dużo bzdur. O tym jak 32Khz to przyszłość, że filtry w BFie przewidują zachowanie pilota, albo że filtrowanie w Helio jest magiczne. Problem z takimi rzeczami jest taki, że fajnei to wygląda na materiałach promocyjnych, ale utrudnia zrozumienie tematu. Szczęśliwie - ja się przemęczyłem, ogarnąłem, więc mogę Wam opowiedzieć. Miłego czytania Czym jest quad i po co mu flight controller Jak jest quad większość z nas wie. Z grubsza wygląda to tak: Czyli klocek z (z reguły) czterema patykami i czterema silnikami na końcu. Brak nam tutaj rzeczy typowo kojarzonych z rzeczami latającymi, czyli skrzydeł, stateczników itp. W efekcie quad zdecydowaną większość swojej siły nośnej generuje silnikami. I to jest jeszcze w miarę jasne. Silniki kręcą, mamy ciąg, quad leci. Brakuje nam jednak w tym wszystkim stabilizacji. Tzn. samolot jest konstrukcją stateczną. Wytrącony z równowagi, albo wróci z powrotem do stanu równowagi, albo chociaż nie będzie pogłębiał tendencji. Quad tego luksusu nie ma. Quad wytrącony z równowagi z radością będzie kontynuował obrót. W praktyce - mały quad ma na tyle małą bezwładność, że już po dodaniu gazu zacząłby się obracać w losowych kierunkach. Większy pewnie dałoby się ustabilizować wykonując ręczne korekty, ale na pewno byłoby to dalekie od wygody. W przypadku quadów latających w trybie acro - drążkiem sterujemy prędkością kątową z jaką obraca się quad. Tzn. drążek w neutrum odpowiada zerowej prędkości kątowej, a odsuwając go co raz bardziej na zewnątrz zbliżamy się do maksymalnej ustalonej prędkości kątowej. Aby to umożliwić stosujemy właśnie flight controller. Jest to mały kawałek elektroniki, który odbiera od odbiornika RC prędkości kątowe jakie ma osiągnąć quad, porównuje to do swoich pomiarów (robionych żyroskopem) i tak steruje silnikami aby osiągnąć powierzone zadanie. Oczywiście w tym wszystkim mamy jeden wyjątkowy drążek, którym jest przepustnica. Przepustnica nie steruje prędkością kątową quada, steruje sumą ciągów. Tzn. Dając przepustnicę na 50% określamy średnie wysterowanie silników. Tzn. w stanie równowagi oznacza to, że wszystkie silniki rozkręcą się do połowy wysterowania. Kiedy quad zostanie z niej wytrącony, to tyle ile jeden silników zejdzie z obrotów , tyle drugi na nie wejdzie. W efekcie mamy zachowany stały ciąg. Potrzebny jest nam więc mechanizm który będzie definiował jak FC ma reagować na niezgodność tego co chcemy, od tego co otrzymujemy. I w tym celu stosujemy: 2. Pętla PID Pętla PID jest obecnie najpowszechniej stosowaną metodą sterowania jaką znajdziemy w automatyce. Stosuje się to praktycznie wszędzie, od frezarek CNC, przez roboty przemysłowe po quady. W najbardziej podstawowej, abstrakcyjnej formie zapisujemy to tak: I w tym równaniu mamy:u(t) = wynik funkcji kontroli (czyli kierunek i siła działania) Kp- Bezwymiarowy współczynnik określający znaczenie członu proporcjonalnego (czyli wartość P jaką wpisujemy w Betaflighcie) e(t) - odchylenie wartości mierzonej od pożądanej, czyli błąd. Ki - Bezwymiarowy współczynnik określający istotność części całkowej (czyli wartość I jaką wpisujemy Kd - Bezwymiarowy współczynnik określający istotność części różniczkowej. Tutaj wchodzimy stety/niestety w w troszkę wyższą matematykę. Ale spokojnie, wszystko się wyjasni jak wejdziemy w każdy człon po kolei. To co trzeba zauwazyć, to to, że quadcopter posiada tak naprawdę trzy pętle PID. Po jednej na każdą z osi. Innymi słowy - w quadzie mierzymy trzy prędkości kątowe, określamy trzy żądane prędkości kątowe i wyliczamy trzy funkcje błędu. Dla uproszczenia będziemy mówić o jednej z osi. Pętle PID mają różne implementację. Pneumatyczne, czysto mechaniczne, czy cyfrowe. O ile mechaniczne, czy pneumatyczne działają w sposób ciągły, tak systemy cyfrowe nie mogą sobie na to pozwolić, bo procesor może przeliczać tylko jedną rzecz na raz. W efekcie kolejne elementy pętli PID są przeliczane po kolei i raz na jakiś czas otrzymujemy wynik, którym jest komenda dla regulatorów silników. I tutaj się dowiadujemy czym tak naprawdę jest słynne taktowanie pętli PID, które wyrażamy w Hz. Kiedy mamy taktowanie pętli PID określone jako 8kHz to znaczy, że 8 tysięcy razy w ciągu sekundy jest wyliczana pętla PID i 8 tysięcy razy w ciągu sekundy silniki dostają nową komendę. Mówi to nam o jednej ważnej rzeczy. Minimalne opóźnienie przy pętli 8kHz to 0,125ms. Przy pętli 32kHz 0,03125ms, więc cztery razy szybciej. Czysty zysk, prawda? Nic tylko coraz wyżej taktować pętle PID, a quady będą latać coraz lepiej. I to niekoniecznie jest prawda. Do wymyślenia dlaczego muimy porozmawiać o budowie pętli jako takiej. Dlatego: 3. Część proporcjonalna pętli PID Część proporcjonalna pętli ma wzór prosty do bólu: Czyli mnożymy wartość błędu (e(t)) przez współczynnik wzmocnienia (Kp). Z tego płynie prosty wniosek - siła reakcji tego członu jest wprost proporcjonalna do odchylenia od pożądanej wartości. I ten człon jest głównym motorem napędowym reakcji. Mamy duży błąd, reaguje mocno. Nie ma dużego błędu - siedzi cicho. W efekcie - odpowiada on na bieżący stan układu. I tu nie ma wiele więcej do powiedzenia. Rozpatrujcie go jak taką gumkę, którą im mocniej się napnie, tym bardziej ciągnie Jedyne co warto więcej zauważyć, to to, że ta część mało reaguje na drgania, tak długa jak nie mają one amplitudy. Nie interesuje jej częstotliwość drgań, czas narastania, nic - tylko położenie od żądanej wartości. 4. Część całkowa pętli PID Część całkowa zahacza już o bardziej złożone kwestie, więc i wzór ma bardziej złożony.: W tym oznaczeniu mamy do czynienia z całką Riemanna (czylu całką oznaczoną). Graficzną interpretacją tej funkcji ładnie obrazuje obrazek z Wikipedii: Czarna linia pokazuje nam funkcję f(x). Zaś pole pod krzywą (przyjmuje się, ze poniżej zera ma ona ujemną wartość) obrazuje nam całkę w przedziale od a do b. Innymi słowy - całka oznaczona jest po prostu polem pod wykresem funkcji. W przypadku naszej pętli PID mamy całkę z funkcji błędu w czasie od i do t (gdzie i to jakaś arbitralna wartość czasi, np. z 10 ostatnich iteracji pętli PID). W efekcie człon ten odnosi się nie tylko do obecnego stanu układu, ale też bierze pod uwagę przeszłość. Kiedy mamy do czynienia z małym błędem, który trwa w czasie to część proporcjonalna nie wykaże na niego żadnej rozsądnej reakcji (z jej perspektywy to ciągle ten sam błąd, na który reaguje bardzo delikatnie). W efekcie stały, mały błąd nie zostanie przez współczynnik proporcjonalny wyeliminowany w żadnym rozsądnym czasie, będzie tylko powolutku, asymptotycznie dążyć do zera, tak aby osiągnąć to zero w nieskończonym czasie. Część całkowa z kolei liczy pole pod wykresem błędu od czasu. W efekcie mały błąd najpierw daje mala reakcję, ale z każdą chwilę kiedy jest on nieskorygowany, tak długo będzie wymuszał coraz większą rekcję członu całkowego. W efekcie - część całkowa jest tym co poprawia nam błąd skumulowany. W praktyce u nas jest to np. przesunięty środek ciężkości. Przy zerowym współczynniku całkowym quad zawsze będzie ciągnął w jedna stronę, powolutku, płynnie się w nią przechylając. Z kolei np. w locie do przodu będzie chciał się wypłaszczyć, bo tak każe aerodynamika. Latanie w ten sposób to ogólnie ciekawe doświadczenie, polecam spróbować, to nie jest niebezpieczny eksperyment Część całkowa ma też jeszcze jedną przyjemną cechę - jest całkowicie bezpieczna. Tzn. z racji mierzenia pola pod wykresem nie jest w stanie quada rozkołysać, rozgrzać silników, być czułą na drgania, nic. Można bezkarnie podnieść i pięciokrotnie, a quadowi nie stanie się krzywda, po prostu będzie coraz "sztywniej się prowadził" Problem polega na tym, że na razie mamy wciąż quada który jest mocno rozchwiany i potrzebuje czasu, aby osiągnąć potrzebne przez nas prędkości kątowe. Da się tym latać (próbowałem ), ale nie polecam nikomu. Aby rozwiązać ten problem przejdźmy do: 5. Część różniczkowa pętli PID Część różniczkowa służy do... przewidywania przyszłości... Z racji tego nie może mieć szczególnie prostej definicji: To co widzicie wyżej jest wbrew pozorom bardzo proste. Część różniczkowa jest po prostu iloczynem współczynnika Kd i różniczki funkcji błędu. Różniczkę ładnie obrazuje nam obrazek z Wiki: Czarna linia to nasza funkcja e(t), a czerwona linia, pokazuje pochodną policzoną w punkcie styku. Linia ta pokazuje nam nachylenie krzywej w tym punkcie, dzięki czemu wartość pochodnej w tym punkcie równa jest tangensowi nachylenia stycznej. Dla prostego zobrazowania:funkcja o stałej wartości (quad lezy na stole) - pochodna ma wartość zerową quad ciągle przyśpiesza w stałym tempie - pochodna ma stałą wartość. Innymi słowy współczynnik ten reaguje nie na wartość funkcji błędu, a na szybkość jej zmiany, niezależnie w którą stronę nastąpiła zmiana. Na tym polega więc jego przewidywanie przyszłości. Widzi, ze nagle zaczyna się wartość zmieniać, więc pętla PID odnosi się do tego co ma się stać i już zaczyna hamować. To trochę jak ktoś się na Was zamachnie kamieniem, od razu się schylicie, zanim kamień już poleci. Problem polega na tym, że jest to współczynnik bardzo istotny, ale też bardzo czuły na drgania. Wynika to z tego, że reagowanie na zmianę jest niezależne od wartości tej zmiany. Niezależnie od tego czy quad momentalnie przyśpieszy w jakimś kierunku, czy jest to jest bardzo szybkie drganie - dla pętli PID nie ma to znaczenia, zareaguje równie gwałtownie. To jest główny powód dla którego tyle szarpiemy się z filtrowaniem odczytu żyroskopu. Żeby drgania zrobiły problem części proporcjonalnej, czy całkowej musiałyby mieć duża amplitudę, a takich silniki i aerodynamika nie generują. Część różniczkowa z kolei nie dba o amplitudę. Dla niej większa częstotliwość równa jest większej reakcji .W efekcie - bez filtrowania quad bez filtrowania rusza na księżyc od razu po uzbrojeniu I dlatego współczynnik D jest uznawany za niebezpieczny. Ustawiony zbyt wysoko powoduje, że silniki zmieniają moc tak szybko, że przestają nadążać, a przez to mogą się nawet spalić. Niestety - jest to jedyna nasza metoda działania przeciw bardzo szybkim zaburzeniu równowagi. Propwash, wibracje od aerodynamiki, gwałtowne zatrzymanie drążka, - to wszystko obsługuje część różniczkowa i to ona zapewnia nam tak naprawdę dobrze latającego quada. 6. Całość pętli PID Jak widzicie - pętla PID to nie magia, to zwykła suma analizy tego co wypluwa żyroskop. Myślę, że fajnie obrazuje co robią poszczególne człony ta prosta animacja: Pięknie widać jak część P reaguje na komendę, część I kasuje drobny, zaległy błąd, a część D kasuje zbędne wahania. Teraz - zastosujmy to w quadzie 7. Setpointy - czyli jak wyznaczyć błąd Jak ustaliliśmy - pętla PID operuje na różnicy między między zmierzoną prędkością kątową quada. Trzeba więc jakoś określić wymagania dotyczące prędkości kątowej quada. W tym celu mamy ustawienia Rate'ów. Czyli dla każdej osi mamy kilka cyferek która pozwalają ustalić jaką prędkość obrotową quad osiągnie maksymalnie oraz jaki kształt ma ta krzywa. Problem polega na tym, że to nie będzie działać prawidłowo. Komendy które przekazuje nadajnik wyglądają tak: Czyli jak widać ich zmiana jest skokowa. Wynika to z tego, że współczesne nadajniki RC używają cyfrowych systemów kodowania. Przesyłane są one paczkami i z każdą kolejną paczką mamy do czynienia ze skokową zmianą wartości. Dla nas - jest to bez znaczenia, kanciastość jest na tak drobnym poziomie, że nie da się jej w ogóle wyczuć (nie, że jest niewyczuwalna, po prostu nie da się tego wyczuć). Problem polega na tym, że kiedy krzywa jest nieciągła (kanciasta), to jej pochodna staje się nieokreślona. W efekcie musimy stosować filtrowania sygnału. To daje nam coś co nazywamy setpointem, czyli komenda RC przemnożona przez współczynniki do określenia szybkości obrotów, a następnie przepuszczona przez filtrowanie, tak aby zmiana jej wartości była płynna. To daje już nam podstawę do wyznaczenia wartości błędu. Wystarczy odjąć wartość zmierzoną od setpointu 8. Filtrowanie - po co nam to i jak to działa? W quadzie filtrowanie ma jeden główny cel - odsianie wszelkich wibracji, czy to od silników, czy to od aerodynamiki, tak aby pętla PID zajmowała się jedynie faktycznym ruchem quada. Teoretycznie sprawa jest prosta. Najwyższe sensowne rate'y do coś koło 2000deg/s, czyli poniżej 6hz. Teoretycznie wystarczy ustawić więc filtr dolnoprzepustowy, tak aby wszystkie zmiany powyżej 6hz były odrzucane były gotowe i happy? W sumie to jest jeszcze propwash, na który trzeba zareagować - poniżej 50hz przechodzi i git? No też nie - filtr dolnoprzepustowy który odetnie wszystko powyżej 50hz musiałby mieć częstotliwość odcięcia około 25hz (można liczyć, że sensowne tłumienie zaczyna się od dwukrotności częstotliwości odcięcia) daje nam solidne 10ms opóźnienia. Wynika to z własności fizycznie wbudowanej we wszelkie filtrowanie. Wprowadza ono opóźnienie, tym większe im szerszy jest zakres filtrowania i im niższa jest częstotliwość odcięcia. I to jest własność fizyczna filtrowania opisana w teorii sygnałów, tego zwyczajnie nie da się zmienić. Stąd zawsze powinniśmy dążyć do dwóch rzeczy: 1. Jak najmniej filtrowania, żeby opóźnienie było jak najniższe 2. Jak najczystszy sygnał, tak aby reakcja pętli PID była jak najszybsza. To jest powód dla którego tak naprawdę porzuciliśmy płytki z procesorem F1, a teraz płytki z procesorem F3. Zamiast filtrować wszystko jak leci, dbamy o to żeby filtrować jak najbardziej precyzyjnie. Przejedźmy się teraz po sposobach filtrowania. Jak tylko powiem Wam jak prosto przeanalizować sobie drgania w quadzie 9. Wykresy wodospadowe drgań Jest sobie takie fajne narzędzie jak Plasmatree PID Analyzer: https://github.com/Plasmatree/PID-Analyzer Analizuje on logi z BlackBoxa i generuje nam coś takiego: Wykresy te pokazują nam graficznie gdzie nam coś drga i ile energii tam można znaleźć. Na osi X mamy procent przepustnicy, na osi Y częstotliwość drgań. Kolor określa nam ile jest energii przy danym położeniu przepustnicy dla danej częstotliwości. Jeśli np przy 50% przepustnicy i 300Hz widzicie żółty kolor to od razu wiadomo, że coś tam drga. Środkowa kolumna pokazuje nam jak wygląda to przed filtrowaniem, a lewa kolumna pokazuje jak wygląda to po filtrowaniu. Prawa kolumna zaś pokazuje nam drgania samej części różniczkowej pętli PID. Jest to o tyle przydatne, że część różniczkową filtruje się dodatkowo. Bardzo lubię jak na tych wykresach widać jak pracują silniki. Praktycznie zawsze widać dwie belki idące w górę częstotliwości z przepustnicą. Belka mające niższą częstotliwość to są przednie silniki (bo przednie silniki mają lżejsze życie. Nie muszą walczyć z tym, że quad woli lecieć poziomo niż pochylony do przodu), a belka umieszczona wyżej to silniki tylne. W gratisie mamy jeszcze wykres obrazujący jaka jest przepuszczalność naszego filtrowania. Powinny przechodzić rzeczy tylko dla niskich częstotliwości. 10. Statyczne filtry środkowozaporowe (Static notch filters) Ten typ filtrów, to filtry których używamy do pozbycia się jednej stałej częstotliwości drgań, np. rezonansu ramy. Są to wąski filtry, które ręcznie ustawiamy na konkretną częstotliwość. Bardzo łatwo oszacować kiedy będą potrzebne: Tutaj oznaczyłem jak wygląda coś co potrzebuje statycznego filtra. To jest prawdopodobnie rezonans ramy. Niezależnie od przepustnicy mamy drgania na tej częstotliwości. Teraz wystarczy ustawić tylko filtr statyczny na tej częstotliwości, a jego szerokość ustawić tak aby objęła cały zakres drgań. Oczywiście testujemy, czy filtr zjadł wszystko, jak zjadł to dobrze, jak nie to trzeba go poszerzyć. Filtr środkowozaporowe ogólnie stosować warto. Nie dodają znaczącego opóźnienia, nie obciążają procesora, a sprawnie zabezpieczają przed tym, żeby filtry dynamiczne zajmowały się tymi drganiami (a mają lepsze zajęcia). 11. Dynamiczne filtry dolnoprzepustowe (Dynamic low-pass filter) Od wersji 4.0 Betaflight wprowadził filtry dolnoprzepustowe powiązane z przepustnicą. Idea za nimi stojąca jest taka, że kiedy mamy ustawioną wyższą przepustnicę, wtedy drgania quada uciekają w stronę wyższych częstotliwości. Założenie nie jest bezpodstawne. Wtedy zarówno silniki drgają wyżej, jak i drgania aerodynamiczne uciekają w stronę wyższych częstotliwości. Dzięki temu kiedy potrzebujemy powalczyć z propwashem, to filtry te generują niższe opóźnienie, niż kiedy np opadamy na małej mocy. Ich regulacja jest bardzo prosta. Stopniowo podnosimy częstotliwość minimalną i maksymalną filtra, aż zacznie wyłazić coś takiego: W lewej kolumnie, już po filtrowaniu, widać jak wylewa się syf dla stosunkowo niskich częstotliwości przy wyższym gazie 12. Dynamiczny filtr środkowozaporowy (dynamic notch) To jest z kolei bardziej złożony typ filtra. FC analizuje w jakim zakresie ma najwięcej drgań (używając transformaty Fourriera, bo ARMy mają do tego dedykowaną jednostkę obliczeniową - ot taka ciekawostka). Rzecz bardzo przydatna, bo fantastycznie tłumi drgania, które szkodzą najbardziej, a ma mikry wpływ na opóźnienie. Do niedawna to był główny filtr który ucinał drgania silników. Nie ma powodów, żeby wyłączać dynamic notcha, to bardzo skuteczne narzędzie. W większości przypadków wystarczy zostawić na defaulcie. Jeśli latacie whoopami, czy innymi toothpickami, to warto ustawić jego zakres na high, bo małe quady wyżej kręcą silniki. 12. Filtry środkowozaporowe oparte o telemetrię. To jest najlepsza rzecz od wymyślenia cyjanoakrylu. Są to filtry oparte o telmetrię zwracaną do FC przez ESC. Dzięki temu FC zna konkretne obroty każdego silnika i może ustawić filtr na dokładną częstotliwość drgań które wytwarza każdy z silników (i najbliższe harmoniczne przy okazji). Tak zaimplementowany filtr ma nikłe opóźnienie (ułamki ms) i jest do bólu skuteczny. Kiedy widzicie całkowity brak drgań od silników po filtrowaniu, to praktycznie zawsze jest to ten filtr. Przed tym dobrze filtrowany quad wyglądał tak: Dodatkowo - z racji tego, że ten filtr zajmuje się silnikami , to dynamic notch pozostaje wolny. W efekcie to co normalnie robiłoby się filtrem dolnoprzepustowym, jak np drgania aerodynamiczne, tak teraz może się tym zająć filtr dynamiczny. W efekcie możemy coraz bardziej rezygnować z filtrów dolnoprzepustowych i zyskiwać sprawniejsze filtrowanie oraz mniejsze opóźnienie. No i jeden dodatkowy bonus. Nawet z urwaną łopatą quad lata prawidłowo. Tylko śrubki się rozkręcają 13. Opóźnienie, czyli po co się męczyć? No właśnie, po co ta walka z filtrami? Jeszcze rok temu prawidłowo wyregulowany quad miał koło 6-7ms opóźnienia pętli PID. Dzięki przejściu na filtry dynamiczne mamy opóźnieniu rzędu 2,5ms, więc prawie 3x szybciej. I od razu powiem - tu nie chodzi o nasz czas reakcji, na samych nadajnikach RC mamy pewnie z 10ms opóźnienia. Chodzi o to jak szybko quad może reagować na drgania, czy wytrącenia z równowagi. Szybszy czas reakcji oznacza, że lot jest płynniejszy, nie ma problemów z propwashem, a same silniki biorą mniej prądu (bo reagują mniej, a szybciej). I teraz najważniejszy wniosek z tego wszystkiego - kiedy zrobicie sobie nowego quada, to zawsze zaczynajcie regulacje od filtrowania. Opóźnienie ma wpływ na to jakie PIDy można uzyskać. Jeśli zaczniecie od PIDowania to cała robota pójdzie do kosza. Dlatego jak obejrzycie ten film:https://www.youtube.com/watch?v=WhW_SZG3wY4 To nie pytajcie o to jakie PIDy mam, że to tak płynnie lata. To kwestia filtrowania, później PIDów. Tu jeszcze jedna ciekawa uwaga - w swoich konstrukcjach stosuje teoretycznie przewymiarowane silniki, bo ostatnio 2208. Celem nie jest dużo mocy, bo pełnego gazu używam bardzo, bardzo rzadko. Celem jest zmniejszenie czasu reakcji silnika na zmianę wysterowania. Większy moment skraca czas reakcji, robiąc dokładnie to samo co precyzyjnie ustawione filtrowanie. No i ostatnia dygresja. Różnica opóźnienia między 4kHz taktowania pętli, a 32kHz to nędzne 0,21875ms. Przy opóźnieniu filtrów ładnie widać, jak bardzo bezużyteczne jest taktowanie pętli 32kHz. Ładnie wygląda tylko na materiałach marketingowych. 14. Sygnał dociera do pętli, i co? - czyli zaawansowane funkcje PID No i problem zawsze będzie zawsze ten sam - niezależnie jak dobrze wypidujemy klasyczną pętle PID, tak zawsze quad będzie latał jakby miał luzy na układzie kierowniczym. Będzie stabilny, będzie dobrze radził sobie z propwashem, ale będzie się prowadził luźno. Wynika to z tego, ze klasycznie pętla PID zachowuje się tak: Tzn - widzimy, że setpoint najpierw podąża w górę, a odczyt z żyroskopu jakby się musiał namyśleć i dopiero po chwili rusza za setpointem. Wynika to z tego, że przeszkadza nam bezwładność quada. Póki różnica nie jest duża, póty część proporcjonalna (a tym bardziej całkowa) nie wydaje mocnej komendy ruchu za setpointem. Aby walczyć z tym problemem W tym celu powstał mechanizm zwany feed forwardem. Jest to mechanizm podawania komend do silników z pominięciem pętli PID. Tzn. kiedy poruszamy gwałtowanie drągiem w prawo, to automatycznie powoduje to wydanie komendy obrotu w prawo, bez czekania aż błąd wysterowania się pojawi. Siła tej komendy zależna jest nie tyle od wartości wychyłu drąga, co od dynamiki zmiany. Czyli mamy kolejną pochodną. Fajnie jak to działa widać tutaj: Widzimy, że odczyt żyroskopu praktycznie pokrywa się z setpointem, nie ma już opóźnienia. Fajnie też widać, że to właśnie feed forward odpowiadał za ruch. To on ma jednoznaczną tendencję nakazującą ruch, część proporcjonalna bardziej waha się wokół zera, pełniąc rolę stabilizacyjną. Drugim fajnym zabiegiem stosowanym we współczesnych flight controllerach jest dynamiczna wartość wzmocnienia części różniczkowej. Tzn. Obecnie podajemy dwie wartości D i Dmin. Tak naprawdę większość lotu robimy na wartości podanej dla Dmin. Wzmocnienie D wskakuje na docelową wartość, tylko gdy quad poczuje bardzo duże przyśpieszenia, albo gdy gwałtownie wychylimy drążek. Zapobiega nam to przelatywaniu quada przez setpoint (czyli np. ładnie hamuje po beczce, bez odbicia) oraz ładnie wycina nam drgania od propwashu. A dzięki temu, że większość lotu robimy na niskim wzmocnieniu części różniczkowej, to nie mamy problemu z przegrzewającymi się silnikami i innymi takimi przyjemnościami. Ostatnim, powszechnie stosowanym mechanizem, jest obcinanie części całkowej. Tzn. w pewnych warunkach część całkowa tylko przeszkadza. W efekcie kiedy wykonuje się gwałtowne ruchy, to FC świadomie obcina nadmiernie aktywną część całkową. Zapobiega to np. miękkim odbiciom po szybkiej beczce. Mało emocjonujące, ale przydatne 15. To jak ustawiać te PIDy? Przede wszystkim - liczę, że zdjąłem nieco aury tajemnicy z działania quada. Dla mnie - to właśnie konkretna wiedza spowodowała, że przestałem robić rzeczy na ślepo, a zacząłem robić coś świadomie, liczę że Wam też to pomoże. Pamietać też trzeba, że PIDowanie nie służy do tego, żeby quad się przyjemnie prowadził. Quad ma dobrze realizować zadane setpointy. Kwestie prowadzenia dogrywa się później ustawieniami rate'ów. Np jak dobrze wyregulowany quad zbyt ślamazarnie reaguje, to trzeba podnieść RC rate'y żeby pierwsza część ruchu była bardziej dynamiczna. Ale zróbmy teraz prosty algorytm: 1. Włącz dwukierunkowego Dshota. Niezależnie czy macie BLHeli-S, czy BLHeli-32 nie warto sobie tego żałować, różnice robi to nieziemską. Instrukcje jak to zrobić znajdziesz np. tutaj:https://www.youtube.com/watch?v=rawGQvMRzM4&t=507s 2. Zrób lot testowy i zrzućcie log 3. Sprawdź wykres drgań linkowanym przez mnie Plasmatree 4. Jeśli filtrowanie wygląda ok, to przesuwaj te suwaki: powoli w prawo (trochę prawo, sprawdzić czy silniki się grzeją i tak aż dojdziecie do gorących silników, albo do końca suwaków) 5.Kiedy to jest dograne to zrób zwyczajny lot i zrzuć log na komputer i zobacz jak wygląda realizowanie setpointów. Jeśli żyro przelatuje przez setpoint, to znaczy, że masz za dużo P, albo za mało D (tak naprawdę to kwestia stosunku P do D) Jeśli masz widoczne wibracje o stałej am0plitudzie to zmniejsz P Jeśli masz wibracje o spadajacej amplitudzie, to za dużo D A jeśli masz duże opóźnienie w reakcji na zmianę setpointu to podnieś Feedforward. Feed forwardu ogólnie nie ma co się bać, nawet 300-400 nie robi krzywdy. Dobrze robi się to suwakami: ładnie też znaki zapytania opisują do czego to służy 6. Po tym etapie dobierz D_min tak aby zminimalizować propwash, a nie było problemu z temperaturą silników. I to tyle. Jak masz spełnione powyższe warunki, to nie ma co dziubdziać PIDów. Tzn. Zmiany będą bardzo nikłe, na tyle, że nie będzie ich czuć w locie. Jak osiągniesz ten etap, to proponuje zająć się ustawieniami rate'ów. Często okazuje się, że dobrze wyregulowany quad, który dobrze realizuje setpointy zaczyna być nerwowy, bo reakcja jest szybka. Wtedy jedyne co trzeba to zmniejszyć rate'y. I tyle Jak coś to pytajcie 4 2
d2f Opublikowano 18 Listopada 2019 Opublikowano 18 Listopada 2019 OK. Teraz dodarło do mnie jak dużo błędów popełniam z moimi quadami... ;-) Pierwsze co, to muszę przemyśleć swoje prehistoryczne silniki. Drugie - cała konfiguracja od początku. I po przeczytaniu mam wrażenie, że brakowało właśnie takiego wyłożenia tematu. Bardzo dobrze, że Patryk wziął się za quady, bo wszyscy na tym skorzystamy. Uważam, że warto przykleić wątek, bo jest tu cała masa wartościowej wiedzy i do tego przystępnie wyłożonej.
Exu Opublikowano 18 Listopada 2019 Opublikowano 18 Listopada 2019 Dziękuję kolego za to opracowanie. Jak najbardziej wypadało by przykleić wątek.
wojtek-a Opublikowano 18 Listopada 2019 Opublikowano 18 Listopada 2019 Dzieki Patryk. Troche rozjasnilo w glowie chociaz rozbolala od lektury . Koniecznie przykleic!
Adriee Opublikowano 9 Grudnia 2019 Opublikowano 9 Grudnia 2019 Patryku - gratulacje i podziękowania za rzeczowy opis PID-owania w Betaflight. Postanowiłem sprawdzić, czy będzie znaczna różnica w charakterystyce lotu mojego freestylowego koptera, jak ustawię wg Twoich zaleceń. I ... niestety jest znacznie gorzej, niż po ,,mojemu". Dlaczego? Sprawę filtracji komplikuje u mnie zastosowanie 2 różnych silników w jednym modelu. Na przodzie są RCX 2207 2400kV, a na tyle GEPRC GR-2207 2400KV. Wg moich obserwacji taki dron wymaga o wiele więcej filtracji, niż w przypadku standardowej budowy - wszystkie silniki jednakowe. Mimo włączonej obsługi RPM-Filter - nie mogę zejść z filtracją niżej, niż ustawienia domyślne BF 4.1.1. Zejście z filtracji powoduje u mnie nieznaczne kołysanie modelu na boki przy bardzo niskim gazie. Do tego rosną zakłócenia w obrazie FPV. Wychodzi na to, że muszę mieć znacznie wyższą filtrację, niż w typowych modelach 5-cali na baterie 4s. Dlatego w moim przypadku - zamiast ruszać poziom filtracji - lepszy efekt przynosi dopasowanie PID-ów. A w szczególności podwyższenie D-Term i obniżenie P. Niestety jest i efekt negatywny takiego działania - dron robi się wtedy dosyć drętwy i otępiały na komendy z aparatury. Nawet podwyższenie FeedForward nie daje za dobrego rezultatu (a co najmniej nie taki, jaki bym chciał). Jednak pewnie w większości przypadków - ustawienie koptera wg Twojego poradnika znacznie zredukuje prowash i przyspieszy reakcję koptera na wszelkie komendy. Powoli zaczynam rozmyślać o wymianie silników na wszystkie jednakowe. Ot - takie moje drobne wnioski i spostrzeżenia
Patryk Sokol Opublikowano 9 Grudnia 2019 Autor Opublikowano 9 Grudnia 2019 Znaczy wiesz... Jak sprzęt jest dojechany o rozklekotany, to niespecjalnie da się podwyższać częstotliwości filtrowania. Szczególnie na zniszczone łożyska filtry RPM wiele nie pomoże, bo wtedy częstotliwość drgań nie zmienia się liniowo z obrotami. A to, że masz dwa różne silniki, to wskazuje na to, że ten quad już dużo przeszedł
Rekomendowane odpowiedzi