PID do sterowania silnikami

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.

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.

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
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ę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1