Różnice między wybraną wersją a wersją aktualną.
Poprzednia rewizja po obu stronachPoprzednia wersjaNowa wersja | Poprzednia wersja | ||
projekty:symulacjarakiety [2025/05/08 00:22] – administrator | projekty:symulacjarakiety [2025/05/16 17:30] (aktualna) – administrator | ||
---|---|---|---|
Linia 1: | Linia 1: | ||
- | ======= | + | ~~NOTOC~~ |
+ | |||
+ | ======= | ||
+ | |||
+ | {{: | ||
pliki: | pliki: | ||
Linia 5: | Linia 10: | ||
* {{ : | * {{ : | ||
- | # Opis działania | + | Fajny symulator do nauki zasad działania |
+ | |||
+ | 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. | ||
- | Ten dokument opisuje fragment kodu sterującego dla pojazdu (np. drona lub rakiety) z wykorzystaniem regulatorów PID w dwóch osiach: pionowej (Y) oraz kąta nachylenia (Angle). | + | angle_err – skalowany błąd kąta do wizualizacji. |
- | ## Parametry PID dla osi Y | + | i_a – całka błędu kąta (tu zaledwie a/10, nie sumująca). |
- | Kod definiuje następujące zmienne sterujące ruchem w osi pionowej: | + | Obliczenie wyjścia regulatora kąta: |
+ | ;t1.angle = P · a – D · obrót + I · i_a | ||
- | - **desired_y** | + | t1_angle |
- | < | + | |
- | - **error_y** – błąd położenia: | + | |
- | < | + | |
- | - Współczynniki regulatora PID: | + | |
- | **Proporcjonalny**: | + | |
- | **Różniczkujący**: | + | |
- | **Całkujący**: | + | |
- | - **i_y** – wartość całki błędu (integrator) | + | |
- | ## Sterowanie siłą ciągu | + | ===== Wizualizacja i wykresy ===== |
+ | < | ||
- | Siła ciągu obliczana jest jako: | + | Funkcja |
- | < | + | |
- | kp_y * error_y | + | |
- | – kd_y * p1.dy | + | |
- | + ki_y * i_y | + | |
- | ); | + | |
- | thrust = t1.thrust / 100000;</ | + | |
- | - < | + | Kilka wywołań |
- | - Wynik dzielony jest przez 100 000, aby uzyskać wartość w [N]. | + | |
- | ## Regulacja kąta nachylenia | + | wartość siły ciągu (t1.thrust), |
- | Sterowanie | + | aktualny |
- | - **a** – żądany kąt: | + | błąd kąta (a), |
- | < | + | |
- | - (pi/180) * b1.heading | + | |
- | + 10 * (key2(" | + | |
- | - Współczynniki PID: | + | |
- | **Proporcjonalny**: | + | |
- | **Różniczkujący**: | + | |
- | **Całkujący**: | + | |
- | - **angle_err** – przeskalowany | + | |
- | < | + | |
- | - **i_a** – integrator kąta: | + | |
- | < | + | |
- | - Obliczenie sygnału sterującego kątem: | + | |
- | < | + | |
- | - kd_a * b1.spin | + | |
- | + ki_a * i_a; | + | |
- | t1_angle = 50 * t1.angle;</ | + | |
- | ## Część wizualizacyjna | + | wartość całki błędu osi y (i_y). |
- | W bloku graficznym rysowane są: | + | < |
- | - Pozioma linia w pozycji **desired_y**: | + | s_y – sygnał |
- | < | + | |
- | p1.x+1000, | + | |
- | blue, | + | |
- | - Dynamiczne teksty: | + | |
- | < | + | |
- | text(# | + | |
- | text(# | + | |
- | text(# | + | |
- | - Wykresy | + | |
- | < | + | |
- | ## Podsumowanie | + | thrust – siła ciągu, |
- | - Sterowanie położeniem w osi Y realizowane jest przez regulator PID (P, I, D). | + | angle_err – błąd kąta (skala), |
- | - Sterowanie | + | |
- | - Blok wizualizacyjny umożliwia monitorowanie kluczowych parametrów w czasie rzeczywistym. | + | |
+ | t1_angle – sygnał wyjściowy regulatora kąta. | ||
- | {{: | + | ===== Pełen kod sterowania ===== |
Kod: | Kod: |