이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
카트의 역진자 제어
이 예제에서는 systune
을 사용하여 카트의 역진자를 제어합니다.
진자/카트 어셈블리
카트/진자 어셈블리는 그림 1에 나와 있으며 Simscape™ Multibody™를 사용하여 Simulink®에서 모델링됩니다.
그림 1: 카트의 역진자
그림 2: Simscape Multibody 모델
이 시스템은 카트에 가변력 를 가하여 제어됩니다. 제어기는 카트를 새로운 위치로 이동하는 동안이나 진자가 앞으로 살짝 밀릴 때(임펄스 외란
) 진자를 수직으로 유지해야 합니다.
제어 구조
수직 위치는 역진자의 불안정한 평형입니다. 플랜트의 불안정한 특성은 제어 작업을 더 어렵게 만듭니다. 이 예제에서는 다음과 같은 이중 루프 제어 구조를 사용합니다.
open_system('rct_pendulum.slx') set_param('rct_pendulum','SimMechanicsOpenEditorOnUpdate','off');
내부 루프는 2차 상태공간 제어기를 사용하여 수직 위치에서 진자를 안정화하고( 제어), 외부 루프는 PD(비례-미분) 제어기를 사용하여 카트 위치를 제어합니다. 플랜트가 이미 일부 적분 동작을 제공하기 때문에 PID 제어기 대신 PD를 사용합니다.
설계 요구 사항
TuningGoal
요구 사항을 사용하여 원하는 폐루프 동작을 지정합니다. 카트 위치 의 설정점 변경을 추종할 수 있도록 3초의 응답 시간을 지정하십시오.
% Tracking of x command req1 = TuningGoal.Tracking('xref','x',3);
진자 끝에 있는 임펄스 외란 를 적절하게 제거하기 위해 다음 형식의 LQR 페널티를 사용합니다.
이 식은 작은 각편차 를 강조하고 제어 노력
를 제한합니다.
% Rejection of impulse disturbance dF Qxu = diag([16 1 0.01]); req2 = TuningGoal.LQG('dF',{'Theta','x','F'},1,Qxu);
강인성을 위해 플랜트 입력에서 최소 6dB의 이득 여유와 40도의 위상 여유가 필요합니다.
% Stability margins req3 = TuningGoal.Margins('F',6,40);
마지막으로 폐루프 극점의 감쇠 및 고유 주파수를 제한하여 급격한 과도 상태 또는 부족감쇠된 과도 상태를 방지하십시오.
% Pole locations
MinDamping = 0.5;
MaxFrequency = 45;
req4 = TuningGoal.Poles(0,MinDamping,MaxFrequency);
제어 시스템 조정
폐루프 시스템은 PD 및 상태공간 제어기의 초기값(각각 1과 )에서 불안정합니다.
systune
을 사용하여 이 두 제어기를 함께 조정할 수 있습니다. slTuner
인터페이스를 사용해 조정 가능한 블록을 지정하고 플랜트 입력 F
를 안정성 여유 측정을 위한 분석점으로 등록하십시오.
ST0 = slTuner('rct_pendulum',{'Position Controller','Angle Controller'}); addPoint(ST0,'F');
다음으로 systune
을 사용하여 위에서 지정한 성능 요구 사항에 따라 PD 및 상태공간 제어기를 조정합니다. 안정성 여유 및 극점 위치 제약 조건(하드 요구 사항)에 따라 추종 및 외란 제거 성능(소프트 요구 사항)을 최적화하십시오.
rng(0)
Options = systuneOptions('RandomStart',5);
[ST, fSoft] = systune(ST0,[req1,req2],[req3,req4],Options);
Final: Soft = 1.37, Hard = 0.99334, Iterations = 268 Final: Soft = 1.44, Hard = 0.99885, Iterations = 248 Final: Soft = 1.27, Hard = 0.99756, Iterations = 305 Final: Soft = 1.37, Hard = 0.99924, Iterations = 320 Final: Soft = 1.26, Hard = 0.9999, Iterations = 282 Final: Soft = 1.36, Hard = 0.99897, Iterations = 259
하드 요구 사항(Hard
<1)을 충족하면서 소프트 요구 사항에 대해 1에 가까운 값을 달성하는 설계가 가장 좋습니다. 이는 조정된 제어 시스템이 안정성 여유와 극점 위치 제약 조건을 충족하면서 추종 및 외란 제거에 대한 목표 성능을 거의 달성한다는 것을 의미합니다.
검증
viewGoal
을 사용하여 각 요구 사항에 대해 최상의 설계가 어떻게 작동하는지 추가로 분석합니다.
figure('Position',[100 100 575 660])
viewGoal([req1,req3,req4],ST)
이러한 플롯을 통해 처음 두 요구 사항은 거의 충족되는 반면 마지막 두 요구 사항은 엄격하게 강제됨을 확인할 수 있습니다. 다음으로, 계단 함수 형태의 위치 변경에 대한 응답과 카트의 힘 임펄스에 대한 응답을 플로팅합니다.
T = getIOTransfer(ST,{'xref','dF'},{'x','Theta'}); figure('Position',[100 100 650 420]); subplot(121), step(T(:,1),10) title('Tracking of set point change in position') subplot(122), impulse(T(:,2),10) title('Rejection of impulse disturbance')
응답은 원하는 정착 시간에 따라 매끄럽게 이루어집니다. 제어기의 조정된 값을 검토하십시오.
C1 = getBlockValue(ST,'Position Controller')
C1 = s Kp + Kd * -------- Tf*s+1 with Kp = 5.84, Kd = 1.88, Tf = 0.0506 Name: Position_Controller Continuous-time PDF controller in parallel form.
C2 = zpk(getBlockValue(ST,'Angle Controller'))
C2 = -1602.2 (s+12.92) (s+4.266) --------------------------- (s+134.8) (s-14.16) Name: Angle_Controller Continuous-time zero/pole/gain model.
각도 제어기에는 역진자를 안정화하기 위해 플랜트 불안정 극점과 쌍을 이루는 불안정 극점이 있습니다. 이를 확인하려면 플랜트 입력에서 개루프 전달을 구하고 근궤적을 플로팅하십시오.
L = getLoopTransfer(ST,'F',-1); figure rlocus(L) set(gca,'XLim',[-25 20],'YLim',[-20 20])
검증을 완료하기 위해, 조정된 값을 Simulink에 업로드하고 카트/진자 어셈블리의 비선형 응답을 시뮬레이션합니다. 결과 시뮬레이션의 비디오가 아래에 나타납니다.
writeBlockValue(ST)
그림 3: 조정된 제어기를 사용한 카트/진자 시뮬레이션
시뮬레이션 후 모델을 닫습니다.
set_param('rct_pendulum','SimMechanicsOpenEditorOnUpdate','on'); close_system('rct_pendulum',0);