Różnice między wybraną wersją a wersją aktualną.
Poprzednia rewizja po obu stronachPoprzednia wersjaNowa wersja | Poprzednia wersja | ||
projekty:symulacjarakiety [2025/05/08 00:18] – 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), | ||
- | Ten dokument opisuje działanie fragmentu kodu sterującego dla pojazdu (np. drona lub rakiety) z wykorzystaniem regulatorów PID w dwóch osiach: pionowej (Y) oraz kąta nachylenia | + | błąd kąta (a), |
- | ===== Parametry PID dla osi Y ===== | + | wartość |
- | Kod definiuje następujące zmienne sterujące ruchem w osi pionowej: | + | |
- | * '' | + | |
- | '' | + | |
- | * '' | + | |
- | * '' | + | |
- | * '' | + | |
- | * '' | + | |
- | * '' | + | |
- | * '' | + | |
- | ===== Sterowanie siłą ciągu | + | < |
- | Wyznaczana jest siła ciągu na podstawie błędu: | + | |
- | '' | + | |
- | Następnie przeliczana jest wartość siły ciągu do jednostek siły w Newtonach: | + | s_y – sygnał błędu wysokości, |
- | '' | + | |
- | ===== Regulacja kąta nachylenia ===== | + | thrust – siła ciągu, |
- | Sterowanie kątem odbywa | + | |
- | * '' | + | |
- | '' | + | |
- | Żądany kąt jest zależny od kierunku (heading) oraz naciśnięcia klawiszy. | + | |
- | * '' | + | |
- | * '' | + | |
- | '' | + | |
- | * '' | + | |
- | * '' | + | |
- | '' | + | |
- | * '' | + | |
- | '' | + | |
- | ===== Część wizualizacyjna ===== | + | angle_err – błąd kąta (skala), |
- | Na końcu kodu znajduje się blok graficzny służący do wyświetlania wyników: | + | |
- | * Rysowanie linii poziomej w pozycji '' | + | |
- | * Wyświetlanie tekstów: | + | |
- | * Aktualna siła ciągu | + | |
- | * Kierunek (heading) | + | |
- | * Żądany kąt | + | |
- | * Wartość całki z błędu w osi Y | + | |
- | * Wykresy ('' | + | |
- | * '' | + | |
- | * '' | + | |
- | * '' | + | |
- | * '' | + | |
- | ===== Podsumowanie ===== | + | t1_angle – sygnał wyjściowy regulatora |
- | Kod ten realizuje dwuwymiarowe sterowanie pojazdem: | + | |
- | * Stabilizacja położenia w osi Y z wykorzystaniem PID | + | |
- | * Sterowanie | + | |
- | * Wizualizacja parametrów dla celów debugowania lub analizy | + | |
- | {{: | + | ===== Pełen kod sterowania ===== |
Kod: | Kod: |