Różnice między wybraną wersją a wersją aktualną.
Poprzednia rewizja po obu stronachPoprzednia wersjaNowa wersja | Poprzednia wersja | ||
projekty:symulacjarakiety [2025/05/08 00:17] – administrator | projekty:symulacjarakiety [2025/05/16 17:30] (aktualna) – administrator | ||
---|---|---|---|
Linia 1: | Linia 1: | ||
- | ======= | + | ~~NOTOC~~ |
+ | |||
+ | ======= | ||
+ | |||
+ | {{: | ||
pliki: | pliki: | ||
Linia 5: | Linia 10: | ||
* {{ : | * {{ : | ||
- | ====== | + | Fajny symulator do nauki zasad działania kontrolera PID: https:// |
+ | |||
+ | Autor programu SimStructure: | ||
+ | |||
+ | Źródło: | ||
+ | |||
+ | {{youtube> | ||
+ | |||
+ | ===== Założenie | ||
+ | |||
+ | Symulacja ma pokazać zastosowanie kontrolera PID w rakiecie która ma mieć kompensację zmian przyspieszenia oraz ustawienia kątowego. Symulacja jest wykonana w dwóch wymiarach i obliczenia są wykonywane w dwóch wymiarach. | ||
+ | |||
+ | ===== Deklaracja zmiennych ===== | ||
+ | < | ||
+ | |||
+ | desired_y – zadana wartość wysokości (initialnie 10). | ||
+ | |||
+ | error_y – różnica między wartością zadaną a aktualną. | ||
+ | |||
+ | kp_y, kd_y, ki_y – współczynniki regulatora PID dla osi y (proporcjonalny, | ||
+ | |||
+ | s_y, thrust, t1_angle – sygnały służące do dalszego przetwarzania i wizualizacji. | ||
+ | |||
+ | i_y – wewnętrzny akumulator (całkujący) regulatora. | ||
+ | |||
+ | ===== Regulator PID dla osi _Y ===== | ||
+ | < | ||
+ | |||
+ | Linia < | ||
+ | |||
+ | Obliczenie błędu: | ||
+ | ;error_y: Różnica między wysokością zadaną a bieżącą (p1.y). | ||
+ | |||
+ | Całkowanie błędu: | ||
+ | ;i_y: Proste całkowanie przez przypisanie błędu (może być rozszerzone o sumowanie w pętli). | ||
+ | |||
+ | Wyjście regulatora: | ||
+ | ;t1.thrust = faktor_saturacji × (P · error – D · prędkość + I · całka). | ||
+ | |||
+ | Skalowanie sygnału siły ciągu (thrust) dzieleniem przez 100 000, by uzyskać odpowiednie jednostki/ | ||
+ | |||
+ | ===== Regulator PID dla kąta ===== | ||
+ | < | ||
+ | |||
+ | t1.angle = kp_a * a | ||
+ | - kd_a * b1.spin | ||
+ | + ki_a * i_a; | ||
+ | t1_angle = 50 * t1.angle; | ||
+ | </ | ||
+ | |||
+ | a – błąd kąta: różnica między kątem referencyjnym (pi) a aktualnym (b1.heading w radianach), plus korekta z klawiatury (przyciski " | ||
+ | |||
+ | kp_a, kd_a, ki_a – współczynniki PID dla kąta. | ||
+ | |||
+ | angle_err – skalowany błąd kąta do wizualizacji. | ||
+ | |||
+ | i_a – całka błędu kąta (tu zaledwie a/10, nie sumująca). | ||
+ | |||
+ | Obliczenie wyjścia regulatora kąta: | ||
+ | ;t1.angle = P · a – D · obrót + I · i_a | ||
+ | |||
+ | t1_angle – dodatkowe skalowanie sygnału kąta. | ||
+ | |||
+ | ===== Wizualizacja i wykresy ===== | ||
+ | < | ||
+ | |||
+ | Funkcja < | ||
+ | |||
+ | Kilka wywołań < | ||
+ | |||
+ | wartość siły ciągu (t1.thrust), | ||
+ | |||
+ | aktualny kąt (b1.heading), | ||
+ | |||
+ | błąd kąta (a), | ||
- | Ten dokument opisuje działanie fragmentu kodu sterującego dla rakiety z wykorzystaniem regulatorów PID w dwóch osiach: pionowej (Y) oraz kąta nachylenia | + | wartość całki błędu osi y (i_y). |
- | ===== Parametry PID dla osi Y ===== | + | < |
- | Kod definiuje następujące zmienne sterujące ruchem w osi pionowej: | + | |
- | * **desired_y** – zadana pozycja w osi Y. Na początku ustawiona na 10, ale potem dynamicznie zmieniana: | + | |
- | * '' | + | |
- | * **error_y** – błąd położenia: | + | |
- | * **kp_y, kd_y, ki_y** – współczynniki regulatora PID: | + | |
- | kp_y = 1 (proporcjonalny) | + | |
- | kd_y = 1 (różniczkujący) | + | |
- | ki_y = 0.3 (całkujący) | + | |
- | * **i_y** – całka błędu (integrator) używana w członie całkującym | + | |
- | ===== Sterowanie siłą ciągu (thrust) ===== | + | s_y – sygnał błędu |
- | Wyznaczana jest siła ciągu na podstawie | + | |
- | < | + | |
- | Następnie przeliczana jest wartość | + | thrust – siła ciągu, |
- | < | + | |
- | ===== Regulacja kąta nachylenia ===== | + | angle_err – błąd kąta (skala), |
- | Sterowanie kątem odbywa się przy użyciu osobnego zestawu PID: | + | |
- | * **a** – żądany kąt: | + | |
- | '' | + | |
- | Żądany kąt jest zależny od kierunku (heading) oraz naciśnięcia klawiszy. | + | |
- | * **kp_a, kd_a, ki_a** – współczynniki PID dla kąta | + | |
- | * **angle_err** – przeskalowany | + | |
- | '' | + | |
- | * **i_a** – całka z kąta: '' | + | |
- | * **t1.angle** – wynik działania regulatora: | + | |
- | '' | + | |
- | * **t1_angle** – przeskalowany sygnał sterujący kątem do wizualizacji: | + | |
- | '' | + | |
- | ===== Część wizualizacyjna ===== | + | t1_angle – sygnał wyjściowy regulatora |
- | Na końcu kodu znajduje się blok graficzny służący do wyświetlania wyników: | + | |
- | * Rysowanie linii poziomej w pozycji desired_y (linia niebieska) | + | |
- | * Wyświetlanie tekstów: | + | |
- | * Aktualna siła ciągu | + | |
- | * Kierunek (heading) | + | |
- | * Żądany kąt | + | |
- | * Wartość całki z błędu w osi Y | + | |
- | * Wykresy (plot) dla: | + | |
- | * s_y – błąd w osi Y | + | |
- | * thrust – siła ciągu | + | |
- | * angle_err – błąd | + | |
- | * t1_angle – sterowanie kątem | + | |
- | ===== Podsumowanie ===== | ||
- | Kod ten realizuje dwuwymiarowe sterowanie pojazdem: | ||
- | * Stabilizacja położenia w osi Y z wykorzystaniem PID | ||
- | * Sterowanie kątem nachylenia w celu orientacji | ||
- | * Wizualizacja parametrów dla celów debugowania lub analizy | ||
- | {{: | + | ===== Pełen kod sterowania ===== |
Kod: | Kod: |