PID do sterowania silnikami

  • Rejestracja: dni
  • Ostatnio: dni
0

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:
user image

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.

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
0

To jest działka dla @Marooned, bo w twojej wypowiedzi jest za dużo skrótów myślowych zrozumiałych jedynie dla kogoś kto się bawił quadcopterami.

Marooned
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
1

Możesz zapoznać się z pracą Leonarda Halla dla ArduCoptera:
http://www.diydrones.com/photo/photo/listForContributor?screenName=233xj0z3lh0kz
Rozrysował całkiem dobrze (ogólna opinia developerów AC) PID dla różnych trybów.
Te algorytmy są dość zaawansowane, korzystają z 2 regulatorów PID - wewnętrzny i zewnętrzny.

Możesz także podejrzeć otwarty kod ArduPilota, plik dotyczący PID:
https://github.com/diydrones/ardupilot/blob/master/libraries/PID/PID.cpp
2 sekcje:

  1. Compute derivative component if time has elapsed
  2. Compute integral component if time has elapsed
Endrju
  • Rejestracja: dni
  • Ostatnio: dni
0

Polecam w Google wpisać "murray astrom pid" - można znaleźć pdf z ich książki dotyczący regulatora PID oraz realizacji cyfrowej. Rozdział zawiera nie tylko podstawową realizację, ale też bardziej zaawansowaną z różnymi przydatnymi rzeczami: anti-windup, setpoint weighting i inne.

Zastanawiam się, czy do minimalizacji odchylenia pozycji nie przydałby się jakiś bardziej zaawansowany regulator: np. minimalnowariancyjny. Chociaż to pewnie armata na muchę.

Marooned
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.