Skocz do zawartości

PID i sterowanie silnikami quadcoptera


Pomocna odpowiedź

Napisano

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

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.

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.

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.

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.

  • 10 miesiące później...

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.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...