در زیر یک مثال حل شده از کنترل غیرخطی با استفاده از متلب ارائه می‌دهم. این مثال مربوط به کنترل یک سیستم غیرخطی به نام "مدل پاندول معلق" (Inverted Pendulum) است. ابتدا توضیح کلی در مورد سیستم ارائه می‌شود و سپس کد متلب همراه با توضیحات خط به خط آورده می‌شود.

توضیح مسئله

مدل پاندول معلق نمونه‌ای از یک سیستم غیرخطی است که می‌خواهیم آن را با استفاده از کنترلر PID کنترل کنیم. هدف ما این است که پاندول را در حالت عمودی (۳۶۰ درجه) نگه داریم.

کد متلب

% تابع برای شبیه‌سازی پاندول معلق  
function inverted_pendulum_simulation()  

% پارامترهای سیستم  
;g = 9.81    % شتاب گرانش (m/s^2)  
;l = 1.0      % طول پاندول (متر)  
;m = 0.15     % جرم پاندول (کیلوگرم)  
;dt = 0.01    % گام زمانی (ثانیه)  
;t = 0:dt:10  % زمان شبیه‌سازی (0 تا 10 ثانیه)  

% حالت اولیه (زاویه و سرعت زاویه‌ای)  
;theta = pi/4  % زاویه اولیه (رادیان)  
;omega = 0     % سرعت زاویه‌ای اولیه (رادیان/ثانیه)  

% ذخیره مقادیر برای رسم  
;theta_vals = zeros(size(t))  

% حلقه شبیه‌سازی  
for i = 1:length(t)  
% ذخیره حالت فعلی  
;theta_vals(i) = theta  

% کنترلر PID  
;Kp = 100       % ضریب تناسبی  
;Kd = 20        % ضریب مشتقی  
;theta_ref = 0  % زاویه مرجع (حالت عمودی)  
;error = theta_ref - theta  % خطای زاویه  
;control = Kp * error - Kd * omega  % سیگنال کنترل  

% معادلات حرکت پاندول  
;alpha = (g/l) * sin(theta) + control  % شتاب زاویه‌ای  
;omega = omega + alpha * dt            % به‌روزرسانی سرعت زاویه‌ای  
;theta = theta + omega * dt            % به‌روزرسانی زاویه  
end  

% رسم نتایج  
;figure  
;plot(t, theta_vals * (180/pi))  % تبدیل رادیان به درجه  
;xlabel('زمان (ثانیه)')  
;ylabel('زاویه (درجه)')  
;title('شبیه‌سازی پاندول معلق با کنترل PID')  
;grid on  

end



توضیحات خط به خط کد

  1. تعریف تابع: function inverted_pendulum_simulation() - شروع تعریف تابع شبیه‌سازی پاندول معلق.
  2. پارامترهای سیستم:
    • g: شتاب گرانش (9.81 m/s²).
    • l: طول پاندول (1 متر).
    • m: جرم پاندول (0.15 کیلوگرم).
    • dt: گام زمانی شبیه‌سازی (0.01 ثانیه).
    • t: بازه زمانی شبیه‌سازی، از 0 تا 10 ثانیه با گام زمانی dt.
  3. حالت اولیه:
    • theta: زاویه اولیه پاندول (45 درجه یا π/4 رادیان).
    • omega: سرعت زاویه‌ای اولیه (0 رادیان/ثانیه).
  4. حلقه شبیه‌سازی:
    • برای هر لحظه زمانی در محدوده t:
      • theta_vals(i): ذخیره زاویه در زمان فعلی.
      • کنترلر PID:
        • Kp, Kd: ضرایب کنترل برای بخش تناسبی و مشتق.
        • theta_ref: زاویه مرجع، 0 (حالت عمودی).
        • error: محاسبه خطا بین زاویه مرجع و زاویه فعلی.
        • control: محاسبه سیگنال کنترل با استفاده از PID.
      • معادلات حرکت:
        • alpha: محاسبه شتاب زاویه‌ای.
        • omega: به‌روزرسانی سرعت زاویه‌ای.
        • theta: به‌روزرسانی زاویه با استفاده از سرعت زاویه‌ای.
  5. رسم نتایج:
    • رسم زاویه پاندول در طول زمان به درجه برای نمایش نتایج شبیه‌سازی.