언제나처럼, 스스로를 이해시켜서 나중에 써먹기 위해 쓴 글입니다. (기계과나 전기과에서 배우는 내용인 듯 한데... 논문 읽다보면 종종 튀어나와서...) 사용된 근거의 정확성이나 이론적 무결성은 보장하지 않습니다. 이 분야에 대해 정말 써먹을 수 있는 지식이 필요하신 분은 신뢰할만한 textbook을 참고하세요.
제어이론이 뭔가요?
제어이론은, 굉장히 여러가지 요소를 가진 예측하기 힘든 시스템을(미쿡말로는 dynamic system이라고 합니다.) 1. 의도한 대로, 2. 안정적으로 움직이게 하기 위한 공학이론입니다.
단도직입적으로, 운전자가 직접 운전하지 않고 컴퓨터가 알아서 운전하는 자동차가 있다고 생각해 봅시다. 운전자는 직접 핸들을 잡고 엑셀을 밟아 자동차를 운전하는 것이 아니라, 사용자가 원하는 속도를 입력하면 그 속도를 유지하며 달리게 됩니다. 운전자가 자동차에게 "시속 60km로 달려라" 하고 명령을 내렸다고 합시다. 자동차의 속력에는 많은 요소가 작용하지만, 엔진의 스로틀(엔진에 연료를 분사하는 비율을 조절하는 밸브 정도로 이해하시면 됩니다)이 가장 큰 역할을 할 겁니다. 예를 들어 스로틀이 연료를 초당 50mg의 비율로 분사하면 자동차의 속도가 60km/h가 되는 걸로 실험실에서 대충 계산이 나왔다고 합시다.
그러면 자동차를 원하는 속도로 달리게 하고 싶을 때 생각할 수 있는 가장 간단한 방법은, 운전자가 원하는 속도 60km/h를 입력하면(외부입력) 사전에 계산된 어떤 방정식을 통해서(컨트롤러) 그에 맞는 스로틀의 비율인 초당 50mg으로 자동차를 제어(출력)하는 겁니다. 이렇게 외부입력만을 받는 가장 간단한 시스템을 feed-forward controller라고 합니다.
그러면 그냥 스로틀을 초당 50mg으로 고정시키면 자동차의 속력이 정확히 60km/h가 나오느냐... 그건 아닙니다. 오르막길에서는 엔진의 힘이 같더라도 속도가 느려질 것이고, 내리막길에서는 더 빨라질 거구요, 비포장도로에서는 또 느려질 거고, 고속도로에서는 좀더 빨라질 겁니다. 그 밖에도 공기저항이라든지, 도로가 비에 젖어서 마찰력이 적다던지 하는 수많은 상황이 발생할 수 있는데, feed-forward controller는 이런 종류의 외부 상황 변화에 대해 반응할 방법이 전혀 없다는 것이 단점이죠.
그러면 좀더 똘똘한 컨트롤러를 생각해봅시다. 사용자가 원하는 속도 60km/h를 입력하면, 스로틀을 초당 50mg으로 일단 맞춰놓고 달려봅니다. 그런데 오르막길에다 도로 상황도 별로 좋지 않아서 속도가 40km/h 정도밖에 안 나오네요. 그러면 스로틀을 조금씩 더 열어 더 빠른 속도를 냅니다. 그러면 점점 속도가 올라 60km/h가 되겠죠. 그러면 그 상태로 스로틀을 유지하는 거죠. 어 그런데 길이 내리막으로 바뀌었군요. 속도가 빨라집니다. 그러면 더 빨라진 속도를 입력으로 받은 컨트롤러는 다시 서서히 스로틀을 닫아 속도를 줄입니다. 그러면 다시 60km/h에서 속도가 안정되겠죠.
이렇게 자동차의 속도(출력)를 다시 컨트롤러(복잡한 톱니바퀴로 스로틀을 제어하는 기계일 수도 있고, 아니면 자동차에 탑재된 조그만 컴퓨터일 수도 있겠죠.)에게 입력으로 주어 (피드백, 우리말로는 되먹임) 컨트롤러가 스로틀(출력)을 더 늘리거나 줄일 수 있도록 한다면, 자동차의 속도를 외부 환경에 큰 영향을 받지 않도록 안정적으로 제어할 수 있습니다. 이런 간단한 되먹임 시스템을 피드백 컨트롤러라고 합니다.
피드백 컨트롤은 사실 모든 생물이 자기 자신을 제어할 때 사용하는 테크닉이기도 하고, 엔지니어들이 오래 전부터 사용해온 테크닉이기도 합니다. 그럼 제어이론(control theory)이라는 거창한 이름이 붙은 이유는 뭐냐... 이 피드백 시스템을 수학적으로 잘 모델링하려는 거죠. 피드백 시스템을 보다 안정적으로 유지하며, 갑작스런 외부 요인으로 시스템이 요동을 쳐도 다시 원래 상태를 회복할 수 있도록 (영어로는 robust하다고 합니다.) 하는 안전한 컨트롤러를 설계하는 것이 제어이론의 목표입니다.
PID 컨트롤러
피드백 시스템중에 (비교적) 이론적으로 간단하고 실제로 제일 많이 응용되는 것은 PID 컨트롤러라고 합니다. 이 PID 컨트롤러에 초점을 맞춰 설명을 해보죠.
PID 컨트롤러에게는 입력(자동차 예제로 설명하면 사용자가 원하는 속도 60km/h) r(t)이 주어집니다. 그냥 고정된 값 r이 아니라 r(t)인 이유는 이 값이 시간 t에 따라 변할 수 있기 때문이죠. 이 값을 입력으로 받은 컨트롤러는 시스템을 제어(이 경우 자동차 스로틀을 바꾸겠죠)하고, 거기에 따라서 시스템의 전체 출력(자동차의 속도) y(t)가 변할 겁니다. 이 시스템을 완벽하게 컨트롤한다면 r(t)와 y(t)는 같은 값이 되겠지만, 실제로 그렇지는 않을 거고 약간의 차이가 존재하겠죠. 이 차이를 e(t) = r(t) - y(t) 라고 합시다.
PID 컨트롤러는 이 e(t) 값에 어떤 상수를 곱하고(Proportional : 비율이라는 뜻이죠) 적분(Integral)을 하고 미분(Derivative)을 한 값을 컨트롤러에게 다시 되먹여서 시스템을 제어한다고 해서 PID 컨트롤러라 부릅니다. 만약에 여기서 적분값 I를 쓰지 않는다면 PD 컨트롤러, D를 쓰지 않는다면 PI 컨트롤러, 그냥 결과값에 상수만 곱해서 되먹인다면 P 컨트롤러가 됩니다.
수식으로 쓰면,
이런 식이 됩니다. 여기서 Kp, Ki, Kd는 각각 적당한 상수가 되겠죠.
이때 컨트롤러는 구동장치(actuator : 시스템을 실제로 작동시키는 장치. 우리의 예제에서는 스로틀이 되겠죠)를 u만큼 움직여서 시스템을 조절하는데, PID 컨트롤러의 경우 이 u 값이 u = P + I + D 가 되는 것이죠.
P, I, D의 계수 Kp와 Ki, Kd는 각각 시스템의 안정성에 일정한 영향을 미칩니다.
Kp는 이 경우 시스템이 오차 e에 얼마나 빠른 속도로 반응하는가를 결정합니다. 자동차 예제에서, 극단적으로 Kp가 0이라면 컨트롤러는 전혀 시스템에 반응하지 않고, 따라서 자동차는 전진하지 않겠죠. 반대로 Kp가 매우 크다면? 정지상태에서 사용자가 60km/h라는 값을 입력했을 때 급가속하여 순식간에 60km/h에 가까워질 겁니다. 그러나 안정적으로 60km/h를 유지하지 못하고 상하로 요동이 심해집니다.
Ki는 안정상태에 들어선 시스템이 미세한 오차를 얼마나 빨리 제거하는가를 결정합니다. Ki가 0인 시스템은 안정 상태에서도 정확히 입력값에 다가서지 않고 지속해서 요동칩니다. 그러나 반대로 Ki가 너무 크면 Kp의 경우와 마찬가지로 시스템이 불안정해지죠
Kd는 시스템이 얼마나 빨리 안정상태에 들어서는가를 결정합니다. Kd가 큰 시스템은 금방 요동을 멈추고 안정 상태에 들어섭니다. 반면에 Kd가 너무 크면 입력값에 도달하는 속도가 느려지죠.
이런 시스템의 안정성에 대해 자세히 논하려면 라플라스 이론이라는 것을 알아야 하는데, 공학수학을 대충 배워서 -_- 라플라스 이론에 대해서는 자세히 모르는고로 이 부분은 스킵하겠습니다.
이게 어디에 도움이 되나요?
어려워 보이지만, 사실 PID 컨트롤러는 의외로 주변 곳곳에서 발견됩니다. 위에서 예로 든 자동차의 속도조절장치는 물론이고, 하드 디스크의 헤드 제어, 파워 서플라이의 전압 조절, 정교한 전자식 지진계 같은 곳에도 쓰입니다. 같은 이론을 스프링과 지렛대를 이용한 기계장치에까지 적용하면 포크레인 같은 대형 건설장비에 사용되는 제어 시스템도 일종의 PID 컨트롤러입니다.
ps. 재미는 없지만 지켜야 할 라이선스 문제 :
위 내용의 대부분은 영문 wikipedia를 적당히 편집한 결과입니다. 따라서 자동적으로 이 문서는 GFDL 라이선스를 따릅니다. 이 내용을 가져가서 재배포하실 때는 반드시 이 문서가 GFDL 라이선스를 따른다는 것을 명시하셔야 하며, 이 내용을 수정/변경하실 때는 그 결과물 또한 GFDL 라이선스를 따라야 합니다.
이 글은 스프링노트에서 작성되었습니다.
'로그 > 전공' 카테고리의 다른 글
| SSH 터널링으로 사설망 리눅스 PC 접속하기 (0) | 2009/02/05 |
|---|---|
| 리눅스에서 소스 패키지 설치/제거하기 (4) | 2008/02/27 |
| 제어이론(control theory)에 대한 간단한 요약 (1) | 2007/11/26 |
| 재미있는 연구결과, 그리고 파이썬 놀이 (1) | 2007/02/28 |
| image morphing 과제 (0) | 2006/04/17 |
| 스도쿠 (7) | 2005/06/08 |
