Skocz do zawartości

PID i sterowanie silnikami quadcoptera


eiliat

Pomocna odpowiedź

Witam,

Chcę napisać algorytm do sterowania silnikami opartymi o człon PID aby wyeliminować kołysanie mojego quadcoptera. Nie jestem jeszcze na studiach więc nie miałem pochodnych i całek potrzebnych do członów D i I. Przeszukałem trochę sieć więc znalazłem taki kod:

pidalgorithm.png

I mam kilka pytań:

1. Dla każdego silnika wyliczam tym algorytmem osobno, tak?

2. Do całkowania potrzebuje zrobić tablicę dla każdego silnika, przechowywać w niej np. wartości z ostatnich 2 sekund?

3. Czy do takiego równania mogę brać wartości ujemne (chodzi mi o I i D).

Prosiłbym o wskazówki, szczególnie do tych członów I i D. Osobiście trochę zapoznałem się całkami i pochodnymi, jednak bez praktycznych ćwiczeń nie wiem jak to rozgryźć.

Z góry dziękuje.

__________

Komentarz dodany przez: Sabre

Link do komentarza
Share on other sites

1. Nie do końca, bardziej określasz wartość o którą będziesz modyfikował moce silników wględem obrotów o poszczególne osie. Przy zachowaniu tego samego ciągu (o ile nie ma się wznosić ani opadać). Oddzielne wartości będzie również otrzymywał ze stabilizacji poziomu oraz modyfikował wszystko sterowaniem ruchem.

2. Nie, wystarczy Ci wiedza o aktualnej wartości całki/pochodnej oraz o uchybie. Przy pochodnej możesz ewentualnie zrobić fitr odrzucający "szpilki".

3. Oczywiście. Dodatkowo będzie raczej potrzebował jeszcze dodać nasycanie się poszczególnych bloków.

Link do komentarza
Share on other sites

2. Dodam tylko, że skoro nie miałeś całek/pochodnych: całka błędu to sumaryczny błąd z kolejnych kroków, więc w każdym kroku programu dodajesz aktualną wartość błędu (uchybu) to zmiennej w której to liczysz. Pochodna to przyrost, czyli wartość aktualna minus wartość z poprzedniego kroku.

3. Wartości Kp, Kd i Ki zawsze są dodatnie, wynik zależy od znaku błędu/pochodnej/całki błędu. Jeżeli chodzi Ci o wyliczanie całki/pochodnej znak błędu (+/-) jak najbardziej ma znaczenie.

I na koniec:

1. To nie jest prosta odpowiedź, PID służy do regulacji jakiejś wartości poprzez minimalizowanie błędu który definiujesz jako różnicę pomiędzy wartością pożądaną/zadaną a mierzoną/aktualna (jak np. obroty silnika mają wynosić 100RPM, a mierzysz 80RPM to twój błąd jest równy 20). Także co to będzie za błąd i jaką wartość będziesz PIDem regulował - zależy od Ciebie i głównego algorytmy sterowania quadcopterem.

Link do komentarza
Share on other sites

Dziękuje bardzo.

Czyli rozumiem, że wyliczam z PID jakąś wartość dla silnika i ją jeszcze raz poddaje proporcjonalności? Czy to już będę miał zawarte z out tego algorytmu?

No bo z założenia dążymy, żeby kąty miały wartość 0, mój quad jest w konfiguracji X więc aby wyrównać np. jeden kąt muszę użyć dwóch silników.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Ciebie jako pilota interesuje pochylanie przód-tył, prawo-lweo i obracanie w osi pionowej.

Regulator pochylania "nosa" będzie więc oddawał wielkość błędu pochylenia przód-tył. Ta wielkość będzie żądaną różnicą prędkości dla 4 silników: 2 przednich (traktowanych jak jeden) i 2 tylnych (to samo). Z kolei regulator przechylenia "lewo-prawo" będzie oddawał wielkość sterującą dla 2 silników lewych (razem) i 2 silników prawych (też traktowanych jak jeden). To samo dla obracania wzdłuż osi pionowej - 2 silniki szybciej i 2 silniki wolniej, tylko po skosie.

Jeżeli teraz zsumujesz wszystkie trzy poprawki z odpowiednimi znakami - dla każdego silnika innymi i do tego dodasz globalną prędkość odpowiedzialną za wysokość (collected pitch) to dostaniesz wysterowanie każdego z 4 silników.

EDIT: Jasne, między wyjściem z regulatora PID a sterowaniem silnika powinny być jakieś stałe proporcjonalności, bo przecież fizycznie są to zupełnie inne jednostki. Co więcej, biorąc pod uwagę charakterystyki (raczej nieznane) samych driverów oraz zespołu śmigło-silnik, to być może wcale nie będą to proste stałe a np. jakiś wielomian. Moim zdaniem to przesada i takie nieliniowości będzie pokrywał regulator, ale warto zdawać sobie z tego sprawę, że wejście do układów sterowania silnikami 3F wcale nie jest liniowe a co więcej (hm, znowu) dochodzi jeszcze skomplikowana dynamika napędu śmigłowego.

Link do komentarza
Share on other sites

This amount will be required except for 4-speed engines: 2 front (treated as one) and 2 rear (same). In turn, the controller tilt "left-right" will be indulged volume control for two engines left (total) and 2 engines right (also treated as one). The same is true for rotation along the vertical axis - 2 motors faster, and 2 motors slowly, only diagonally.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.