Narzędzia użytkownika

Narzędzia witryny


projekty:symulacjarakiety

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Poprzednia rewizja po obu stronachPoprzednia wersja
Nowa wersja
Poprzednia wersja
projekty:symulacjarakiety [2025/05/08 00:25] administratorprojekty:symulacjarakiety [2025/05/16 17:30] (aktualna) administrator
Linia 1: Linia 1:
-======= Sumulacja Rakiety w programie SimStructure =======+~~NOTOC~~
  
-{{:projekty:rocket.gif?1000|}}+======= Symulacja: kontrolera PID w programie SimStructure ======= 
 + 
 +{{:projekty:rocket.gif|}}
  
 pliki: pliki:
Linia 8: Linia 10:
   * {{ :projekty:ardugeek_rocket1.zip |}}   * {{ :projekty:ardugeek_rocket1.zip |}}
  
-===== 1. Deklaracja zmiennych =====+Fajny symulator do nauki zasad działania kontrolera PID: https://tools.softinery.com/PIDSIM/ 
 + 
 +Autor programu SimStructure: [[https://en.wikipedia.org/wiki/Terry_A._Davis|Terry A. Davis]] 
 + 
 +Źródło: 
 + 
 +{{youtube>25hLohVZdME?}}\\ 
 + 
 +===== Założenie ===== 
 + 
 +Symulacja ma pokazać zastosowanie kontrolera PID w rakiecie która ma mieć kompensację zmian przyspieszenia oraz ustawienia kątowegoSymulacja jest wykonana w dwóch wymiarach i obliczenia są wykonywane w dwóch wymiarach.  
 + 
 +===== Deklaracja zmiennych =====
 <code> double desired_y = 10, error_y, kd_y = 1, kp_y = 1, ki_y = 0.3; signal s_y; signal thrust; signal t1_angle; integrator i_y; </code> <code> double desired_y = 10, error_y, kd_y = 1, kp_y = 1, ki_y = 0.3; signal s_y; signal thrust; signal t1_angle; integrator i_y; </code>
  
Linia 21: Linia 35:
 i_y – wewnętrzny akumulator (całkujący) regulatora. i_y – wewnętrzny akumulator (całkujący) regulatora.
  
-===== 2. Regulator PID dla osi _Y =====+===== Regulator PID dla osi _Y =====
 <code> desired_y = 15 + 5 * t; error_y = desired_y - p1.y; s_y = error_y; i_y = error_y; t1.thrust = t1.saturation * ( kp_y * error_y - kd_y * p1.dy + ki_y * i_y ); thrust = t1.thrust / 100000; </code> <code> desired_y = 15 + 5 * t; error_y = desired_y - p1.y; s_y = error_y; i_y = error_y; t1.thrust = t1.saturation * ( kp_y * error_y - kd_y * p1.dy + ki_y * i_y ); thrust = t1.thrust / 100000; </code>
  
Linia 37: Linia 51:
 Skalowanie sygnału siły ciągu (thrust) dzieleniem przez 100 000, by uzyskać odpowiednie jednostki/zakres. Skalowanie sygnału siły ciągu (thrust) dzieleniem przez 100 000, by uzyskać odpowiednie jednostki/zakres.
  
-===== 3. Regulator PID dla kąta =====+===== Regulator PID dla kąta =====
 <code> double a, kp_a = 1.0, kd_a = 0.01, ki_a = 0.001, a_err; []a = pi - pi/180 * b1.heading + 10 * ( key2("1") - key2("2") ); signal angle_err; angle_err = 50 * a; integrator i_a; i_a = a / 10; <code> double a, kp_a = 1.0, kd_a = 0.01, ki_a = 0.001, a_err; []a = pi - pi/180 * b1.heading + 10 * ( key2("1") - key2("2") ); signal angle_err; angle_err = 50 * a; integrator i_a; i_a = a / 10;
  
Linia 59: Linia 73:
 t1_angle – dodatkowe skalowanie sygnału kąta. t1_angle – dodatkowe skalowanie sygnału kąta.
  
-===== 4. Wizualizacja i wykresy =====+===== Wizualizacja i wykresy =====
 <code> @{ line(p1.x-1000, desired_y, p1.x+1000, desired_y, blue, #3); text(#10, #50, "Thrust: %12.6f N", t1.thrust); text(#10, #10, "Heading:%12.6f degree", b1.heading); text(#10, #30, "Angle: %12.6f rad", a); text(#10, #70, "Integrator: %12.6f", i_y); plot s_y, thrust, angle_err, t1_angle; } </code> <code> @{ line(p1.x-1000, desired_y, p1.x+1000, desired_y, blue, #3); text(#10, #50, "Thrust: %12.6f N", t1.thrust); text(#10, #10, "Heading:%12.6f degree", b1.heading); text(#10, #30, "Angle: %12.6f rad", a); text(#10, #70, "Integrator: %12.6f", i_y); plot s_y, thrust, angle_err, t1_angle; } </code>
  
Linia 85: Linia 99:
  
  
 +===== Pełen kod sterowania =====
  
 Kod: Kod:
projekty/symulacjarakiety.1746656711.txt.gz · ostatnio zmienione: przez administrator