logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

ATMEGA128 - Strojenie regulatora PID dla quadrocoptera, problem z parametrem I

prociomen007 12 Sty 2015 07:32 2790 10
REKLAMA
  • #1 14321101
    prociomen007
    Poziom 18  
    Witam, w oparciu o mikrokontroler atmega128 buduje sobie platformę latającą nazywaną często quadrocopterem :-D. Prace posuwają się naprzód i jestem z całości naprawdę zadowolony. Utknąłem jednak ostatnio na strojeniu regulatora PID i nie mogę przebrnąć przez ten temat. I o ile dobór parametrów P jest dla mnie jasny i zrozumiały to nie mogę sobie poradzić z współczynnikiem I. Parametru D nie używam. Na początek może funkcja pełniąca rolę regulatora:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Kd jeśli jest za małe to odpowiedzi silników są bardzo słabe a w skrajnych przypadkach nie wystarczają na kompensacje błędu. Za duże kd powoduje pojawienie się niegasnących oscylacji gdyż silniki reagują zbyt gwałtownie. Ustaliłem że w moim przypadku optymalna wartość kd wynosi 9. Nie mam teraz pojęcia jak dobrać do tego parametr Ki oraz Imax. Próbowałem robić to na tak zwane 'oko' ale nie mogę wychwycić żadnych istotnych zmian w zachowaniu quadrocoptera po zmianie tych parametrów. Testowałem wielkości z przedziału 1..20 i wydaje mi się że nic się nie zmienia ( i max ustawione na 50 ) . Dopiero kiedy eksperymentalnie Ki ustawiłem na 100 a imax na 500 to po przechyleniu platformy w jakimś kierunku ( ręcznie/ na siłę ) silniki które powinny zwalniać - zwalniały a wręcz potrafiły się zatrzymać ( czyli coś tam się działo, bo przy mniejszym ki nigdy się nie zatrzymały ). Znalazłem w sieci taki algorytm:

    ATMEGA128 - Strojenie regulatora PID dla quadrocoptera, problem z parametrem I

    Ale jakoś nie przekonuje on mnie ponieważ Ki z tych obliczeń wyjdzie dla mnie jakieś bardzo duże.
  • REKLAMA
  • #3 14321146
    Steryd3
    Poziom 33  
    Z doświadczenia wiem, że dobór eksperymentalny parametrów jest najszybszy. Czasem stosowałem różne metody ale często służyły one za punkt wyjściowy.
    Co do przedstawionej przez ciebie metody oscylacyjnej...wyznaczyłeś tzw. Kp krytyczne przy którym powstają oscylacje niegasnące i wyniosło ono 9 ale nic nie piszesz o częstotliwości tej oscylacji które są potrzebne do wzoru.
    Dodatkowo z tego co pamiętam wzory na poszczególne parametry różnią się w zależności od tego czy jest to regulator P, PI (jak w twoim przypadku) czy PID (tak jak masz we wzorach). Poszukaj więc wzorów na regulator PI. Dodatkowo współczynniki te mogą się "nieco" różnic w zależności od tego co chcemy aby ten regulator robił i na czym nam zależy. Czy zależy nam na małych oscylacjach, czy na szybkim podążaniem za wartością zadaną a może na jej dokładnym "odtworzeniu".
    Co do samego algorytmy...jedyne na co warto zwrócić uwagę to by nie nasycić całki( chyba to masz zrobione) i by algorytm odpalał się ze stałym znanym i uwzględnionym interwałem czasu. Jeżeli jest to 1Hz to wszystkie parametry są wprost.

    Teorii do tego jest mnóstwo i mnóstwo materiałów na sieci. Warto jednak pierwsze dobrze poeksperymentować.
  • REKLAMA
  • #4 14321162
    prociomen007
    Poziom 18  
    Rozumiem, uruchomienie w moim przypadku członu D nie będzie problemem bo funkcja obliczająca ciąg ma ten parametr zaimplementowany wystarczy ustawić kd. Ale to może na później. Jeśli chodzi o dobór tego I experymentalnie to do czego dążyć? Nie mogę uchwycić żadnej znaczącej różnicy po jego zmianie w zachowaniu quadro. Jak to tego wszystkiego ma się imax?
  • #5 14321169
    niziak
    Poziom 14  
    Ja bym nie używał float-ów. Tylko wszystko zrobił na int-ach wymaganej długości przemnożonych przez 100 lub 1000 (zależy od dokładności).
    P i D jest obowiązkowe, I możesz pominąć.

    P - robi korektę proporcjonalną do błędu, ale można "przeskoczyć" na drugą stronę gdy za duże i spowodować oscylacje.

    D - porównuje aktualną różnice z poprzednią (różnica = błąd). Widzi jak szybko korekta działa, i pozwala wyhamować na czas aby nie "przeskoczyć" na drugą stronę.

    I - gdy PD dobrze działa i prędkość już jest prawie dobrze ustabilizowana, okazać się może, że błąd jest tak mały że PD nie zadziała. Np przy małej precyzji obliczeń obliczona korekta będzie <1 i w rezultacie zostanie potraktowana jako 0.

    W rezultacie będziemy mieć stabilne obroty ale odrobinę niższe / wyższe niż zadane. Człon "I" to skoryguje po czasie. Człon "I" powstaje z sumy kolejnych błędów, i w końcu będzie na tyle duży aby skorygować nastawę.

    Z tego co pamiętam jak stroiłem kiedyś robot kuchenny to powinieneś użyć tylko P i tak go nastroić aby korekcja zawsze była za duża aby uzyskać regularne oscylacje obrotów. Potem dokładać D i stroić wg swoich wymagań.
    Na koniec dołożyć można I dla kosmetyki.

    Trochę informacji w załączonych plikach.
    Obejrzyj funkcję vStabiliseSpeed() w pliku
    Link
  • REKLAMA
  • #6 14321285
    _Robak_
    Poziom 33  
    Dodać należy że wzór pokazany przez kolegę prociomen007 jest to metoda Zieglera-Nicholsa i tyczy się układów liniowych tylko. Odnośnie samego strojenia, logika nakazuje sądzić że w przypadku latacza lepiej już wybrać PD niż PI:) Czymkolwiek nie jest w teorii człon całkujący, potrzebuje on czasu na reakcję a nie o to chodzi w powietrzu. Jeśli już dobierzesz parametry musisz się upewnić że układ dochodzi do wartości zadanej bez przeregulowania.
    wydaje mi się że dla małych odchyleń od poziomu PID da radę ale już w przypadku gdy układ nie będzie stabilny regulator nie da sobie rady.
  • REKLAMA
  • #7 14321297
    prociomen007
    Poziom 18  
    Czyli jeśli dobrze rozumiem powinienem zrobić tak:

    Ki , kd = 0;
    Kp zaczynam od 0 i lecę w górę aż pojawią się regularne oscylacje.

    Potem zaczynam zwiększać kd aż oscylacje ustąpią i będzie że tak powiem elegancko. Na koniec mogę dorzucić trochę ki...

    ??
  • #9 14321328
    prociomen007
    Poziom 18  
    Tylko czy wartości obliczone według tego:

    ATMEGA128 - Strojenie regulatora PID dla quadrocoptera, problem z parametrem I

    Mogę traktować już jako parametry Kp,Ki,Kd? Bo w tabelce zatytułowane są K,Ti,Td
  • #11 14321847
    prociomen007
    Poziom 18  
    Nie jestem do końca przekonany czy rzeczywiście warto stosować parametr D. Według wielu informacji znalezionych w internecie rzeczywiście pomaga on zmniejszyć drgania powstałe po nagłym skoku ale jednocześnie powoduje że quadro jest 'ślimazarne' wolniej reaguje na sterowanie ( gdzieś tam przyrównano ten parametr do sprężyny ) . Wiele osób zaleca odpuszczenie sobie tego czynnika. Jeśli chodzi o dobór P i I znalazłem ciekawe video





    Wynika z niego że całość należy uruchomić w trybie 'arcade' ( czyli bez stabilizacji kątów pitch i roll a tylko prędkości obrotowe ) najpierw ustalamy p tak aby nie było oscylacji a zarazem platforma reagowała żwawo na sterowanie i stawiała opór przy próbie destabilizacji ( ręcznej ) . Kiedy znajdziemy takowy punkt pod wpływem grawitacji quadro powinien wolno dryfować do położenia 0. Wtedy dorzucamy mu parametru I aż ten ruch ustanie i nie pojawią się niepotrzebne oscylacjie.
REKLAMA