hyein's 로봇 알고리즘 연구소

고전 제어의 절대 강자 PID Control(제어) A to Z - 1 편 본문

Robotics Control Theory/Classical Control

고전 제어의 절대 강자 PID Control(제어) A to Z - 1 편

hyein14 2020. 9. 6. 17:32

안녕하세요. :)

 

글을 올리다 보니 'hyein's 로봇 알고리즘 연구소'에 제어에 관한 글을 아직 한번도 올리지 않은 것 같아 이번 포스팅은 고전 제어의 절대 강자 PID제어에 대해 다뤄보려고합니다.

 

많은 분들이  "강인 제어(robust control)나 최적 제어(optimal control)과 같은 어려운 제어 다 필요없어!  PID 제어만 알면 되! 튜닝은 노가다야 노가다!" 라는 말을 많이 들어보셨을 거예요. 저 또한 학교에 있을 때도 그렇고 현업에서도 종종 듣는 이야기네요. 그만큼 매우 simple하지만 파워풀한 녀석입니다. 새로운 제어기와의 성능을 비교할때 기준이 되는 녀석이기도 하지요.

 

이런 이야기가 나오는 이유는 시스템 모델(Plant Model)을 모르더라도 P, I, D값들을 heuristic하게 값을 변경하며 제어 할 수 있기 때문인것 같네요. 물론, 산업적으로 P, I, D 값을 어떤식으로 정하라는 가이드('Ziegler-Nichols Method')가 있기도 합니다. 이런 방법은 운이 좋으면 한번에 제어가 잘되기도 하지만, 운이 좋지 않으면 끊임없는 튜닝의 늪에 빠진답니다.. ^^..

 

이번 PID Control(제어) A to Z 시리즈는 아래와 같이 진행이 될 예정입니다.

 

                1편. PID 개념 및 heuristic 튜닝

                2편. 모델을 기반으로 PID 튜닝 (고전 제어의 관점)

                3편. 오토튜닝에 대한 간략한 소개

 

2편인 모델 기반 제어는 라플라스 도메인과 system의 pole의 개념을 사전 지식으로 알고 계셔야 좋습니다. State-Space domain에서의 PID제어는 현대 제어이기 때문에 Modern control에서 추후에 다루도록 하겠습니다.

 

1.  제어란?

 

 시스템의 상태를 원하는 목표치로 도달하게끔 만드는 과정을 우리는 제어라고 부릅니다. 휠 로봇이라면 바퀴의 회전 각도(엔코더 값), 바퀴의 속도가 시스템의 상태가 될 수 있고, 로봇 팔이라면 로봇 팔 관절의 각도나 토크 값이 시스템의 상태가 될 수 있습니다. 시스템의 상태를 ${x}$, 원하는 목표치를 ${x_d}$라고 한다면 제어는 결국 유한한 시간 내에 다음과 같이 되겠죠? Plant는 우리가 관심있는 시스템(드론, 로봇 팔, 바퀴 로봇 등) 입니다.

 

 

2.  PID 제어 개념

 

 직관적으로 현재 시스템의 상태와 목표치 값의 차이를 error라고 정의한다면, error가 커질수록 시스템에 더 큰 입력(u)을 넣고, error가 작아질 수록 더 작은 입력(u)을 넣으면 합당하겠죠? 이렇게 PID제어는 error, err 적분, err 미분에 게인(P, I, D)를 곱한 값을 제어의 입력으로 넣는 방법입니다.

 

비례 제어(Proportional gain)

 

 가장 직관적으로 에러값에 비례해서 주는 제어입니다. 이러한 방법은 초반에 에러가 클 경우 빠른 시간 내에 원하는 에러를 줄여주는 역할을 합니다. 하지만 에러가 줄었음에도 여전히 에러에 비해해서 값을 주기때문에 목표치를 초과하는 현상이 나타납니다. 이를 오버슈팅(overshooting)이라고 합니다. 또 계속 에러값에 비례해서 값을 주기 때문에 잔류 에러가 있습니다. 비례 게인은 형태도 그렇고 흔히 물리 시스템에 비유를 할때, 스프링으로 비유를 합니다. 

 

 

② 적분 제어(Integral gain)

 

 비례 제어의 단점을 보완하기 위한 제어 방법입니다. 에러의 적분값에 비례해서 시스템에 입력을 주어 잔류 에러는 줄이는 방법입니다. 만약에 일정한 값이 목표치였다면(ex) 엔코더 값이 30도로 일정) PI제어는 효과적일 것입니다. 하지만, 갑작스러운 값의 변화가 생기거나 에러의 누적이 점차 쌓여만 간다면, 적분 게인에 의한 값이 커지게되어 시스템의 발산을 유발하기 쉽습니다. 혹시 여러분들의 PID제어가 발산을 한다면 I 텀을 의심해 보세요~ 이러한 누적에 의한 발산을 막기 위해 적분 게인은 적분 값을 초기화 한다는 등의 anti-wind up기법들을 사용합니다.

 

 

③ 미분 제어(Derivative gain)

 

 미분 제어는 보통 안정성을 높이는 역할로 생각을 하면 좋습니다. 다음 포스팅(2편)에서 이야기할 모델 기반제어를 보시게 되면 왜 D gain이 시스템의 안정성을 높이는지에 대해 이해하기 쉬울 거예요. 에러의 변화량이 급격해지면 더 큰 입력을 주고, 에러의 변화량이 작다면 더 작은 입력을 주는 것 또한 직관적이죠? 미분값은 미래의 값을 알 수 없으므로 물리적으로 구현할 수 없는 제어기이기도합니다. 그래서 보통 현재 에러와 과거의 에러값으로 미분값을 구합니다. 그리고 짧은 샘플링 시간이나 갑작스러운 변화(외부 충격 등)로 인한 미분으로 인해 튀는 현상이 있을 수 있어 보통 앞에 Low-pass filter를 달고 사용하기도 합니다. 미분 게인은 형태나 기능적인 면에서 흔히 물리 시스템에 비유를 할때, 댐퍼로 비유를 많이 합니다.

 

 

목표치에 빠른 수렴을 위한 P 게인, 잔류 에러를 줄이기 위한 I 게인, 안정성을 높이기 위한 D 게인을 적절하게 조합하는 것이 PID 제어 입니다. 이 중 어 떤 게인 값들을 사용했느나에 따라 PID 제어, PI제어, PD제어, P제어와 같은 이름이 붙습니다. PID 제어를 예로 들으면 다음과 같은 입력을 시스템에 주면 되겠죠?

 

여기서 P 게인(${K_p}$)으로 식을 묶었을 때 나타나는 ${T_i}$는 integral time, ${T_d}$는 derivative time이라고 부릅니다. 맨 마지막 표기 방법을 시뮬레이션 툴(Matlab, Labview 등)에서 많이 사용합니다.

 

3. 지글러 니콜라스 방법(Ziegler-Nichols Method)을 통해 PID 게인 튜닝하기

 

 PID 의 개념을 이해했으니 게인 튜닝을 해야하는 데 이것이 참 난감합니다. 아마 모터 제어나 드론 제어를 할 때 노가다 형식으로 이것 저것 바꾸어 보면서 튜닝을 하신 분들은 이 이야기에 공감을 하실 거예요. ^^;

모델에 대한 정보가 없을 때 사용할 수 있는 방법이 바로 지글러-니콜라스 방법(Ziegler-Nichols Method)입니다. 이 방법으로 ${K_p}$, ${T_i}$, ${T_d}$에 대한 값을 얻을 수 있습니다.

 

 처음에 P제어기만 사용하여 비례 게인(P 게인)을 0부터 ${K_{cr}}$까지 올립니다. 만약 모터 제어를 한다고하면, P 제어를 했을 때 모터의 엔코더 값이 아래와 같이 진동이 나타나는 시점의 게인이 있을 겁니다. 그 게인을 ${K_{cr}}$이라고 합니다. 그리고 이 진동의 주기를 ${P_{cr}}$이라고 하면 아래의 표과 같이 컨트롤러의 타입(P 제어, PI 제어, PID제어)에 따라 게인값을 구할 수 있습니다.

 

 

 

이와 같은 튜닝 방법만으로 모든 제어가 잘 된다면 해피하겠지만, 현실은 그렇지 않습니다. 제어를 할 때, 필수적으로 보아야 되는 지표가 1) 성능(Performance)과 2) 외란에 대한 안정성(Stability)입니다. 성능은 말 그대로 시스템의 상태가 목표치에 부합한 정도를 나타냅니다. 그리고 시스템에 외란이 가해져도 발산하지 않는 것이 안정성(Stability)입니다. 이런 분석은 다음 시리즈에 이어지는 모델 기반으로 분석이 이루어져 가능합니다. 다음 2편에서 위와 같은 내용들을 다루어 보도록 하겠습니다. 감사하겠습니다. :)

 

혹시 궁금한 점들이 있다면 아래 댓글에 남겨주세요~ (혹은 PID 제어에서 다른 관점으로 다루었으면 하는 내용들이 있다면 추가해서 다뤄보겠습니다.

Comments