Regulator położenia i orientacji nie steruje bezpośrednio numerami silników. Wyznacza żądany ciąg i momenty wokół osi, a warstwa alokacji przelicza je na polecenia dla silników, serw, powierzchni aerodynamicznych lub mechanizmów przechylania napędu. W prostym quadrocopterze tę operację często nazywa się mikserem. W platformie z nadmiarowymi aktuatorami, ograniczeniami i zmienną geometrią jest to pełny problem alokacji sterowania.

Spis treści#

Mikser a alokator#

Klasyczny mikser jest stałym zestawem współczynników. Dla każdej osi zapisuje, jak silnik ma zwiększyć lub zmniejszyć udział. Jest szybki, przewidywalny i wystarcza, gdy geometria jest stała, wszystkie aktuatory są sprawne, a jedynym ograniczeniem jest wspólny zakres wyjścia.

Alokator rozwiązuje szerszy problem. Może uwzględnić:

  • więcej aktuatorów niż sterowanych stopni swobody;
  • różne minima, maksima i prędkości zmian;
  • utratę jednego napędu;
  • zależność efektywności steru od prędkości powietrza;
  • przechylane gondole i powierzchnie działające w kilku osiach;
  • priorytety, gdy całego żądania nie da się zrealizować;
  • informację zwrotną o tym, jaki moment faktycznie przydzielono.

W dokumentacji i kodzie nazw tych używa się czasem zamiennie. Ważniejszy od nazwy jest kontrakt: co jest wejściem, jakie ograniczenia są modelowane i czy regulator otrzymuje informację o saturacji.

Wektor żądany i wektor aktuatorów#

Dla pełnych sześciu stopni swobody można zdefiniować wektor:

v = [Mx, My, Mz, Fx, Fy, Fz]^T

M oznacza moment, F siłę, a indeks wskazuje oś układu związanego z kadłubem. W multirotorze typowo aktywnie steruje się trzema momentami oraz ciągiem wzdłuż osi wirników. Wtedy praktyczny wektor ma cztery elementy, na przykład:

v4 = [Mx, My, Mz, T]^T

Wektor aktuatorów:

u = [u1, u2, ..., un]^T

zawiera żądania fizyczne lub znormalizowane. Element może oznaczać ciąg wirnika w niutonach, kwadrat prędkości kątowej, wychylenie serwa w radianach albo bezwymiarową wartość [-1, 1]. Nie należy mieszać tych znaczeń w jednym interfejsie bez jawnych przeliczeń.

Najbardziej użyteczny podział odpowiedzialności wygląda tak:

  1. regulator tworzy żądanie siły i momentu w ustalonych jednostkach;
  2. alokator oblicza fizyczne żądania aktuatorów;
  3. model aktuatora odwraca charakterystykę ciąg–sygnał;
  4. sterownik wyjścia koduje PWM, DShot, CAN lub inny protokół.

Dzięki temu współczynnik kalibracyjny ESC nie przedostaje się do regulatora orientacji, a zmiana protokołu wyjściowego nie wymaga przebudowy geometrii.

Macierz efektywności#

W liniowym przybliżeniu zależność zapisuje się:

v = B u

Macierz B ma po jednym wierszu na sterowany stopień swobody i po jednej kolumnie na aktuator. Kolumna opisuje, jak jednostkowe użycie danego aktuatora wpływa na wszystkie sterowane osie. Dla czterech osi i sześciu wirników B ma wymiar 4 × 6.

Macierz nie jest jedynie tabelą znaków. Jeżeli pracuje w jednostkach fizycznych, zawiera ramiona sił, kierunki wektorów ciągu i współczynniki momentu reakcyjnego. Pozwala porównać rozwiązanie z modelem mechanicznym oraz sensownie ocenić zapas sterowania po awarii.

Współczynniki znormalizowane są wygodne w prostym firmware, lecz maskują różnicę między krótkim i długim ramieniem, różnymi śmigłami lub silnikami. Dopuszczalne jest ich użycie, jeśli proces generowania i normalizacji jest udokumentowany, a testy odnoszą wynik do modelu fizycznego.

Wyznaczanie kolumny wirnika#

Dla wirnika i potrzebne są co najmniej:

  • położenie środka ciągu r_i względem środka masy;
  • jednostkowy kierunek ciągu d_i w układzie kadłuba;
  • znak kierunku obrotu;
  • współczynnik momentu reakcyjnego względem ciągu;
  • dozwolony zakres ciągu.

Jeśli aktuator wytwarza siłę F_i = d_i T_i, moment od ramienia wynosi:

M_arm,i = r_i × F_i

Moment aerodynamiczny wokół osi wirnika można w prostym modelu zapisać:

M_reaction,i = s_i k_m d_i T_i

gdzie s_i przyjmuje znak zależny od kierunku obrotu, a k_m jest stosunkiem momentu reakcyjnego do ciągu dla danego zestawu silnik–śmigło. Kolumna pełnej macierzy ma zatem postać:

b_i = [M_arm,i + M_reaction,i ; F_i] / T_i

To równanie ujawnia częsty błąd: yaw nie wynika z ramienia wirnika w typowym multirotorze o równoległych osiach, lecz głównie z reakcji na moment napędowy. Znak momentu działającego na kadłub jest przeciwny do momentu przyspieszającego śmigło; łatwo pomylić go z graficzną strzałką obrotu.

Wartość k_m zależy od punktu pracy. Stała jest użytecznym przybliżeniem dla alokatora, ale nie daje jednakowej siły yaw w całym zakresie obrotów. Dokładniejszy model można identyfikować na stanowisku pomiarowym.

Układy współrzędnych i znaki#

Najgroźniejsze błędy miksera są błędami konwencji. Należy jawnie zapisać:

  • czy kadłub używa FRD (x przód, y prawo, z dół) czy FLU (x przód, y lewo, z góra);
  • czy dodatni ciąg jest zgodny z dodatnią osią z, czy przeciwny;
  • czy momenty stosują regułę prawej dłoni;
  • z której strony patrzy się przy oznaczaniu CW/CCW;
  • czy indeks silnika jest indeksem płytki, wyjścia czy geometrii;
  • czy wejściem aktuatora jest ciąg, prędkość, jej kwadrat czy sygnał znormalizowany.

Konwencji nie należy odgadywać z rysunku. W repozytorium powinien istnieć jeden dokument oraz testy wykonywalne. Przykład asercji semantycznej jest cenniejszy niż tabela bez opisu:

positive roll command -> dodatni moment Mx w konwencji FRD
positive thrust command -> siła przeciwnie do +z kadłuba

Wizualny test geometrii powinien wyświetlać numery silników, ich współrzędne, kierunki osi ciągu i obrotu. Jest to szczególnie ważne, gdy nazwa „Quad X” ma różne numeracje w dwóch ekosystemach.

Przykład quadrocoptera X#

Dla symetrycznej ramy X, jednakowych ramion i równoległych wirników można zbudować tabelę wpływów. Poniższy przykład celowo nie narzuca numerów portów ani CW/CCW; są to parametry konfiguracji:

Położenie wirnika Roll Pitch Yaw Thrust
przód–lewo znak z r × F znak z r × F zależny od obrotu dodatni
przód–prawo przeciwny roll ten sam znak pitch przeciwny yaw dodatni
tył–prawo jak przód–prawo przeciwny pitch jak dobrany kierunek dodatni
tył–lewo jak przód–lewo przeciwny pitch przeciwny yaw dodatni

Zamiast ręcznie przepisywać znaki, bezpieczniej generować macierz z wektorów r_i, d_i i kierunku obrotu. Test geometryczny może potem sprawdzić:

  • suma momentów przy równym ciągu wynosi około zera;
  • suma sił ma oczekiwany kierunek;
  • czyste żądanie roll nie tworzy pitch w idealnie symetrycznej ramie;
  • czyste yaw zachowuje sumę ciągu, o ile istnieje zapas w obu parach;
  • zamiana dwóch kierunków obrotu jest wykrywana jako błędna konfiguracja.

Idealna macierz nie kompensuje przesuniętego środka masy. Stały moment wynikający z niedokładnego wyważenia zostanie skompensowany przez regulator, lecz zmniejsza zapas jednych silników. Lepszym rozwiązaniem jest korekta mechaniczna lub jawny model trimu.

Odwrócenie macierzy i pseudoodwrotność#

Jeżeli B jest kwadratowa i nieosobliwa, rozwiązanie bez ograniczeń wynosi:

u = B^-1 v

Nie jest to jednak typowy przypadek dla rozbudowanych UAV. Gdy aktuatorów jest więcej niż sterowanych osi, istnieje wiele rozwiązań. Pseudoodwrotność Moore’a–Penrose’a wybiera rozwiązanie o minimalnej normie:

u = B^+ v

Dla pełnego rzędu wierszowego i odpowiednich warunków:

B^+ = B^T (B B^T)^-1

Nie należy implementować wzoru przez jawne odwracanie macierzy bez analizy numerycznej. Rozkład QR lub SVD jest odporniejszy, szczególnie blisko utraty rzędu. W małym MCU geometria często jest stała, więc część obliczeń można wykonać przy konfiguracji, a w pętli stosować gotową macierz.

Pseudoodwrotność nie respektuje automatycznie minimów i maksimów. Wynik może być matematycznie poprawny, ale fizycznie niewykonalny. Dlatego jest punktem startowym, a nie kompletnym alokatorem.

Alokacja ważona#

Różne aktuatory mogą mieć różny koszt użycia. Minimalizowany funkcjonał może mieć postać:

J = ||Wv (B u - v_cmd)||² + λ ||Wu (u - u_trim)||²

Wv nadaje wagi błędom osi, Wu kosztom aktuatorów, u_trim opisuje preferowany punkt pracy, a λ reguluje kompromis. Przykłady:

  • w multirotorze roll i pitch mogą mieć wyższy priorytet niż yaw;
  • w hybrydzie serwa aerodynamiczne mogą być preferowane przy dużej prędkości, a różnicowanie ciągu przy małej;
  • dwa napędy o innej sprawności mogą dostać różny koszt energetyczny;
  • mechanizm o małym dopuszczalnym cyklu pracy może być używany dopiero po wyczerpaniu tańszych środków.

Wagi są częścią polityki bezpieczeństwa, nie tylko parametrami matematycznymi. Zbyt mała waga osi może sprawić, że alokator niemal zawsze ją poświęci. Zbyt duża może wywołać gwałtowne użycie pozostałych aktuatorów.

Ograniczenia aktuatorów#

Podstawowy zbiór ograniczeń to:

u_min <= u <= u_max

Dla silnika jednokierunkowego minimum w locie nie musi być równe zeru. Minimalne obroty zapewniają margines ponownego przyspieszenia i ograniczają ryzyko zatrzymania. Dla napędu rewersyjnego zakres może obejmować wartości ujemne, ale przejście przez zero ma inną dynamikę niż zwykła zmiana ciągu.

Ograniczenia mogą być asymetryczne i zależne od stanu:

  • napięcie baterii zmienia osiągalny maksymalny ciąg;
  • temperatura ogranicza długotrwałe obciążenie ESC;
  • serwo ma fizyczne końce i neutralny trim;
  • powierzchnia sterowa może mieć różne maksymalne wychylenia w obie strony;
  • tiltrotor ma zabroniony sektor ze względu na kolizję;
  • uszkodzony aktuator otrzymuje zakres [0, 0] albo zostaje usunięty z macierzy.

Samo przycięcie każdego elementu po obliczeniu pseudoodwrotności zmienia uzyskany wektor w niekontrolowany sposób. Należy obliczyć v_achieved = B u_clipped i co najmniej przekazać błąd wyżej. Lepszy alokator aktywnego zbioru ponownie rozwiązuje problem dla niezablokowanych aktuatorów.

Desaturacja i priorytety#

Saturacja występuje, gdy żądany wektor leży poza zbiorem osiągalnym. Przykład: wysoki wspólny ciąg wykorzystuje niemal całe maksimum wszystkich silników, a regulator jednocześnie żąda dużego roll. Nie można zwiększyć silników po jednej stronie bez zmniejszenia drugiej albo obniżenia ciągu wspólnego.

Sekwencyjna desaturacja rozstrzyga konflikt według jawnych priorytetów. Typowa polityka może:

  1. zachować roll i pitch potrzebne do utrzymania orientacji;
  2. ograniczyć yaw, który zwykle ma mniejszy zapas;
  3. przesunąć wspólny ciąg w dozwolonym zakresie;
  4. dopiero potem zmniejszyć amplitudę żądanych momentów.

Nie jest to reguła uniwersalna. Podczas końcowej fazy lądowania minimalny ciąg może być ważniejszy niż idealne śledzenie yaw; podczas lotu fixed-wing priorytety zależą od prędkości i zapasu przeciągnięcia. Politykę należy dokumentować per tryb.

Proste skalowanie wszystkich osi jednym współczynnikiem zachowuje kierunek wektora, lecz nie jego priorytety. Obcięcie pojedynczych silników jest jeszcze gorsze, bo wprowadza sprzężone błędy. Alokator powinien raportować:

  • które ograniczenia są aktywne;
  • jaka część żądania każdej osi pozostała niezrealizowana;
  • czy problem wynika z maksimum, minimum, szybkości czy utraty aktuatora;
  • jak długo trwa saturacja.

Anti-windup i sterowanie osiągnięte#

Integrator PID nie wie sam, że aktuatory nie zrealizowały momentu. Jeśli regulator nadal sumuje błąd, powstaje windup. Po zwolnieniu ograniczenia nagromadzony integrator może spowodować duże przeregulowanie.

Alokator powinien wyznaczyć:

v_achieved = B u_applied
v_unallocated = v_cmd - v_achieved

u_applied powinno uwzględniać ograniczenia, a najlepiej także znane ograniczenie szybkości. Informację v_unallocated można wykorzystać do back-calculation albo warunkowego zatrzymania integratora dla osi, której dalsza integracja pogłębia saturację.

Flaga „jakiś silnik ograniczony” jest zbyt mało precyzyjna. Saturacja maksimum przy dodatnim roll nie powinna blokować integratora, gdy korekta ujemna wyprowadza układ z ograniczenia. Potrzebny jest kierunek nieosiągalnego momentu.

Ranga i zapas sterowalności#

Ranga B określa liczbę niezależnych kombinacji sił i momentów, które można wytworzyć w modelu liniowym. Pełna liczba kolumn nie gwarantuje pełnej rangi: dwa aktuatory mogą mieć niemal identyczny wpływ.

Warto analizować:

  • rząd macierzy dla nominalnej geometrii;
  • rząd po wyłączeniu każdego pojedynczego aktuatora;
  • najmniejszą wartość osobliwą;
  • liczbę uwarunkowania;
  • osiągalny moment przy zadanym ciągu wspólnym;
  • zapas do minimów i maksimów w nominalnym zawisie.

Macierz o pełnym rzędzie, ale bardzo dużej liczbie uwarunkowania, jest praktycznie słaba. Mały błąd modelu lub pomiaru może wymagać dużych przeciwstawnych poleceń aktuatorów. Jest to sygnał problemu geometrii, nie powód do zwiększenia precyzji typów liczbowych.

Przy ograniczeniach osiągalny zbiór jest wielościanem w przestrzeni sterowania. Jedna liczba „maksymalny moment” nie opisuje go w pełni, ponieważ zapas roll zależy od aktualnego pitch, yaw i ciągu.

Awaria aktuatora#

Po potwierdzeniu awarii należy zaktualizować efektywność i ograniczenia. Możliwe strategie:

  • ustawić kolumnę uszkodzonego aktuatora na zero;
  • ograniczyć jego zakres do ostatniej wiarygodnej wartości, jeśli zaciął się mechanicznie;
  • przełączyć na wcześniej przygotowaną macierz awaryjną;
  • ponownie obliczyć pseudoodwrotność lub aktywny zbiór;
  • zmienić priorytety osi i tryb lotu.

„Awaria silnika” nie jest jednym stanem. Silnik może nie wytwarzać ciągu, wytwarzać niekontrolowany ciąg, mieć obniżoną efektywność albo błędną telemetrię. Założenie u=0 pasuje tylko do części przypadków.

Hexacopter po utracie jednego wirnika może zachować algebraiczną rangę dla czterech osi, ale nie musi mieć wystarczającego dodatniego ciągu ani marginesu yaw. O możliwości kontynuowania lotu decydują ograniczenia i masa, nie sama liczba silników.

Rekonfigurację należy przetestować dla każdej awarii osobno. Jeśli detektor nie rozróżnia uszkodzenia od chwilowego błędu RPM, agresywne wyzerowanie kolumny może samo wywołać utratę kontroli. Stosuje się progi, persistence, porównanie polecenia z RPM/prądem oraz stan potwierdzenia.

Nieliniowość napędu#

Dla ustalonego zestawu śmigła i przepływu ciąg często przybliża się jako proporcjonalny do kwadratu prędkości:

T ≈ k_T omega²

Sygnał ESC nie jest jednak bezpośrednio omega, a napięcie baterii, obciążenie aerodynamiczne i firmware regulatora zmieniają charakterystykę. Jeżeli alokator liniowo rozdziela żądany ciąg, warstwa aktuatora powinna użyć odwrotnej mapy signal = f^-1(T).

Mapa może pochodzić z pomiaru stanowiskowego. Powinna obejmować:

  • próg startu i stabilnego podtrzymania obrotów;
  • martwą strefę;
  • zależność od napięcia;
  • różnicę narastania i opadania, jeśli histereza jest istotna;
  • ograniczenie maksymalne termiczne i elektryczne;
  • zachowanie w strumieniu napływowym dla fixed-wing/VTOL.

Kompensacja napięcia nie może obiecywać ciągu, którego napęd fizycznie nie osiąga. Po dojściu do maksimum alokator nadal powinien otrzymać stan ograniczenia.

Dynamika i ograniczenie szybkości#

Równanie v=B u jest statyczne. Rzeczywisty silnik, serwo i mechanizm przechyłu mają opóźnienie, bezwładność oraz limit szybkości. Jeżeli jedno serwo porusza się dziesięć razy wolniej niż silnik, chwilowo uzyskany wektor różni się od obliczonego.

Można stosować:

  • ograniczenie du/dt w warstwie aktuatora;
  • predykcję osiągniętego położenia na następny krok;
  • różne pasma sterowania dla różnych środków;
  • alokację dynamiczną uwzględniającą stan aktuatora;
  • command shaping przed alokatorem.

Ogranicznik szybkości musi działać z rzeczywistym dt, ale powinien odrzucać nielogiczne skoki czasu. W systemie dyskretnym:

du_max = slew_rate * clamp(dt, dt_min, dt_max)
u_k = clamp(u_cmd, u_prev - du_max, u_prev + du_max)

Aktualny u_k, nie pierwotne u_cmd, służy do obliczenia sterowania osiągniętego. W przeciwnym razie anti-windup otrzyma fałszywie optymistyczną informację.

Fixed-wing, VTOL i zmienna geometria#

W samolocie efektywność lotek, steru wysokości i kierunku zależy od ciśnienia dynamicznego, kąta natarcia, opływu od śmigła i ewentualnego przeciągnięcia. Stała macierz jest przybliżeniem właściwym dla ograniczonej obwiedni.

Praktyczne podejścia obejmują:

  • gain scheduling względem skalowanej prędkości powietrza;
  • osobne macierze dla zawisu, przejścia i lotu poziomego;
  • płynną interpolację efektywności z ograniczonym zakresem parametru;
  • włączenie różnicowania ciągu przy małej prędkości;
  • wyłączenie nieskutecznych powierzchni zamiast wzmacniania szumu.

W VTOL przejście jest krytyczne, bo zmienia się zarówno kierunek sił, jak i zapas aktuatorów. Dla przechylanych wirników pozycja osi d_i zależy od zmierzonego kąta serwa. Macierz powinna korzystać z wiarygodnego położenia, nie wyłącznie z polecenia. Zacięcie mechanizmu powoduje wtedy zmianę wykrytej efektywności.

W elevonie pojedyncza powierzchnia wpływa jednocześnie na pitch i roll. Rozdzielenie żądań na dwa niezależne „miksery” może nasycić serwo po zsumowaniu. Alokacja powinna od początku widzieć wspólne ograniczenie wychylenia.

Skalowanie efektywności względem prędkości nie może rosnąć bez granic, gdy czujnik airspeed spada do zera lub jest niewiarygodny. Potrzebne są limity, walidacja pomiaru i tryb degradacji.

Implementacja czasu rzeczywistego#

Alokator jest częścią krytycznej ścieżki pętli sterowania. Implementacja powinna mieć ograniczony czas wykonania i nie alokować pamięci dynamicznie w cyklu. Zalecany przepływ:

snapshot geometrii i ograniczeń
-> walidacja żądania (finite, zakres)
-> rozwiązanie bez ograniczeń
-> obsługa aktywnych ograniczeń / desaturacja
-> obliczenie v_achieved i statusu
-> model aktuatorów
-> atomowa publikacja wyjść

Jeśli solver iteracyjny nie osiągnie kryterium w limicie iteracji, musi zwrócić przewidywalny wynik awaryjny, a nie ostatni niezweryfikowany wektor. Można zachować poprzednie bezpieczne rozwiązanie lub użyć prostszego miksera zapasowego, zależnie od analizy systemowej.

Zmiana geometrii w locie powinna być transakcyjna. Czytanie połowy starej i połowy nowej macierzy prowadzi do jednorazowego, lecz niebezpiecznego impulsu. Wzorzec double-buffer pozwala przygotować i zwalidować nową konfigurację, a następnie przełączyć wskaźnik na granicy cyklu.

Każdy element wejścia i macierzy należy sprawdzić pod kątem NaN i nieskończoności. Pojedynczy NaN w mnożeniu rozprzestrzeni się na wszystkie silniki. Polityka reakcji powinna być jawna: odrzucenie próbki, użycie ostatniego poprawnego żądania przez ograniczony czas albo wejście w stan failsafe.

Testy jednostkowe i symulacyjne#

Testy macierzy mogą być deterministyczne i bardzo dokładne. Minimalny zestaw obejmuje:

  1. hover — równe żądania dają zero momentu i właściwą sumę ciągu;
  2. basis vectors — osobno Mx, My, Mz, T; wynik po przemnożeniu przez B odtwarza żądanie w tolerancji;
  3. sign tests — każda dodatnia oś zwiększa i zmniejsza oczekiwane aktuatory;
  4. bounds — żaden wynik nie przekracza ograniczeń;
  5. achieved — raportowane v_achieved jest dokładnie równe B u_applied;
  6. failure — każda pojedyncza utrata aktuatora daje oczekiwany rząd i status;
  7. NaN — niefinitywne dane nie docierają do sterowników;
  8. determinism — ten sam snapshot daje bitowo lub numerycznie ten sam wynik.

Testy własnościowe mogą losować wykonalne u, obliczać v=B u, a następnie sprawdzać, czy alokator znajduje rozwiązanie odtwarzające v. Należy losować również punkty blisko ograniczeń oraz macierze prawie osobliwe.

Test skalowania jest ważny: dwukrotne ramię powinno dać dwukrotny moment od tej samej siły. Test zmiany układu współrzędnych powinien wykazać, że prawidłowo przetransformowane wejście i geometria prowadzą do fizycznie tego samego wyniku.

W SITL trzeba obserwować nie tylko stabilność trajektorii, ale również status saturacji, błędy osi i wykorzystanie aktuatorów. Scenariusze obejmują skok ciągu z roll, agresywny yaw, spadek napięcia, blokadę serwa, wyłączenie silnika oraz przejście VTOL przy granicznej prędkości.

Próby stanowiskowe#

Pierwsze testy wyjść wykonuje się bez śmigieł lub z napędem odłączonym mechanicznie. Celem jest weryfikacja mapowania, a nie wytwarzanie ciągu. Bezpieczna sekwencja:

  1. potwierdzić, że wszystkie wyjścia pozostają rozbrojone po restarcie;
  2. zidentyfikować każdy kanał pojedynczym, ograniczonym poleceniem serwisowym;
  3. porównać numer fizyczny z wizualizacją geometrii;
  4. sprawdzić kierunek obrotu niezależnie od numeracji;
  5. przechylić nieruchomy pojazd i obserwować, czy korekta ma znak przeciwny do zakłócenia;
  6. sprawdzić minimalne i maksymalne wartości bez osiągania niebezpiecznego napędu;
  7. zweryfikować telemetrię RPM i błąd aktuatora.

Próba z zamontowanymi śmigłami wymaga stanowiska zaprojektowanego do zatrzymania platformy, osłon, zdalnego odcięcia i procedury. Nie należy „trzymać drona ręką”, ponieważ regulator może gwałtownie zwiększyć wyjście, a orientacja ograniczonego kadłuba nie odpowiada swobodnemu lotowi.

Krzywa ciągu powinna być mierzona dla reprezentatywnego napięcia i śmigła. Dane z katalogu silnika nie zastępują pomiaru kompletnego zespołu napędowego.

Diagnostyka#

Blackbox powinien rejestrować co najmniej:

  • v_cmd przed alokacją;
  • u_raw, u_limited i ostateczne wyjścia;
  • v_achieved oraz v_unallocated;
  • maskę aktywnych minimów, maksimów i slew-rate;
  • wersję i identyfikator geometrii;
  • stan zdrowia aktuatorów;
  • czas wykonania i liczbę iteracji solvera;
  • prędkość powietrza lub kąt mechanizmu, jeśli zmieniają macierz.

Wykres samego sygnału silników nie wyjaśni, czy problem pochodzi z regulatora, alokatora czy charakterystyki napędu. Porównanie v_cmd z v_achieved rozdziela te warstwy.

Typowe symptomy:

Objaw Możliwa przyczyna alokacji
pojazd przewraca się natychmiast zły znak osi, numer silnika lub kierunek ciągu
poprawny hover, słaby yaw błędny k_m, kierunek obrotu lub stała saturacja
oscylacja tylko przy dużym gazie utrata marginesu i windup
skok w przejściu VTOL nieciągła zmiana macierzy lub położenie tilt z komendy zamiast pomiaru
duże przeciwstawne ruchy serw źle uwarunkowana macierz lub niewłaściwe wagi
niestabilność po awarii ranga zachowana algebraicznie, lecz brak fizycznego zapasu

Lista projektowa#

  • [ ] Zapisano układ osi, znaki momentów i definicję CW/CCW.
  • [ ] Macierz jest generowana z geometrii albo ma jednoznaczne pochodzenie.
  • [ ] Jednostki v i u są częścią interfejsu.
  • [ ] Ograniczenia minimum, maksimum i szybkości są modelowane przed wyjściem.
  • [ ] Po saturacji obliczane jest rzeczywiście osiągnięte sterowanie.
  • [ ] Regulator otrzymuje kierunkową informację anti-windup.
  • [ ] Ranga i uwarunkowanie są sprawdzane nominalnie i po awariach.
  • [ ] Rekonfiguracja geometrii jest atomowa.
  • [ ] Niefinitywne dane nie mogą dotrzeć do ESC ani serwa.
  • [ ] Solver ma limit czasu/iteracji i zdefiniowany fallback.
  • [ ] Log zawiera żądanie, wynik, ograniczenia i identyfikator macierzy.
  • [ ] Mapowanie kanałów sprawdzono bez śmigieł.
  • [ ] Scenariusze saturacji i awarii wykonano w SITL/HIL.

Powiązane tematy#

Przypisy#

  1. PX4 Autopilot, ControlAllocator.cpp — implementacja modułu alokacji sterowania, kod źródłowy i historia zmian, dostęp: 2026-08-15.
  2. PX4 Autopilot, Control allocation module configuration, definicje parametrów modułu, dostęp: 2026-08-15.
  3. NASA Technical Reports Server, Adaptive Control Allocation for Flight Control, raport techniczny dotyczący rekonfigurowalnej alokacji, dostęp: 2026-08-15.

Ostatnia aktualizacja: 2026-08-15. Ostatnia weryfikacja źródeł: 2026-08-15.

Źródła z centralnego rejestru

  1. PX4: ControlAllocator source [repozytorium open source]
  2. PX4: Control Allocation module configuration [repozytorium open source]
  3. NASA: Adaptive Control Allocation in the Presence of Actuator Failures [publikacja techniczna]
  4. PX4 Autopilot source repository [repozytorium open source]