제어
Control.
시스템[1] 을 원하는 방향으로 작동하게 만드는 학문의 총칭이고 기계공학과와 전자공학과, 그리고 화학공학과에 진학하게 된다면 극복해야 하는 최종 보스중 하나이다. 이를 수행하는 공학 분야를 제어공학이라고 한다. 인간 능력 이상의 정밀한 작업이나, 인간의 힘으로 할 수 없는 작업 등을 기계가 할 수 있게 하는 핵심적인 역할을 하는 학문으로, 원자력 발전, 항공우주, 로봇, 병기, 공장 자동화, 교통 시스템등 언제나 함께 하는 현대 과학 문명의 기둥과도 같은 존재. 컴퓨터를 사람의 뇌로 비유하자면 제어는 의식이라고 보면 된다.
앞서 말했듯이 어떤 특정 기계나 전자 시스템을 원하는 상태로 유지시키거나 가게 만드는 것이 제어 이론의 목적이다 (예를 들면 A 상태에 있는 시스템을 B 상태로 가게 만든다거나, 여러 외부 요인을 무시하고 A인 상태를 유지하게 만들거나 등등). 백문이불여일견 닥치고 봐보자
이 과목에서 모델링의 중요성을 깨달을 수 있다. 진동해석에서 63빌딩을 빔으로 볼 수 있는가, 서스펜션을 스프링댐퍼 시스템으로 볼 수 있는가와 같은 문제를 많이 다루며, 그 시스템의 반응과 PID, SMC를 통한 제어방법에 대하여 배운다. 개념의 물리적 이해가 받쳐주면 그닥 어렵지는 않다.
학부 수준에서는 MATLAB을 이용한 전달함수(Transfer function) 구하기, 상태공간 방정식(state-space model) 세우기 같은 것도 배운다.
제어를 하기 위해서는 먼저 시스템의 특성을 파악해야 한다.
이를 위해서 시스템에 대해 해석할 수 있는 능력과 기본적으로 물리적 현상을 수학적으로 표현하는 능력, 그리고 제어 대상에 대한 학문의 이해가 필수적이다. 활용되는 이론들은 회로이론, 전자기학, 동역학, 열역학, 재료역학, 유체역학, 화학공학 등이 주로 시스템을 해석하는데 사용되고 이를 통해 물리적 현상을 수학적 모델을 기반으로 제어이론에 접목하게 된다.
물론 저걸 다하는 건 아니고 필요한 것만 사용하게 된다. [2]
결과적으로 시스템을 모델링 한다는 것은 미분방정식에 대한 이해와 함께 전기, 유공압, 기계와 같은 모델을 수학적으로 해석할 수 있는 시스템에 대한 선행 학습을 필요로 한다. 또한 이러한 미분방정식에 대한 해석을 보다 쉽게 하기 위해서는 라플라스 변환과 푸리에 변환을 이해하고 있어야 한다.
Transfer Function
라플라스 변환 S-domain을 이용하여 미분방정식을 대수방정식으로 바꾼 식.
전달함수(G(s)= 출력(Y(s))/입력(R(s)) 이며, 이는 다항식 / 다항식으로 표현된다.
분모의 다항식 q(s) =0 이 되는 점을 극점(pole)이라 하며 , 이 식을 특성 방정식 (Characteristic Equation) 이라 한다.
분자의 다항식 p(s) =0 이 되는 점을 영점(zero)이라 한다.
특성방정식은 시스템의 특성을 나타내며, 극점은 복소평면(Complex Plane)상 좌반면(Left-Half Plane)에 있어야 stable(안정) 하다.[3]
일반인을 위한 설명을 달자면, 예를 들어, 볼링공과 탁구공이 있다고 가정해 보자. 이 둘을 바닥에 던지면 볼링공은 바닥에 붙어버리듯이 떨어지는 반응을 보이지만, 탁구공은 몇번이고 튀어오르는 것을 반복하는 반응을 보여줄 것이고, 이러한 반응 특성을 수학적으로 풀어놓으면 이것이 전달함수가 된다.
이렇듯 세상의 모든 물체들은 힘을 가했을때 그 물체의 특성에 따라 고유한 반응을 보이며 이는 물체가 저마다 고유한 전달 함수를 가지고 있다는 것을 의미한다. 만약에, 전달 함수가 비슷한 두 물체에 같은 힘을 가한다면 두 물체는 비슷한 반응을 보여줄 것이고, 전달 함수가 상이한 물체의 경우 같은 힘을 가하면 전혀다른 반응을 보여줄 것이다.
시스템의 상태를 나타내는 방정식. 여기서 시스템의 상태란 시스템의 dynamic 특성을 나타내는 변수를 의미한다.
dot x = Ax+Bu / y=Cx+Du 의 형태로 나타낼 수 있다.
라플라스 변환을 통해
SX=AX+BU / Y=CX+DU 가 되며
(SI-A)X=BU , 단 I는 단위 행렬
X= inv(SI-A)*BU 의 형태로 표현할 수 있다.
D term 이 0 행렬이라면 즉, SISO sys (Single input single output) 이라면,
Y=C*inv(SI-A)*BU 가 되며 TF(전달함수) = 출력/ 입력 = Y(s)/R(s) = C*inv(SI-A)*B 가 된다.
여기서 inv(SI-A) =0 시스템의 특성방정식이 된다.
제어는 크게 고전제어와 현대제어로 나뉘는데 칼만의 상태 방정식 도입 전후가 그 기준이다. 고전제어는 시스템의 미분방정식을 라플라스 변환하여 구해지는 전달함수에 기초하여 주파수 영역에서 컨트롤러를 설계하는 이론이다. 현대제어는 상태방정식으로 시스템을 표현하여, 시간영역에서 컨트롤러를 설계한다. 이름만 고전제어라 낡은 제어이론이라고 오해할 수 있으나, 고전제어는 로버스트(Robust) 제어와 같은 시스템의 불확실성을 다루는 제어 분야에서 현대에도 이용된다. 고전제어는 입출력만 표현한다는 한계를 지니는 반면 현대제어는 상태방정식으로 시스템의 상태(State)까지 고려할 수 있어, 보다 복잡한 시스템의 제어를 가능케 한다. 그리고 시간영역이라 직관적인 장점이 있다. 현대에 들어서 연구된 수많은 제어 이론이 이 상태방정식에 기초하고 있다. 칼만 필터, 최적제어론, 적응제어 등이 대표적이다. 하지만 시스템의 표현이 상태의 도입형태에 따라서 달라지는 용장성(글이나 말 따위가 쓸데없이 길다)을 지니기 때문에 실제 산업에서 이용되기에는 너무 복잡하다. 그렇기 때문에 이론만 번지르르하지 실제론 아무런 도움이 안 된다는 평도 있다.
우리가 일상에서 접하는 대부분의 제어가 이 방법이다. 밸브만 달려있는 수도꼭지, On/Off를 조절하는 전깃불, 가스불이나 선풍기의 Off/약/중/강 같은 것이 대표적인 예다. "이게 무슨 제어야? 그냥 입력을 넣는 거지"라고 생각할 수 있지만 가장 기본적인 제어이다.
매우 쉽다는 장점이 있다. 최종 결과는 튜닝으로 적절히 조절하면 된다. 정확히 시스템을 알고있는 경우에는 무엇보다 훌륭한 결과를 낼 수 있다[4]
단점은 상황판단을 못 하기 때문에 시스템에서 예상하지 못한 돌발사태에 약하다. 가스불 위에 있는 곰국이 숯덩이가 되는지 수도꼭지 아래 있는 물통이 넘치든지 상관없이 입력을 준다. 그래서 보통은 사람이나 외부에서 피드백을 하는 것을 볼 수 있다.
그냥 켰다 끄는 제어이다. 가장 간단한 피드백제어로 너무나 단순하고 간단한 이 제어까지가 우리가 일상적으로 볼 수 있는 제어 방식이다. 예를 들면 현관 등에서 사람이 지나가면(입력) 불을 켜고(출력) 입력변화가 없으면(입력) 불을 끈다(출력). 기본적인 온도제어도 다 이런 방식이다. 히터의 경우 기준보다 추우면(입력) 켜고(출력) 더우면(입력) 끈다(출력).
이보다 좀 더 나아간 것이 히스테리시스 제어인데 이는 측정의 noise로 인한 오류를 방지하고자 발전된 것이다. 만약 20도가 적정온도인 냉장고에서 정확히 20도에 해당하는 온도가 되었을 때 무슨일이 벌어질까? 모든 세상의 온도 측정에는 노이즈가 있다. 20도라 해도 지금 측정하면 20.1도인데 0.1초 후에 측정해보면 19.9도일 수도 있다. 이를 고려하지 못한다면 0.1초마다 입력을 받는 시스템에서는 0.1초 또는 그에 상응하는 시간 간격으로 냉각기를 켰다 껐다 하게 될 수도 있다. 어린이가 집 전등으로 싸이키 조명을 키는 것처럼 엉망진창이 된다.(전기세 + 형광등 수명단축 ) 그래서 켜질 때는 20도 보다 낮게, 꺼질 때는 21도 정도로 유지하는 시스템을 구현한다[5]
PID제어는 시스템의 정보가 필요없는 컨트롤러 기반 제어기법이다. 별도의 시스템에 대한 해석 없이도 경험적으로 제어기를 조절하여 적당한 작동을 하면 바로 사용할 수 있을 만큼 간편하기 때문에 실제 공학분야에서 가장 많이 쓰이는 제어 방법이며, 로봇이 있는 자동화된 공장이 대표적 사용 사례지만, 드론 조종이나 엘리베이터의 고저차 조절등 실생활에서 의외로 흔히 접할 수 있는편. 사실 PID만 해도 상당히 고급제어이고 이 이상 가는 이론의 경우는 실제 산업이나 공정 제어분야에서도 잘 사용하지 않기 때문에 접할 기회는 많지 않다. 다만 요즘 차량의 크루즈 컨트롤 중 고급 사양에는 쓰이고 있는 듯 하다. PID 제어는 P제어 I 제어 D제어의 합쳐진 형태인데 각 제어에 대한 설명은 다음과 같다.
PID를 제대로 증명하고 쓰려면 매우 어렵지만, 수학 전공이 아닌 공대 대학원에서는 이런 복잡한 증명은 논문 쓸 때 인용하는 정도로 생략한다. [6]
Proportional 제어 (비례 제어)
$$ \displaystyle K_p(s) = K_p $$
간단하게 설명하자면 목표와 지금 상태의 차이가 나는 만큼 제어입력을 넣는 것이다.
난방을 예로 들면 10도 에서 20도로 가열할 때 10에 해당하는 가열을 하고 만약에 15도에서 20도 가열할 때는 5에 해당하는 가열을 하는 것이다. 이 방법의 단점은 차이가 적어지면 적어질수록 20도로 가는 것이 어렵고 심지어는 영원히 도달하지 않을 수 있다.
만약 가열하는데 옆에 제어 1단위의 냉방기가 있다면[7] 19도에서 1단위의 난방을 해도 결과적으로 입력은 0인지라 19도에 수렴한다. 사실상 제어에 있어 이런 경우가 대부분이라 정밀제어에서는 P제어만을 사용하지 않는다. 하지만 오차에 민감하지 않은 경우 가장 기본적인 피드백 제어 방법으로 이러한 제어로도 충분하다.
가장 큰 단점은 steady-state error($$e_ss$$))가 발생한다는 것으로, Transfer function에 Final value Theorem을 적용해보는 것으로 확인할 수 있다. unit step function input일 때를 생각해보면 Kp value를 무한에 도달시켜야만 steady-state error가 사라진다.
Proportional Integral 제어 (비례 적분 제어)
$$ \displaystyle K_{pi}(s) = K_p + {K_i \over s} = K_p(1 + {1 \over sT_i}) $$
앞서 말한 P제어의 한계 극복을 위해 등장한 방법이다. 이 방법은 오차를 적분해 나가는 방법이다.
앞서 예에서 19도에서 유지되는 경우 1단위의 제어를 시간에 따라서 계속 더해주게 된다. 그러면 결과적으로 제어 입력이 증가하여 이러한 어떠한 외부 환경에 대해서도 일정하게 유지하게 한다. 하지만 이 방법에서도 문제점이 있다.
앞서 19도의 상황에서 3번 제어를 거쳐 19, 19.5, 19.8, 20도에 도달했다 하자. 이 때 I 제어에서는 1, 0.5, 0.2 를 더한 1.7의 단위의 난방을 한다. 이 멍청한 제어기는 20이 넘어가도 멈추질 않는다! 넘어가서 20.3 도가 되고 나서야 제어입력의 0.3을 깎아서 1.4가 된다. 결국은 이렇게 감소를 반복하여 냉각에 가기까지 출렁이면서 20도에 이르게 된다는 치명적인 단점이 있다. 게다가 이 입력에 대한 가중치가 과하다면 점점 증폭하여 폭주(제어에서는 발산이라 한다)하게 된다는 점을 잘 생각해야 한다.
Proportional Derivative 제어 (비례 미분 제어)
$$ \displaystyle K_{pd}(s) = K_p + sK_d = K_p (1 + sT_d) $$
폭주하는 제어를 잠재우기 위한 미분제어다. 예를 들어 미친듯이 입력값을 높여서 온도가 -10도에서 한번에 10도로 한번에 +20도가 올라갔다고 하자. 그러면 다음 결과는 30도가 될 것이라 생각할 수 있다. 이런 상황을 방지하기 위해서는 이런 20도가 증가했다는 사실에 대해 -10정도에 해당하는 입력을 빼주어야 한다. 대부분의 시스템은 관성이라는 개념이 존재한다.[8] 따라서 미리 입력을 줄여놓아야 정확하고 빠른 제어가 가능하다. 하지만 제어가 느려진다는 단점도 있다. 목표치에 도달할 때 좀 더 스무스하게 도착하도록 하는 대신에 제어 성능이 좀 느려지는 경향이 있다. 하지만 이러한 제어를 하는 이유는 시스템의 상태가 좀더 안정적으로 수렴한다는 데 있다.
전자공학 시스템에서는 신호의 Overshoot을 억제하여 제어의 안정성을 높인다.
예를 들어 비행기가 착륙하는데 (목표 고도가 0m) 빠르다고 최단거리로 지상에 접근하면.... 더 이상의 자세한 설명은 생략한다. 착륙하는데 고도를 천천히 낮추어야 비행기가 안전하게 착륙하듯이 우리의 일반적인 제어대상도 마찬가지이다. 따라서 이러한 D 제어도 마찬가지로 필요하다.
$$ \displaystyle K_{pid}(s) = K_p + \frac{K_i}{s} + sK_d = K_p(1 + {1 \over sT_i} + sT_d) $$
위 세가지 제어를 이용하여 일반적으로 PI 제어, PD제어, IP제어 PID 제어를 쓰게 되는데 어딘가 모자란 P 제어를 I 제어가 보충해주고 이 폭주기관차 I 제어를 D 제어가 억누르는 개념이다.
이 세 가지를 보통은 경험적으로 이것도 해보고 저것도 해보면서 적당한 값을 찾아 쓰면 된다. 일반적으로 P를 최대한 높여 시스템이 발광하기 직전에서 일정치를 빼고 마찬가지로 I 제어를 최대한 높여 시스템이 발광하기 시작하면 D 제어를 추가하여 발광하기 직전으로 튜닝을 해보자. 그러면 그럭저럭 쓸만한 녀석이 탄생한다.
다들 튜닝에 어려움을 많이 겪는데 이를 결정할 이론적인 방법이 있다!! (Ziggler Nichols 방법) 하지만 기대하지 말자. 세상에 저 방법으로 제어가 될 시스템이면 제어에 고민할 필요가 없다.
Ultimate Sensitivity Method
P, PI, PD, PID 제어를 할 때 사용되는 튜닝법으로 여러가지가 존재하지만, 여기서는 지금까지의 경험으로 만들어진 튜닝법을 소개한다. 개발자인 John G. Ziegler와 Nathaniel B. Nichols의 이름을 따서 Ziegler-Nichols Method라고도 불린다. 튜닝 순서는 다음과 같다.
1. 시스템이 안정에서 불안정으로 넘어가는 그 순간의 한계 게인을 Ku, 한계 주기를 Pu라고 한다.
2. 다음의 표를 참고하여 Kp, Ti, Td를 결정한다.
PID제어 같은 피드백 제어 방식은 여러 환경에서 대처 가능하다는 장점이 있지만 피드포워드보다 느리다는 단점이 있다. (속응성이 낮다.) 이를 보완하기 위해, 처음에는 피드포워드로 제어한 다음에 피드백을 추가하는 것이다. 이러면 결과를 도출하는 속도가 빠르다는 feed-forward의 장점과 여러 환경에 대처 가능하다는 feedback의 장점을 모두 갖게 된다. 그래서 고전 제어 중에서는 가장 성능이 뛰어나다고 평가 받고 있다.
예를 들자면,
1. 선풍기 바람의 세기를 중간으로 설정한다.
2. 시원한 바람을 즐긴다.
3. 무언가의 이유로 선풍기 바람의 세기가 약함/강함으로 변경되면 다시 중간으로 바꾼다.
대체로 PID 이상의 제어는 대학원 수준이므로 위키에서 설명하기는 힘들고 전문적인 제어 서적을 읽거나 인터넷을 검색하는 게 낫다.
Pole Placement, LQR, LQG 정도까지는 대학교에서 공업수학을 들어서 선형대수학, 미분방정식, 라플라스 변환, 푸리에 변환을 아는 정도면 충분하지만, Sliding Mode Control, Model Predictive Control, Nonlinear Control 을 알려면 미분기하학, 위상수학, Linear Matrix Inequailty 등 매우 어려운 수학이 사용된다.
Linear quadratic regulator 의 약자.
특정한 양을 performance measure로 잡아주고 [9] 이를 최소화하는 컨트롤러를 설계하는 것. 흔히 최적제어론(optimal control)이라고도 하는데 이는 위에서 구한 컨트롤러가 performance measure를 최소화 시켜주기 때문이다.
참고로 이거랑 칼만 필터랑 합친 것을 LQG라고 한다. 얘는 linear quadratic Gaussian의 약자인데 칼만필터가 가우시안 분포를 써먹기 때문에 이런 이름이 붙었다. LQG에서는 칼만필터를 사용하기 때문에 유한시간 LQR은 못 써먹고 무조건 무한시간 LQR 밖에 안 된다. 그래야 리카티 이퀘의 솔루션이 상수가 되기 때문.
모델링이 완벽하지 않고 불확실성(uncertainty)이 있을 때 사용하는 제어법이다. 1960년대에 소련에서 V. Utkin 등에 의해 고안되어 이후 미국과 서방세계로 전파되었다. 컨트롤러 구하는 방법은 다음과 같다. 먼저 desired trajectory와 시스템의 actual trajectory 간의 에러를 적당히 주물주물해서 슬라이딩 변수를 만든다. 이 슬라이딩 변수가 0을 유지하는 것을 슬라이딩 모드라고 하며 이러한 상태를 시스템이 슬라이딩 서피스에 있다고 한다. 이러한 상태에서 (즉 슬라이딩 변수가 0을 유지하는 상황에서) 에러가 0으로 수렴하도록 (그래프를 그려보면 슬라이딩 서피스 위를 굴러가서(sliding) 0에 도달하는 것처럼 보인다) 슬라이딩 서피스를 정의하는 것이 관건이다. 컨트롤러는 불확실성을 가지는 원래의 dynamics가 슬라이딩 서피스에 도달하도록 설계한다. 이후에는 이미 말했듯이 자동적으로 에러가 0으로 수렴.. 이때 필연적으로 불연속적인 signum 함수가 사용되는데 이러한 불연속성 때문에 제어 입력과 상태 벡터에 high-frequency oscillation, 즉 chattering이라는 현상이 일어난다. 이러한 chattering 은 의미 그대로 제어 출력이 반복적으로 파르르 떠는 현상을 말하는데, 이러한 현상이 적절히 감쇠되지 않으면 실제 기계에 반복적인 떨림을 발생시키고 이러한 떨림은 곧 기계의 물리적인 고장으로 이어질 수 있다. 따라서 이러한 chattering을 줄이기 위해서 signum 함수 대신 포화를 표현한 함수를 쓰거나 boundary layer 방법, high-order SMC 등의 방법이 고안되어 있다. 모델에 불확실성이 있을 때 제어하는 강인제어(Robust Control) 분야의 가장 대표적인 제어법이다.
일반적으로 제어하려는 대상의 특성을 알고 있기 때문에 Open-loop 제어를 하면 충분하다. 여기에 외란에 대해서 알고 있고 측정이 가능하면 추가적인 제어를 넣고 혹시 모르니 PID를 안전빵으로 넣는다. 사실상 대부분의 제어는 경험+PID만으로 거의 확실하게 가능하다.
예를 들어 자동차를 생각하면(제어 대상 중에 가장 골치 아픈 녀석 중 하나) 엔진 스로틀을 얼마 정도 밟으면 어느 정도 힘이 나온다는 것은 알고 있다. 이를 통해 크루즈 컨트롤을 한다고 할 때, 목표 속도가 있으면 그에 맞는 가속 페달 정보를 입력하면 끝이다(open-loop 제어). 하지만 세상은 그렇게 호락호락하지 않으며, 오르막 내리막이 있다.-- 오르막을 가면 차량 속도가 줄어들고 이를 보상하기 위한 경사도를 측정할 수 있다고 치자. 그러면 경사도 얼마에는 엔진 출력 얼마를 더해주면 된다는 정보를 통해 추가적인 입력을 넣어주게 된다. 하지만 그것이 다가 아니다. 바람이 앞에서 불거나 하면 속도가 줄어들 것이다. 이런 경우에는 PID 제어가 힘을 쓰게 된다. 줄어든 만큼의 속도를 보상하여 목표 속도에 맞게 제어를 한다.
다른 제어이론은 특수한 상황에 맞춰 특수한 경우에 사용하거나 반대로 좀 더 경험을 배제하고 모든 상황에 맞는 제어기를 위한 것이다.
예를 들어 하드디스크 모터제어는 매우 빠르고 정확해야만 한다. 이럴 경우에는 모든 동역학정보와 모델을 체계적으로 세워서 최선의 제어성능을 위해 LQR이라는 최적제어를 수행한다. 혹시 더 좋은 성능을 위해서는 Model Predictive Control이나 비선형성을 반영한 Sliding Mode Control을 활용할 수 있다.
아니면 새로운 비행기를 만드는데 경험이 하나도 없다. 그런데도 어느정도 제어가 가능해야 하는데 이를 위해서 경험없이 PID를 쓰면 상황에 따라 제어 불능에 빠지는 경우가 생긴다. 이를 방지하기 위해서 좀 더 넓은 범위의 제어가 가능한 LQG나 Sliding Mode Control을 사용하면 최적의 성능은 아니지만 어느 정도 안전한 제어 성능을 낼 수 있다.
1. 소개
시스템[1] 을 원하는 방향으로 작동하게 만드는 학문의 총칭이고 기계공학과와 전자공학과, 그리고 화학공학과에 진학하게 된다면 극복해야 하는 최종 보스중 하나이다. 이를 수행하는 공학 분야를 제어공학이라고 한다. 인간 능력 이상의 정밀한 작업이나, 인간의 힘으로 할 수 없는 작업 등을 기계가 할 수 있게 하는 핵심적인 역할을 하는 학문으로, 원자력 발전, 항공우주, 로봇, 병기, 공장 자동화, 교통 시스템등 언제나 함께 하는 현대 과학 문명의 기둥과도 같은 존재. 컴퓨터를 사람의 뇌로 비유하자면 제어는 의식이라고 보면 된다.
앞서 말했듯이 어떤 특정 기계나 전자 시스템을 원하는 상태로 유지시키거나 가게 만드는 것이 제어 이론의 목적이다 (예를 들면 A 상태에 있는 시스템을 B 상태로 가게 만든다거나, 여러 외부 요인을 무시하고 A인 상태를 유지하게 만들거나 등등). 백문이불여일견 닥치고 봐보자
이 과목에서 모델링의 중요성을 깨달을 수 있다. 진동해석에서 63빌딩을 빔으로 볼 수 있는가, 서스펜션을 스프링댐퍼 시스템으로 볼 수 있는가와 같은 문제를 많이 다루며, 그 시스템의 반응과 PID, SMC를 통한 제어방법에 대하여 배운다. 개념의 물리적 이해가 받쳐주면 그닥 어렵지는 않다.
학부 수준에서는 MATLAB을 이용한 전달함수(Transfer function) 구하기, 상태공간 방정식(state-space model) 세우기 같은 것도 배운다.
2. 시스템 모델링
제어를 하기 위해서는 먼저 시스템의 특성을 파악해야 한다.
이를 위해서 시스템에 대해 해석할 수 있는 능력과 기본적으로 물리적 현상을 수학적으로 표현하는 능력, 그리고 제어 대상에 대한 학문의 이해가 필수적이다. 활용되는 이론들은 회로이론, 전자기학, 동역학, 열역학, 재료역학, 유체역학, 화학공학 등이 주로 시스템을 해석하는데 사용되고 이를 통해 물리적 현상을 수학적 모델을 기반으로 제어이론에 접목하게 된다.
물론 저걸 다하는 건 아니고 필요한 것만 사용하게 된다. [2]
결과적으로 시스템을 모델링 한다는 것은 미분방정식에 대한 이해와 함께 전기, 유공압, 기계와 같은 모델을 수학적으로 해석할 수 있는 시스템에 대한 선행 학습을 필요로 한다. 또한 이러한 미분방정식에 대한 해석을 보다 쉽게 하기 위해서는 라플라스 변환과 푸리에 변환을 이해하고 있어야 한다.
2.1. 전달 함수
Transfer Function
라플라스 변환 S-domain을 이용하여 미분방정식을 대수방정식으로 바꾼 식.
전달함수(G(s)= 출력(Y(s))/입력(R(s)) 이며, 이는 다항식 / 다항식으로 표현된다.
분모의 다항식 q(s) =0 이 되는 점을 극점(pole)이라 하며 , 이 식을 특성 방정식 (Characteristic Equation) 이라 한다.
분자의 다항식 p(s) =0 이 되는 점을 영점(zero)이라 한다.
특성방정식은 시스템의 특성을 나타내며, 극점은 복소평면(Complex Plane)상 좌반면(Left-Half Plane)에 있어야 stable(안정) 하다.[3]
일반인을 위한 설명을 달자면, 예를 들어, 볼링공과 탁구공이 있다고 가정해 보자. 이 둘을 바닥에 던지면 볼링공은 바닥에 붙어버리듯이 떨어지는 반응을 보이지만, 탁구공은 몇번이고 튀어오르는 것을 반복하는 반응을 보여줄 것이고, 이러한 반응 특성을 수학적으로 풀어놓으면 이것이 전달함수가 된다.
이렇듯 세상의 모든 물체들은 힘을 가했을때 그 물체의 특성에 따라 고유한 반응을 보이며 이는 물체가 저마다 고유한 전달 함수를 가지고 있다는 것을 의미한다. 만약에, 전달 함수가 비슷한 두 물체에 같은 힘을 가한다면 두 물체는 비슷한 반응을 보여줄 것이고, 전달 함수가 상이한 물체의 경우 같은 힘을 가하면 전혀다른 반응을 보여줄 것이다.
2.2. 상태방정식
시스템의 상태를 나타내는 방정식. 여기서 시스템의 상태란 시스템의 dynamic 특성을 나타내는 변수를 의미한다.
dot x = Ax+Bu / y=Cx+Du 의 형태로 나타낼 수 있다.
라플라스 변환을 통해
SX=AX+BU / Y=CX+DU 가 되며
(SI-A)X=BU , 단 I는 단위 행렬
X= inv(SI-A)*BU 의 형태로 표현할 수 있다.
D term 이 0 행렬이라면 즉, SISO sys (Single input single output) 이라면,
Y=C*inv(SI-A)*BU 가 되며 TF(전달함수) = 출력/ 입력 = Y(s)/R(s) = C*inv(SI-A)*B 가 된다.
여기서 inv(SI-A) =0 시스템의 특성방정식이 된다.
3. 제어 이론
제어는 크게 고전제어와 현대제어로 나뉘는데 칼만의 상태 방정식 도입 전후가 그 기준이다. 고전제어는 시스템의 미분방정식을 라플라스 변환하여 구해지는 전달함수에 기초하여 주파수 영역에서 컨트롤러를 설계하는 이론이다. 현대제어는 상태방정식으로 시스템을 표현하여, 시간영역에서 컨트롤러를 설계한다. 이름만 고전제어라 낡은 제어이론이라고 오해할 수 있으나, 고전제어는 로버스트(Robust) 제어와 같은 시스템의 불확실성을 다루는 제어 분야에서 현대에도 이용된다. 고전제어는 입출력만 표현한다는 한계를 지니는 반면 현대제어는 상태방정식으로 시스템의 상태(State)까지 고려할 수 있어, 보다 복잡한 시스템의 제어를 가능케 한다. 그리고 시간영역이라 직관적인 장점이 있다. 현대에 들어서 연구된 수많은 제어 이론이 이 상태방정식에 기초하고 있다. 칼만 필터, 최적제어론, 적응제어 등이 대표적이다. 하지만 시스템의 표현이 상태의 도입형태에 따라서 달라지는 용장성(글이나 말 따위가 쓸데없이 길다)을 지니기 때문에 실제 산업에서 이용되기에는 너무 복잡하다. 그렇기 때문에 이론만 번지르르하지 실제론 아무런 도움이 안 된다는 평도 있다.
3.1. Open-loop 제어
우리가 일상에서 접하는 대부분의 제어가 이 방법이다. 밸브만 달려있는 수도꼭지, On/Off를 조절하는 전깃불, 가스불이나 선풍기의 Off/약/중/강 같은 것이 대표적인 예다. "이게 무슨 제어야? 그냥 입력을 넣는 거지"라고 생각할 수 있지만 가장 기본적인 제어이다.
매우 쉽다는 장점이 있다. 최종 결과는 튜닝으로 적절히 조절하면 된다. 정확히 시스템을 알고있는 경우에는 무엇보다 훌륭한 결과를 낼 수 있다[4]
단점은 상황판단을 못 하기 때문에 시스템에서 예상하지 못한 돌발사태에 약하다. 가스불 위에 있는 곰국이 숯덩이가 되는지 수도꼭지 아래 있는 물통이 넘치든지 상관없이 입력을 준다. 그래서 보통은 사람이나 외부에서 피드백을 하는 것을 볼 수 있다.
3.2. On-Off 제어
그냥 켰다 끄는 제어이다. 가장 간단한 피드백제어로 너무나 단순하고 간단한 이 제어까지가 우리가 일상적으로 볼 수 있는 제어 방식이다. 예를 들면 현관 등에서 사람이 지나가면(입력) 불을 켜고(출력) 입력변화가 없으면(입력) 불을 끈다(출력). 기본적인 온도제어도 다 이런 방식이다. 히터의 경우 기준보다 추우면(입력) 켜고(출력) 더우면(입력) 끈다(출력).
이보다 좀 더 나아간 것이 히스테리시스 제어인데 이는 측정의 noise로 인한 오류를 방지하고자 발전된 것이다. 만약 20도가 적정온도인 냉장고에서 정확히 20도에 해당하는 온도가 되었을 때 무슨일이 벌어질까? 모든 세상의 온도 측정에는 노이즈가 있다. 20도라 해도 지금 측정하면 20.1도인데 0.1초 후에 측정해보면 19.9도일 수도 있다. 이를 고려하지 못한다면 0.1초마다 입력을 받는 시스템에서는 0.1초 또는 그에 상응하는 시간 간격으로 냉각기를 켰다 껐다 하게 될 수도 있다. 어린이가 집 전등으로 싸이키 조명을 키는 것처럼 엉망진창이 된다.(전기세 + 형광등 수명단축 ) 그래서 켜질 때는 20도 보다 낮게, 꺼질 때는 21도 정도로 유지하는 시스템을 구현한다[5]
3.3. PID 계열
PID제어는 시스템의 정보가 필요없는 컨트롤러 기반 제어기법이다. 별도의 시스템에 대한 해석 없이도 경험적으로 제어기를 조절하여 적당한 작동을 하면 바로 사용할 수 있을 만큼 간편하기 때문에 실제 공학분야에서 가장 많이 쓰이는 제어 방법이며, 로봇이 있는 자동화된 공장이 대표적 사용 사례지만, 드론 조종이나 엘리베이터의 고저차 조절등 실생활에서 의외로 흔히 접할 수 있는편. 사실 PID만 해도 상당히 고급제어이고 이 이상 가는 이론의 경우는 실제 산업이나 공정 제어분야에서도 잘 사용하지 않기 때문에 접할 기회는 많지 않다. 다만 요즘 차량의 크루즈 컨트롤 중 고급 사양에는 쓰이고 있는 듯 하다. PID 제어는 P제어 I 제어 D제어의 합쳐진 형태인데 각 제어에 대한 설명은 다음과 같다.
PID를 제대로 증명하고 쓰려면 매우 어렵지만, 수학 전공이 아닌 공대 대학원에서는 이런 복잡한 증명은 논문 쓸 때 인용하는 정도로 생략한다. [6]
3.3.1. P 제어
Proportional 제어 (비례 제어)
$$ \displaystyle K_p(s) = K_p $$
간단하게 설명하자면 목표와 지금 상태의 차이가 나는 만큼 제어입력을 넣는 것이다.
난방을 예로 들면 10도 에서 20도로 가열할 때 10에 해당하는 가열을 하고 만약에 15도에서 20도 가열할 때는 5에 해당하는 가열을 하는 것이다. 이 방법의 단점은 차이가 적어지면 적어질수록 20도로 가는 것이 어렵고 심지어는 영원히 도달하지 않을 수 있다.
만약 가열하는데 옆에 제어 1단위의 냉방기가 있다면[7] 19도에서 1단위의 난방을 해도 결과적으로 입력은 0인지라 19도에 수렴한다. 사실상 제어에 있어 이런 경우가 대부분이라 정밀제어에서는 P제어만을 사용하지 않는다. 하지만 오차에 민감하지 않은 경우 가장 기본적인 피드백 제어 방법으로 이러한 제어로도 충분하다.
가장 큰 단점은 steady-state error($$e_ss$$))가 발생한다는 것으로, Transfer function에 Final value Theorem을 적용해보는 것으로 확인할 수 있다. unit step function input일 때를 생각해보면 Kp value를 무한에 도달시켜야만 steady-state error가 사라진다.
3.3.2. PI 제어
Proportional Integral 제어 (비례 적분 제어)
$$ \displaystyle K_{pi}(s) = K_p + {K_i \over s} = K_p(1 + {1 \over sT_i}) $$
앞서 말한 P제어의 한계 극복을 위해 등장한 방법이다. 이 방법은 오차를 적분해 나가는 방법이다.
앞서 예에서 19도에서 유지되는 경우 1단위의 제어를 시간에 따라서 계속 더해주게 된다. 그러면 결과적으로 제어 입력이 증가하여 이러한 어떠한 외부 환경에 대해서도 일정하게 유지하게 한다. 하지만 이 방법에서도 문제점이 있다.
앞서 19도의 상황에서 3번 제어를 거쳐 19, 19.5, 19.8, 20도에 도달했다 하자. 이 때 I 제어에서는 1, 0.5, 0.2 를 더한 1.7의 단위의 난방을 한다. 이 멍청한 제어기는 20이 넘어가도 멈추질 않는다! 넘어가서 20.3 도가 되고 나서야 제어입력의 0.3을 깎아서 1.4가 된다. 결국은 이렇게 감소를 반복하여 냉각에 가기까지 출렁이면서 20도에 이르게 된다는 치명적인 단점이 있다. 게다가 이 입력에 대한 가중치가 과하다면 점점 증폭하여 폭주(제어에서는 발산이라 한다)하게 된다는 점을 잘 생각해야 한다.
3.3.3. PD 제어
Proportional Derivative 제어 (비례 미분 제어)
$$ \displaystyle K_{pd}(s) = K_p + sK_d = K_p (1 + sT_d) $$
폭주하는 제어를 잠재우기 위한 미분제어다. 예를 들어 미친듯이 입력값을 높여서 온도가 -10도에서 한번에 10도로 한번에 +20도가 올라갔다고 하자. 그러면 다음 결과는 30도가 될 것이라 생각할 수 있다. 이런 상황을 방지하기 위해서는 이런 20도가 증가했다는 사실에 대해 -10정도에 해당하는 입력을 빼주어야 한다. 대부분의 시스템은 관성이라는 개념이 존재한다.[8] 따라서 미리 입력을 줄여놓아야 정확하고 빠른 제어가 가능하다. 하지만 제어가 느려진다는 단점도 있다. 목표치에 도달할 때 좀 더 스무스하게 도착하도록 하는 대신에 제어 성능이 좀 느려지는 경향이 있다. 하지만 이러한 제어를 하는 이유는 시스템의 상태가 좀더 안정적으로 수렴한다는 데 있다.
전자공학 시스템에서는 신호의 Overshoot을 억제하여 제어의 안정성을 높인다.
예를 들어 비행기가 착륙하는데 (목표 고도가 0m) 빠르다고 최단거리로 지상에 접근하면.... 더 이상의 자세한 설명은 생략한다. 착륙하는데 고도를 천천히 낮추어야 비행기가 안전하게 착륙하듯이 우리의 일반적인 제어대상도 마찬가지이다. 따라서 이러한 D 제어도 마찬가지로 필요하다.
3.3.4. PID 제어
$$ \displaystyle K_{pid}(s) = K_p + \frac{K_i}{s} + sK_d = K_p(1 + {1 \over sT_i} + sT_d) $$
위 세가지 제어를 이용하여 일반적으로 PI 제어, PD제어, IP제어 PID 제어를 쓰게 되는데 어딘가 모자란 P 제어를 I 제어가 보충해주고 이 폭주기관차 I 제어를 D 제어가 억누르는 개념이다.
이 세 가지를 보통은 경험적으로 이것도 해보고 저것도 해보면서 적당한 값을 찾아 쓰면 된다. 일반적으로 P를 최대한 높여 시스템이 발광하기 직전에서 일정치를 빼고 마찬가지로 I 제어를 최대한 높여 시스템이 발광하기 시작하면 D 제어를 추가하여 발광하기 직전으로 튜닝을 해보자. 그러면 그럭저럭 쓸만한 녀석이 탄생한다.
다들 튜닝에 어려움을 많이 겪는데 이를 결정할 이론적인 방법이 있다!! (Ziggler Nichols 방법) 하지만 기대하지 말자. 세상에 저 방법으로 제어가 될 시스템이면 제어에 고민할 필요가 없다.
3.3.5. 한계 감도법
Ultimate Sensitivity Method
P, PI, PD, PID 제어를 할 때 사용되는 튜닝법으로 여러가지가 존재하지만, 여기서는 지금까지의 경험으로 만들어진 튜닝법을 소개한다. 개발자인 John G. Ziegler와 Nathaniel B. Nichols의 이름을 따서 Ziegler-Nichols Method라고도 불린다. 튜닝 순서는 다음과 같다.
1. 시스템이 안정에서 불안정으로 넘어가는 그 순간의 한계 게인을 Ku, 한계 주기를 Pu라고 한다.
2. 다음의 표를 참고하여 Kp, Ti, Td를 결정한다.
3.4. 2자유도 제어
PID제어 같은 피드백 제어 방식은 여러 환경에서 대처 가능하다는 장점이 있지만 피드포워드보다 느리다는 단점이 있다. (속응성이 낮다.) 이를 보완하기 위해, 처음에는 피드포워드로 제어한 다음에 피드백을 추가하는 것이다. 이러면 결과를 도출하는 속도가 빠르다는 feed-forward의 장점과 여러 환경에 대처 가능하다는 feedback의 장점을 모두 갖게 된다. 그래서 고전 제어 중에서는 가장 성능이 뛰어나다고 평가 받고 있다.
예를 들자면,
1. 선풍기 바람의 세기를 중간으로 설정한다.
2. 시원한 바람을 즐긴다.
3. 무언가의 이유로 선풍기 바람의 세기가 약함/강함으로 변경되면 다시 중간으로 바꾼다.
3.5. 기타 제어
대체로 PID 이상의 제어는 대학원 수준이므로 위키에서 설명하기는 힘들고 전문적인 제어 서적을 읽거나 인터넷을 검색하는 게 낫다.
Pole Placement, LQR, LQG 정도까지는 대학교에서 공업수학을 들어서 선형대수학, 미분방정식, 라플라스 변환, 푸리에 변환을 아는 정도면 충분하지만, Sliding Mode Control, Model Predictive Control, Nonlinear Control 을 알려면 미분기하학, 위상수학, Linear Matrix Inequailty 등 매우 어려운 수학이 사용된다.
3.5.1. LQR 제어
Linear quadratic regulator 의 약자.
특정한 양을 performance measure로 잡아주고 [9] 이를 최소화하는 컨트롤러를 설계하는 것. 흔히 최적제어론(optimal control)이라고도 하는데 이는 위에서 구한 컨트롤러가 performance measure를 최소화 시켜주기 때문이다.
- Linear: 선형이라서.
- Quadratic: performance measure는 계산을 간단하게 하기 위해 대개 제곱 꼴로 잡기 때문에 들어가는 수식어.
- regulator: 제어에서는 무언가를 줄여주는 행위를 regulate라고 한다. (에러, 불필요한 진동 등.)
참고로 이거랑 칼만 필터랑 합친 것을 LQG라고 한다. 얘는 linear quadratic Gaussian의 약자인데 칼만필터가 가우시안 분포를 써먹기 때문에 이런 이름이 붙었다. LQG에서는 칼만필터를 사용하기 때문에 유한시간 LQR은 못 써먹고 무조건 무한시간 LQR 밖에 안 된다. 그래야 리카티 이퀘의 솔루션이 상수가 되기 때문.
3.5.2. Sliding mode control (SMC)
모델링이 완벽하지 않고 불확실성(uncertainty)이 있을 때 사용하는 제어법이다. 1960년대에 소련에서 V. Utkin 등에 의해 고안되어 이후 미국과 서방세계로 전파되었다. 컨트롤러 구하는 방법은 다음과 같다. 먼저 desired trajectory와 시스템의 actual trajectory 간의 에러를 적당히 주물주물해서 슬라이딩 변수를 만든다. 이 슬라이딩 변수가 0을 유지하는 것을 슬라이딩 모드라고 하며 이러한 상태를 시스템이 슬라이딩 서피스에 있다고 한다. 이러한 상태에서 (즉 슬라이딩 변수가 0을 유지하는 상황에서) 에러가 0으로 수렴하도록 (그래프를 그려보면 슬라이딩 서피스 위를 굴러가서(sliding) 0에 도달하는 것처럼 보인다) 슬라이딩 서피스를 정의하는 것이 관건이다. 컨트롤러는 불확실성을 가지는 원래의 dynamics가 슬라이딩 서피스에 도달하도록 설계한다. 이후에는 이미 말했듯이 자동적으로 에러가 0으로 수렴.. 이때 필연적으로 불연속적인 signum 함수가 사용되는데 이러한 불연속성 때문에 제어 입력과 상태 벡터에 high-frequency oscillation, 즉 chattering이라는 현상이 일어난다. 이러한 chattering 은 의미 그대로 제어 출력이 반복적으로 파르르 떠는 현상을 말하는데, 이러한 현상이 적절히 감쇠되지 않으면 실제 기계에 반복적인 떨림을 발생시키고 이러한 떨림은 곧 기계의 물리적인 고장으로 이어질 수 있다. 따라서 이러한 chattering을 줄이기 위해서 signum 함수 대신 포화를 표현한 함수를 쓰거나 boundary layer 방법, high-order SMC 등의 방법이 고안되어 있다. 모델에 불확실성이 있을 때 제어하는 강인제어(Robust Control) 분야의 가장 대표적인 제어법이다.
4. 현실의 제어
일반적으로 제어하려는 대상의 특성을 알고 있기 때문에 Open-loop 제어를 하면 충분하다. 여기에 외란에 대해서 알고 있고 측정이 가능하면 추가적인 제어를 넣고 혹시 모르니 PID를 안전빵으로 넣는다. 사실상 대부분의 제어는 경험+PID만으로 거의 확실하게 가능하다.
예를 들어 자동차를 생각하면(제어 대상 중에 가장 골치 아픈 녀석 중 하나) 엔진 스로틀을 얼마 정도 밟으면 어느 정도 힘이 나온다는 것은 알고 있다. 이를 통해 크루즈 컨트롤을 한다고 할 때, 목표 속도가 있으면 그에 맞는 가속 페달 정보를 입력하면 끝이다(open-loop 제어). 하지만 세상은 그렇게 호락호락하지 않으며, 오르막 내리막이 있다.-- 오르막을 가면 차량 속도가 줄어들고 이를 보상하기 위한 경사도를 측정할 수 있다고 치자. 그러면 경사도 얼마에는 엔진 출력 얼마를 더해주면 된다는 정보를 통해 추가적인 입력을 넣어주게 된다. 하지만 그것이 다가 아니다. 바람이 앞에서 불거나 하면 속도가 줄어들 것이다. 이런 경우에는 PID 제어가 힘을 쓰게 된다. 줄어든 만큼의 속도를 보상하여 목표 속도에 맞게 제어를 한다.
다른 제어이론은 특수한 상황에 맞춰 특수한 경우에 사용하거나 반대로 좀 더 경험을 배제하고 모든 상황에 맞는 제어기를 위한 것이다.
예를 들어 하드디스크 모터제어는 매우 빠르고 정확해야만 한다. 이럴 경우에는 모든 동역학정보와 모델을 체계적으로 세워서 최선의 제어성능을 위해 LQR이라는 최적제어를 수행한다. 혹시 더 좋은 성능을 위해서는 Model Predictive Control이나 비선형성을 반영한 Sliding Mode Control을 활용할 수 있다.
아니면 새로운 비행기를 만드는데 경험이 하나도 없다. 그런데도 어느정도 제어가 가능해야 하는데 이를 위해서 경험없이 PID를 쓰면 상황에 따라 제어 불능에 빠지는 경우가 생긴다. 이를 방지하기 위해서 좀 더 넓은 범위의 제어가 가능한 LQG나 Sliding Mode Control을 사용하면 최적의 성능은 아니지만 어느 정도 안전한 제어 성능을 낼 수 있다.
[1] 여기서 말하는 시스템이 무엇인지를 간단하게 표현하면, 계, 즉 우주의 일부분 중 '입력'과 '출력'이 존재하는 모든 것들을 칭한다고 보면 된다. 예를 들면 유압회로, 전기전자회로, 기계장치, etc...[2] 화학 프로세스 공정에서는 열, 유체, 화공이 많이 쓰이고 자동차는 동역학 위주의 제어가 되고 정밀가공의 경우 재료역학, 동역학이 되고 모터는 회로이론, 전자기학이 된다.[3] 간단하게 말하자면 실수부 근이 음수여야 안정하다는 의미이다.[4] 예를 들면 라멘집에서 볼 수 있는 솥단지에 아래서는 물을 끓이고 위에서는 딱 증발량에 맞는 물을 흘려주는 것으로 정확하게 원하는 물의 온도와 물의 양을 유지할 수 있다.[5] 사실상 2도차이를 몸으로 느끼는 사람도 별로 없고 위치에 따라 나는 차이가 훨씬 크다.[6] stability 증명을 위해서는 PD컨은 두어줄이면 끝나지만 I가 까다롭다. 하지만 능력자들께서 모두 증명해 놓았으므로, 우리는 논문쓸 때 그냥 인용해버리면 끝이다. 예를 들면, "다음과 같은 시스템에서 PID 컨트롤러의 stability는 xxx 논문에서 증명되었으므로 생략한다."[7] 이를 제어에서는 외란 ''Disturbance'' 이라 한다[8] 물리에서는 질량, 열역학에서는 비열, 유체역학에서는 유량 등.[9] performance measure는 궤적의 에러크기로 잡는 게 가장 편하다. 하지만 사용자가 편리한 대로 어떤 cost나 에너지로 잡아도 무방하다.