본문 바로가기
만들기/아두이노

[밸런싱로봇] PID 제어 이해하기 (1)

by 훨훨날아 2021. 6. 25.

밸런싱로봇을 만들면서 로봇이 넘어지지 않도록 모터를 컨트롤 하기위해 PID 제어가 사용되었다. PID 제어는 피드백제어의 일종으로 현재상태와 이전상태의 차이를 고려하여 시스템을 제어하는 방법이다. PID는 각각 비례(proportional), 적분(Integral) 그리고 미분(Derivative)제어를 나타낸다. 

위 식은 PID제어를 수학적으로 나타낸 것으로 왼쪽부터 비례제어(P), 적분제어(I) 그리고 미분제어(D)를 나타낸다. 각 K 상수에 따라 시스템에 미치는 영향력을 조절할 수 있다.

비례제어(P)

비례제어는 목표값과 현재값의 차이를 계산하고 그 오차에 비례하여 시스템의 움직임을 조절하는 제어방법이다. 예를 들어, 바닥에 있는 드론을 50m 상공에 위치시킨다고 생각해보자 드론이 공중에 정지해 있기 위해서는 모터가 500rpm으로 작동해야할때 드론을 위아래로 움직이기 위해서는 500rpm 에서  + 혹은 - 해서 움직임을 조절해야한다. 여기에서 rpm은 제어값에 비례상수를 곱하고 드론의 위치는 초당 500을 기준으로 rpm의 10분의 1만큼 변한다고 생각한다. ( 예를들어, 제어값이 50이고 Kp가 2면 rpm이 100증가하여 600이 되고 드론은 10m 움직인다.) 

먼저, 현재의 오차를 계산하면 50 - 0 으로 50이라는 값을 가지게 된다. Kp 값이 2일때, 제어값은 2*50 이되고 변화된 rpm은 100이 증가하여 600rpm이 된다. 그래서 1초뒤에는 증가rpm의 10분의 1만큼인 10m가 증가했다. (피드백 루프가 한번 만들어졌다)

두번째 제어를 할때, 드론의 위치는 10m 이고 목표값 50m와의 차이는 40m가 된다. 여기에 Kp 2 를 곱하면 80이 나오고 500에 80을 더해서 580 rpm으로 모터의 속도를 변경시킨다. 그럼 드론은 1초뒤 8m를 상승하게 되어 18m 에 위치한다.

세번째 제어를 할때, 드론의 위치는 18m 이고 목표값 50m와의 차이는 32m, 여기에 Kp 2 를 곱하면 제어값이 64가 되고, rpm은 564로 변경되어 1초뒤 6.4m가 상승하여 24.4m이 위치하게 된다.

같은 방법으로 계속해서 제어를 하게되면, rpm의 변화는 점점 줄어들면서 목표값인 50에 점점 도달하게 된다.

Kp가 2일때

이때, Kp 값을 증가시키면 좀 더 빠르게 목표값에 도달 할 수 있다.

비례제어는 오차에 비례하여 제어값을 수정하기 때문에 간단하고 직관적으로 조절할 수 있지만 오차값이 0이 되지 않고 계속해서 작아지기만 한다. 이때를 정상상태라고 하며 이를 보완하기 위해 미분제어를 같이 사용한다.

 

 

참고

https://ko.wikipedia.org/wiki/PID_%EC%A0%9C%EC%96%B4%EA%B8%B0

 

PID 제어기 - 위키백과, 우리 모두의 백과사전

PID 제어기의 일반적인 구조 다양한 PID 파라미터 (Kp, Ki, Kd)가 시스템의 응답에 미치는 영향[1] 비례-적분-미분 제어기(Proportional-Integral-Differential controller) 또는 PID 제어(PID control)는 실제 응용분야

ko.wikipedia.org

 

반응형