제어

제어 Control, 기계, 전자과의 최종 보스

1 소개

제어 이론, Control Theory, 기계들을 원하는 방향으로 작동하게 만드는 학문의 총칭이고 기계과 또는 전기/전자과에 진학하게 된다면 극복해야 하는 최종 보스. 이를 수행하는 공학 분야를 제어공학이라고 한다. 인간 능력 이상의 정밀한 작업이나, 인간의 힘으로 할 수 없는 작업 등을 기계가 할 수 있게 하는 핵심적인 역할을 하는 학문으로, 원자력 발전, 항공우주, 로봇, 병기, 공장 자동화, 교통 시스템등 공돌이가 출동할 일이 있으면 언제나 함께 하는 현대 과학 문명의 기둥과도 같은 존재.

앞서 말했듯이 어떤 특정 기계나 전자 시스템을 원하는 상태로 유지시키거나 가게 만드는 것이 제어 이론의 목적이다 (예를 들면 A 상태에 있는 시스템을 B 상태로 가게 만든다거나, 여러 외부 요인을 무시하고 A인 상태를 유지하게 만들거나 등등). 백문이불여일견 공돌이가 문자 쓰려니 참 힘들다 닥치고 봐보자

이 과목에서 모델링의 중요성을 깨달을 수 있다. 진동해석에서 63빌딩을 빔으로 볼 수 있는가, 서스펜션을 스프링댐퍼 시스템으로 볼 수 있는가와 같은 문제를 많이 다루며, 그 시스템의 반응과 PID , SMC를 통한 제어방법에 대하여 배운다. 개념의 물리적 이해가 받쳐주면 그닥 어렵지는 않다. 온갖 현대 수학 개념이 필요하다는 건 함정

학부 수준에서는 매트랩을 이용한 전달함수 구하기, Steady-state model 세우기 같은 것도 배운다.말이 좋아 배우기지 사실 MATLAB Demo 따라하기

2 시스템 모델링

제어를 하기 위해서는 먼저 시스템의 특성을 파악해야 한다.

이를 위해서 시스템에 대해 해석할 수 있는 능력과 기본적으로 물리적 현상을 수학적으로 표현하는 능력, 그리고 제어 대상에 대한 학문의 이해가 필수적이다. 활용되는 이론들은 회로이론, 전자기학, 동역학, 열역학, 재료역학, 유체역학, 화학공학 등이 주로 시스템을 해석되는데 사용되고 이를 통해 물리적 현상을 수학적 모델을 기반으로 제어이론에 접목하게 된다.
물론 저걸 다하는 건 아니고 필요한 것만 사용하게 된다.저걸 다 배우려면 전자공학, 기계공학, 화학공학 세 가지의 학위가 필요하다. [1]

결과적으로 시스템을 모델링 한다는 것은 미분방정식에 대한 이해와 함께 전기, 유공압, 기계와 같은 모델을 수학적으로 해석할 수 있는 시스템에 대한 선행 학습을 필요로 한다. 또한 이러한 미분방정식에 대한 해석을 보다 쉽게 하기 위해서는 라플라스 변환과 푸리에 변환을 이해하고 있어야 한다.

2.1 전달 함수

Transfer Function 이라 불리우며, 라플라스 변환 S-domain을 이용하여 미분방정식을 대수방정식으로 바꾼 식

TF= 출력(Y(s))/입력(R(s)) 이며, 이는 다항식 / 다항식으로 표현된다.

분모의 다항식 q(s) =0 이 되는 점을 극점이라 하며 , 이 식을 특성 방정식 (character equation) 이라 한다.
분자의 다항식 p(s) =0 이 되는 점을 영점이라 한다.

특성방정식은 시스템의 특성을 나타내며, 극점은 좌반면(복소수 평면상에서)에 있어서 stable (안정) 하다라고 할 수 있다.

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도 이런 류의 제어라고 할 수 있다. 그냥 밸브만 달려있는 수도꼭지도 일종의 유량제어라고 할 수 있다.

이런 제어의 장점은 무지 쉽다는 점이다. 최종 결과에 대해서는 뭐 튜닝으로 적절히 조절하면 되니까. 단점은 상황판단을 못한다. 뭐 가스불 위에 있는 곰국이 숯덩이가 되는지 수도꼭지 아래 있는 물통이 넘치든지 상관없이 입력을 준다. 이게 무슨 제어야 그냥 입력을 넣는 거지라고 생각할 수 있지만 가장 기본적인 제어이다. 그래서 보통은 사람이나 외부에서 피드백을 하는 것을 볼 수 있다. 샤워기의 물을 적정온도로 맞추기 위한 끊임없는 노력은 훌륭한 인간피드백의 예라고 할 수 있다.

하지만 정확히 시스템을 알고있는 경우에는 무엇보다 훌륭한 결과를 낼 수 있다[2]

3.2 On-Off 제어

그냥 켰다 끄는 제어이다. 가장 간단한 피드백제어로 너무나 단순하고 간단한 이 제어까지가 우리가 일상적으로 볼 수 있는 제어 방식이다. 예를 들면 현관 등에서 사람이 지나가면(입력) 불을 켜고(출력) 입력변화가 없으면(입력) 불을 끈다(출력). 기본적인 온도제어도 다 이런 방식이다. 히터의 경우 기준보다 추우면(입력) 켜고(출력) 더우면(입력) 끈다(출력).

이보다 좀 더 나아간 것이 히스테리시스 제어인데 이는 다음과 같은 상황을 방지하기 위함이다. 만약 20도가 적정온도인 냉장고에서 정확히 20도에 해당하는 온도가 되었을 때 무슨일이 벌어질까? 모든 세상의 온도 측정에는 노이즈가 있다. 20도라 해도 지금 측정하면 20.1도인데 0.1초 후에 측정해보면 19.9도 이다. 그러면 결과적으로 0.1초마다 입력을 받는 시스템에서는 0.1초 또는 그에 상응하는 시간 간격으로 냉각기를 켰다 껐다 한다. 그러면 어떻게 되는지는 어렸을 때 집 전등으로 싸이키 조명을 켰던 것을 생각하면 된다.(전기세 + 형광등 수명단축 +어머니의 등짝 스매시) 그래서 켜질 때는 20도 보다 낮게, 꺼질 때는 21도 정도로 유지하는 시스템을 구현한다[3]
물론 0.1도를 다투는 정밀 화학공정에서는 그런 것 없다

3.3 PID 계열

PID제어는 시스템의 정보가 필요없는 컨트롤러 기반 제어기법이다. 간편하기 때문에 실제 공학분야에서 가장 많이 쓰이는 제어 방법이다. 보통 사람들은 이 방식으로 제어되는 것은 접하지 못한다. 사실 PID만 해도 상당히 고급제어이고 이 이상 가는 이론의 경우는 실제 산업이나 공정 제어분야에서도 잘 사용하지 않기 때문에 접할 기회는 많지 않다. 다만 요즘 차량의 크루즈 컨트롤 중 고급 사양에는 쓰이고 있는 듯 하다. PID 제어는 P제어 I 제어 D제어의 합쳐진 형태인데 각 제어에 대한 설명은 다음과 같다.

3.3.1 P 제어

Proportional 제어 (비례 제어)
[math] \displaystyle Kp(s) = Kp [/math]
간단하게 설명하자면 목표와 지금 상태의 차이가 나는 만큼 제어입력을 넣는 것이다.

난방을 예로 들면 10도 에서 20도로 가열할 때 10에 해당하는 가열을 하고 만약에 15도에서 20도 가열할 때는 5에 해당하는 가열을 하는 것이다. 이 방법의 단점은 차이가 적어지면 적어질수록 20도로 가는 것이 어렵고 심지어는 영원히 도달하지 않을 수 있다.

만약 가열하는데 옆에 제어 1단위의 냉방기가 있다면[4] 19도에서 1단위의 난방을 해도 결과적으로 입력은 0인지라 19도에 수렴한다. 사실상 제어에 있어 이런 경우가 대부분이라 정밀제어에서는 P제어만을 사용하지 않는다. 하지만 오차에 민감하지 않은 경우 가장 기본적인 피드백 제어 방법으로 이러한 제어로도 충분하다.

3.3.2 I 제어

Integral 제어 (적분 제어)
[math] \displaystyle Kpi(s) = Kp + {Ki \over s} = Kp(1 + {1 \over Ti*s}) [/math]
앞서 말한 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도에 이르게 된다는 치명적인 단점이 있다. 게다가 이 입력에 대한 가중치가 과하다면 점점 증폭하여 폭주(제어에서는 발산이라 한다)하게 된다는 점을 잘 생각해야 한다. 이런이런, 소방차는 빨간불에도 멈추지 않아 Boy♂♥

3.3.3 D 제어

Derivative 제어 (미분 제어)
[math] \displaystyle Kpd(s) = Kp + Kd*s = Kp(1 + Td*s) [/math]

폭주하는 제어를 잠재우기 위한 미분제어다. 예를 들어 미친듯이 입력값을 높여서 온도가 -10도에서 한번에 10도로 한번에 +20도가 올라갔다고 하자. 그러면 다음 결과는 30도가 될 것이라 생각할 수 있다. 이런 상황을 방지하기 위해서는 이런 20도가 증가했다는 사실에 대해 -10정도에 해당하는 입력을 빼주어야 한다. 대부분의 시스템은 관성이라는 개념이 존재한다.[5] 따라서 좀 미리 입력을 줄여놓아야 정확하고 빠른 제어가 가능하다. 하지만 이런 제어에도 단점이 있는데 고만해, 미친놈들아! 제어가 느려진다. 목표치에 도달할 때 좀 더 스무스하게 도착하도록 하는 대신에 제어 성능이 좀 느려지는 경향이 있다. 하지만 이러한 제어를 하는 이유는 시스템의 상태가 좀더 안정적으로 수렴한다는 데 있다.

예를 들어 비행기가 착륙하는데 (목표 고도가 0m) 빠르다고 최단거리로 지상에 접근하면.... 더 이상의 자세한 설명은 생략한다. 착륙하는데 고도를 천천히 낮추어야 비행기가 안전하게 착륙하듯이 우리의 일반적인 제어대상도 마찬가지이다. 따라서 이러한 D 제어도 마찬가지로 필요하다.

3.3.4 PID 제어

[math] \displaystyle Kpid(s) = Kp + \frac{Ki}{s} + Kd*s = Kp(1 + {1 \over Ti*s} + Td*s) [/math]

위 세가지 제어를 이용하여 일반적으로 PI 제어, PD제어, IP제어거꾸로 썼다고 다른제어가 됨 PID 제어를 쓰게 되는데 어딘가 모자란 P 제어를 I 제어가 보충해주고 이 폭주기관차 I 제어를 D 제어가 억누르는 개념이다.

이 세 가지를 보통은 경험적으로 이것도 해보고 저것도 해보면서 적당한 값을 찾아 쓰면 된다. 일반적으로 P를 최대한 높여 시스템이 발광하기 직전에서 일정치를 빼고 마찬가지로 I 제어를 최대한 높여 시스템이 발광하기 시작하면 D 제어를 추가하여 발광하기 직전으로 튜닝을 해보자. 그러면 그럭저럭 쓸만한 녀석이 탄생한다.

다들 튜닝에 어려움을 많이 겪는데 이를 결정할 이론적인 방법이 있다!! (Ziggler Nichols 방법) 하지만 기대하지 말자. 세상에 저 방법으로 제어가 될 시스템이면 제어에 고민할 필요가 없다.

3.3.5 한계 감도법

P, PI, PD, PID 제어를 할 때 사용되는 튜닝법으로 여러가지가 존재하지만, 여기서는 지금까지의 경험으로 만들어진 튜닝법을 소개한다. 이 방법은 Ultimate Sensitivity Method 라고도 불리며, 튜닝 순서는 다음과 같다.

1. 시스템이 안정에서 불안정으로 넘어가는 그 순간의 한계 게인을 Ku, 한계 주기를 Pu라고 한다.
2. 다음의 표를 참고하여 Kp, Ti, Td를 결정한다.

컨트롤러K(P)T(I)T(D)
P0.5Ku--
PI0.45KuPu/1.2-
PID0.6Ku0.5PuPu/8

3.4 2자유도 제어

위에서 소개한 PID제어는 충분히 우수한 제어 방법이지만 세상의 요구가 점점 더 엄격해져서 나오게된 제어법이다. 간단히 말하자면 피드포워드 + 피드백으로 이루어져 있다.
이해를 돕기위해 예를들자면,

1. 선풍기 바람의 세기를 중간으로 설정한다.
2. 시원한 바람을 즐긴다.
3. 무언가의 이유로 선풍기 바람의 세기가 약함/강함으로 변경되면 다시 중간으로 바꾼다.

이런 식이다. PID제어 같은 피드백 제어 방식은 여러 환경에서 대처 가능하다는 장점이 있지만 피드포워드보다 느리다는 단점이 있다. (속응성이 낮다.) 이를 보완하기 위해, 처음에는 피드포워드로 제어한 다음에 피드백을 추가하는 것이다.

결과적으로 2자유도 제어는

1. 결과를 도출하는 속도가 빠르다. (피드포워드의 장점)
2. 여러 환경에 대처 가능하다. (피드백의 장점)

의 이유로 고전 제어에서는 가장 성능이 뛰어나다고 평가 받고 있다.

3.5 기타 제어

Pole Placement, LQR, LQG, Sliding Mode Control, Model Predictive Control Nonlinear Control 등
나머지를 기타에 넣는 이유는 PID 이상 쓸 거면 이미 대학원 수준 이상일 테고 그러면 눈앞에 책장에서 제어 서적을 한 권 꺼내서 펼쳐보면 된다. 정 귀찮으면 인터넷에 검색하면 수많은 관련 내용들이 나온다.[6] [7]

3.5.1 LQR 제어

Linear quadratic regulator 의 약자. 퍼포먼스 메져 (performance measure)라는 양을 정하고 (이건 사용자 맘대로다. 퍼포먼스 메져를 에너지로 잡아도 되고 어떤 cost로 잡아도 되고. 느낌 가는대로 잡아준다. 물론 닥치고 궤적의 에러크기로 잡는 게 편하긴 하다) 이를 최소화하는 컨트롤러를 설게하는 것을 LQR 제어라고 한다. 제어에서는 무언가를 줄여주는 행위를 regulate라고 하는데 (에러를 줄이든, 불필요한 진동을 줄이든 뭐든지 간에) 여기서 regulator라는 이름이 나왔다. 또한 퍼포먼스 메져는 대게 제곱 꼴로 잡기 때문에그러면 계산이 겁나 쉽거든 quadratic 이라는 수식어가 들어간다. 그리고 생겨먹은 꼴이 선형이기 때문에 linear 가 들어간다. LQR 제어는 1)시스템의 상태방정식 구하고 2)퍼포먼스 메져 정하고 3)리카티 미방 풀면 끝이다. Donald Kirk 책이 볼만하다. 흔히 최적제어(optimal control)이라고도 하는데 이는 위에서 구한 컨트롤러가 퍼포먼스 메져를 최소화 시켜주기 때문이다.

참고로 이거랑 칼만 필터랑 합친 것을 LQG라고 한다. 얘는 linear quadratic Gaussian의 약자인데 칼만필터가 가우시안 분포를 써먹기 때문에 이런 이름이 붙었다. LQG에서는 칼만필터를 사용하기 때문에 유한시간 LQR은 못 써먹고 무조건 무한시간 LRQ 밖에 안 된다. 그래야 리카티 이퀘의 솔루션이 상수가 되기 때문.

3.5.2 Sliding mode control

간단히 SMC라고 한다. 컨트롤러 구하는 방법은 다음과 같다. 먼저 desired trajectory 와 시스템의 actual trajectory 간의 에러를 적당히 주물주물해서 슬라이딩 서피스를 만든다. 이를 virtual mechanical energy 라는 양으로 바꾸고 이 양이 항상 줄어들게 만듦으로써 SMC를 설계할 수 있다. 즉 1)시스템의 상태 방정식 구하고 2)슬라이딩 서피스 설계하고 virtual mechanical energy로 변환 3)컨트롤러 유도 참 쉽죠?
간단히 말하면 시스템의 state가 desired trajectory 밖으로 벗어나면 한대씩 툭툭 쳐서 desired trajectory를 따라가게 하는 컨트롤러다. 미니카를 원하는 곳으로 몰기 위해서 막대기로 툭툭 쳐서 조종하는 것을 SMC에 비유할 수 있다.

4 현실의 제어

경험 + PID면 대부분 끝이다.

일반적으로 제어하려는 대상의 특성을 알고 있기 때문에 Open-loop 제어를 하면 충분하다. 여기에 외란에 대해서 알고 있고 측정이 가능하면 추가적인 제어를 넣고 혹시 모르니 PID를 안전빵으로 넣는다.

예를 들어 자동차를 생각하면(제어 대상 중에 가장 골치 아픈 녀석 중 하나) 엔진 스로틀을 얼마 정도 밟으면 어느 정도 힘이 나온다는 것은 알고 있다. 이를 통해 크루즈 컨트롤을 한다고 할 때, 목표 속도가 있으면 그에 맞는 가속 페달 정보를 입력하면 끝이다(open-loop 제어). 하지만 세상은 그렇게 호락호락하지 않으며, 오르막 내리막이 있다.인생은 언제나 오르막 내리막 오르막을 가면 차량 속도가 줄어들고 이를 보상하기 위한 경사도를 측정할 수 있다고 치자. 그러면 경사도 얼마에는 엔진 출력 얼마를 더해주면 된다는 정보를 통해 추가적인 입력을 넣어주게 된다. 하지만 그것이 다가 아니다. 바람이 앞에서 불거나 하면 속도가 줄어들 것이다. 이런 경우에는 PID 제어가 힘을 쓰게 된다. 줄어든 만큼의 속도를 보상하여 목표 속도에 맞게 제어를 한다.

사실상 대부분의 제어는 이걸로 거의 확실하게 가능하다.

다른 제어이론은 뭐냐고? 그것은 특수한 상황에 맞춰 특수한 경우에 사용하거나 반대로 좀 더 경험을 배제하고 모든 상황에 맞는 제어기를 위한 것이다.

뭔소리인고 하면 하드디스크 모터제어는 정말 빠르고 정확해야만 한다. 이럴 경우에는 모든 동역학정보와 모델을 체계적으로 세워서 최선의 제어성능을 위해 LQR이라는 최적제어를 수행한다. 혹시 더 좋은 성능을 위해서는 Model Predictive Control이나 비선형성을 반영한 Sliding Mode Control을 활용할 수 있다.

아니면 새로운 비행기를 만드는데 경험이 하나도 없다. 그런데도 어느정도 제어가 가능해야 하는데 이를 위해서 경험없이 PID를 쓰면 상황에 따라 제어 불능에 빠지는 경우가 생긴다. 이를 방지하기 위해서 좀 더 넓은 범위의 제어가 가능한 LQG나 Sliding Mode Control을 사용하면 최적의 성능은 아니지만 어느 정도 안전한 제어 성능을 낼 수 있다.
  1. 화학 프로세스 공정에서는 열, 유체, 화공이 많이 쓰이고 자동차는 동역학 위주의 제어가 되고 정밀가공의 경우 재료역학, 동역학이 되고 모터는 회로이론, 전자기학이 된다.
  2. 예를 들면 라멘집에서 볼 수 있는 솥단지에 아래서는 물을 끓이고 위에서는 딱 증발량에 맞는 물을 흘려주는 것으로 정확하게 원하는 물의 온도와 물의 양을 유지할 수 있다.
  3. 사실상 2도차이를 몸으로 느끼는 사람도 별로 없고 위치에 따라 나는 차이가 훨씬 크다.
  4. 이를 제어에서는 외란 Disturbance 이라 한다
  5. 물리에서는 질량, 열역학에서는 비열, 유체역학에서는 유량 등.
  6. 이 설명을 위해서는 선형대수를 시작으로 미분방정식, 라플라스 변환, 푸리에 변환을 설명해야 하고 (이미 대학교 졸업자들 수준인데다가 저걸로는 앞에 세개밖에 설명 못해) 뒤에는 미분기하학, 위상수학, Linear Matrix Inequailty를 비롯하여 보기만해도 뇌세포가 파괴되는 수학 이론이 사용된다. (사실 PID도 제대로 증명하고 쓰려면 으앙 쥬금)
  7. stability 증명을 위해서는 PD컨은 두어줄이면 끝나지만 I가 까다롭다. 하지만 능력자들께서 모두 증명해 놓았으므로, 우리는 논문쓸 때 그냥 인용해버리면 끝이다. ex) 다음과 같은 시스템에서 PID 컨트롤러의 stability는 아무개 논문에서 증명되었으므로 생략한다. 이런 식으로...