eiliat Napisano Grudzień 4, 2013 Udostępnij Napisano Grudzień 4, 2013 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: 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
OldSkull Grudzień 4, 2013 Udostępnij Grudzień 4, 2013 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.
prokto Grudzień 4, 2013 Udostępnij Grudzień 4, 2013 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.
eiliat Grudzień 4, 2013 Autor tematu Udostępnij Grudzień 4, 2013 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.
marek1707 Grudzień 4, 2013 Udostępnij Grudzień 4, 2013 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.
Marooned Grudzień 5, 2013 Udostępnij Grudzień 5, 2013 Widzę, że sprawa pilna http://forum.4programmers.net/Algorytmy/225927-pid_do_sterowania_silnikami http://www.elektroda.pl/rtvforum/topic2703423.html
jony33 Październik 14, 2014 Udostępnij Październik 14, 2014 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.
Pomocna odpowiedź
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ę »