Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

카트의 역진자 제어

이 예제에서는 systune을 사용하여 카트의 역진자를 제어합니다.

진자/카트 어셈블리

카트/진자 어셈블리는 그림 1에 나와 있으며 Simscape™ Multibody™를 사용하여 Simulink®에서 모델링됩니다.

그림 1: 카트의 역진자

그림 2: Simscape Multibody 모델

이 시스템은 카트에 가변력 $F$를 가하여 제어됩니다. 제어기는 카트를 새로운 위치로 이동하는 동안이나 진자가 앞으로 살짝 밀릴 때(임펄스 외란 $dF$) 진자를 수직으로 유지해야 합니다.

제어 구조

수직 위치는 역진자의 불안정한 평형입니다. 플랜트의 불안정한 특성은 제어 작업을 더 어렵게 만듭니다. 이 예제에서는 다음과 같은 이중 루프 제어 구조를 사용합니다.

open_system('rct_pendulum.slx')
set_param('rct_pendulum','SimMechanicsOpenEditorOnUpdate','off');

내부 루프는 2차 상태공간 제어기를 사용하여 수직 위치에서 진자를 안정화하고($\theta$ 제어), 외부 루프는 PD(비례-미분) 제어기를 사용하여 카트 위치를 제어합니다. 플랜트가 이미 일부 적분 동작을 제공하기 때문에 PID 제어기 대신 PD를 사용합니다.

설계 요구 사항

TuningGoal 요구 사항을 사용하여 원하는 폐루프 동작을 지정합니다. 카트 위치 $x$의 설정점 변경을 추종할 수 있도록 3초의 응답 시간을 지정하십시오.

% Tracking of x command
req1 = TuningGoal.Tracking('xref','x',3);

진자 끝에 있는 임펄스 외란 $dF$를 적절하게 제거하기 위해 다음 형식의 LQR 페널티를 사용합니다.

$$ \int_0^\infty (16 \theta^2(t) + x^2(t) + 0.01 F^2(t)) dt $$

이 식은 작은 각편차 $\theta$를 강조하고 제어 노력 $F$를 제한합니다.

% 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과 $2/s$)에서 불안정합니다. 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.99927, Iterations = 361
Final: Soft = 1.44, Hard = 0.99967, Iterations = 281
Final: Soft = 1.27, Hard = 0.99881, Iterations = 285
Final: Soft = 1.37, Hard = 0.99897, Iterations = 313
Final: Soft = 1.26, Hard = 0.9991, Iterations = 291
Final: Soft = 1.36, Hard = 0.99934, 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.73, Kd = 1.75, Tf = 0.0496
 
Name: Position_Controller
Continuous-time PDF controller in parallel form.
C2 = zpk(getBlockValue(ST,'Angle Controller'))
C2 =
 
  -1607.7 (s+13.07) (s+4.142)
  ---------------------------
      (s+134.9) (s-14.29)
 
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);

참고 항목

(Simulink Control Design) | (Simulink Control Design)

관련 항목