기본 콘텐츠로 건너뛰기

PID 제어 1편 P제어

현실의 내용을 반영해야 하는 로봇이나 피지컬 컴퓨팅의 경우 다양한 센서 부품을 사용하게 된다. 센서는 그 값을 아날로그 또는 디지털로 프로그램에 전달하는데, 이때 센서의 값을 효율적으로 이용함으로써 로봇과 피지컬 컴퓨팅 기기를 효율적으로 작동시킬 수 있다.
 이 글에서는 센서의 값을 효율적으로 이용하기 위해 가장 기초적으로 사용한다는 피드백 제어와 PID 제어에 대해서 이야기 하고자 한다.

어디에 쓰이는가.

 센서의 값을 움직임에 반영하는 거의 대부분의 기기에 활용된다. 예를 들어 에어컨의 온도조절, 드론의 수평잡기, 먼~ 예로 우주선의 착륙 등에 활용될 수 있다.

어떤 제어 과정을 거치는가

  위키백과 영문판을 구글링 해보면 PID feedbaack 컨트롤의 블럭 다이어 그램이 제시되어 있다.

PID feedback process
By Arturo Urquizo - http://commons.wikimedia.org/wiki/File:PID.svg, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=17633925
  다이어 그램의 PID는 각각 비율, 적분, 미분을 의미한다. 최초 r(t)라는 값은 지난번 처리된 y(t)와 함께 처리되어 e(t)가 되며 e(t)는 P,I,D세가지 과정을 거쳐 u(t)로 되고 다시 이것이 처리되어 결과인 y(t)가 된다. y(t)는 출력되거나 다음 번들어오는 r(t)의 처리를 위해 활용된다. 즉 r(t)의 값이 센서의 값이라면 이것은 PID의 과정을 거쳐 새로운 값이 되어 모터등의 작동에 반영되고 반영된 값은 다시 들어오는 센서값에 영향을 주게 된다는 의미이다.

라인트레이싱에서의 적용

On/Off알고리즘과 P제어

먼저, 라인트레이싱의 예로 P제어를 설명해보고자 한다.
 P는 proportion 비율의 첫 글자이다. 초등학교 로봇교육에서는 대부분 On/Off알고리즘을 활용하여 라인트레이싱을 구현하고 있다. 학생들이 선을 따라 주행하는 로봇을 만들기 위해 가장 기초가 되는 로봇이다. On/Off알고리즘은 검은색과 흰색의 경계값을 결정하고 센서의 값을 경계값과의 대소비교한 후 왼쪽 바퀴나 오른쪽 바퀴를 굴려 작동된다. (고등학교 로봇제어시스템에서는 경계값이라는 용어대신 문턱값이라는 용어를 사용한다.
문턱값은 검정색과 흰색을 구분짓는 센서 값 이라는 의미이다.)이때, On/Off알고리즘에 의하면 직진을 주행하는 행위는 없다. On/Off 알고리즘을 통해 작동하는 주행로봇의 경우 뒤뚱거리는 움직임이 나타나는 것이 특징이다.

P제어의 적용

 반면 P제어를 도입한다면 뒤뚱거리는 움직임을 조금이나마 줄일 수 있게 된다. P제어는 이름에서 나타나듯이 비율을 사용한다. 모터 속도의 비율을 제어할때, 센서의 값과 경계값(문턱값) 의 오차를 이용한다. 

P 제어를 위해 다음과 같은 프로그램이 제시될 수 있다..

1. 경계값 설정
2. P상수 설정
3. A,B모터의 속도 설정
4. 루프
loop(){
 error = 경계값과 센서와의 차
  A모터의 속도 + error * P상수 
  B모터의 속도 - error * P상수
}

A모터와 B모터는 각각 오차의 편차에 의해 속도가 결정된다.
오차가 매우 작으면 두 모터의 속도거의 같으므로 직진에 가깝게 작동한다.
오차가 음수가 되면 B모터의 속도는 증가하고 A모터는 감소한다.
마찬가지로 오차가 양수가 되면 B모터의 속도는 감소하며 A모터의 속도는 증가한다.

현재 이글은 사진자료가 없으며 이 글은 계속 수정될 수 있다.


참고글
https://kocoafab.cc/make/view/418
https://en.wikipedia.org/wiki/PID_controller
고등학교 로봇제어시스템 핸즈온러닝

댓글

이 블로그의 인기 게시물

PID제어 2편 I제어 - 잔류편차 없애기

  1편에서 설명한 P제어는 움직임의 효율을 크게 개선한다. P제어만 하더라도 초등학교 소프트웨어 교육에 적용한다면 학습자들이 로봇의 움직임을 구현하는데 만족도가 클 것이다. 그러나 엄밀하게 말하면 실제 목표값에 도달하지는 못한다.   실제 구현하게 되면 로봇은 일종의 진동운동을 하게 된다. 이 진동은 더 줄어들지 못하고 주행하는동안 계속 유지되는 일종의 "안정"된 상태를 유지한다.  그러나 만약 이안에 사람이 타승했다 가정하고 직진해야 하는 로봇이 계속 좌우 진동을 한다면 멀미가 날 것이다. "안정된 진동"현상을 개선하기 위해서는 특별한 방법이 필요하다. P제어에 I제어를 첨가한다. 로봇의 움직임을 상상하기 위해 탱탱볼로 비유해보고자 한다. 이 탱탱볼을 탄성계수가 매우 이상적인 형태로 원래 입사한 방향에 반사된다고 가정한다. 일단 ON/OFF제어를 이용한 탱탱볼은 다음 그림과 같이 움직일 것이다. 점선은 탱탱볼의 우리가 원하는 진행방향이고 아래 벽은 우리가 설정한 경계값, 그리고 위쪽 벽은 탱탱볼이 센서를 읽은 궤적이라 치자. 그리고 파란색 선은 탱탱볼이 실제로 움직인 모양을 표현했다. 이 비유는 약간의 오개념은 있지만 필자가 보기엔 그럭저럭 비슷하다. 만약 ON/OFF 제어를 P제어로 바꾼다면 이런 그림의 탱탱볼운동으로 바뀔것이다. 보라색 선은 오차를 계산해서 진행방향에 직진성을 더해가는 P제어의 지점들이다. 실제 경계선은 없지만 점선과의 거리에 의해  수정된 가상의 벽면이다. 이 벽면은 점점 그 거리가 오므라 드는가 싶더니만 마침내 평행하고 만다. 이렇게 평행한 상태의 오차를 "잔류편차" 또는 "잔차"라고 한다.  (용어를 정확히 알아두는 것은 중요하다고 생각한다. 왜냐하면 더 발전된 내용을 검색하거나 남에게 설명할때 시행착오의 여지를 없애기 때문이다.) 잔차의 원인은 필자의 생각에는 이렇다. 1. 샘플링 주기- 센서의 샘플링 주기가 잔차의...

하드웨어를 보호하는 4가지 보호 방법 (하드웨어 보호)

대학원 기말고사중 공부한 자료   운영체제에서 하드웨어 보호란 사용자가 불법적인 명령을 수행하려하거나 비정상적인 접근을 발생시키려 하면 이를 감지하고 하드웨어를 비정상적인 작동을 방지하는 방법을 말한다. 이중모드 연산 (Dual-Mode Opreration)    하드웨어 보호방법 중 가장 먼저 언급되는 방법은 연산모드를 2가지 모드로 나누어 실행하는 방법으로 Dual-Mode Operation 즉, 이중모드 연산을 이용하는 것이다. 이는 CPU에서 지원해야 가능한 것인데 사실 인텔 8088 이후의 cpu들은 거의 이중모드연산을 지원한다고 한다.  이중모드 연산은 사용자 모드와 커널모드로 나누어 지며 모드비트라고 하는 현재의 연산상태를 나타내는 비트를 통해 구분된다.   사용자 모드는 특별한 권한이 없는 연산, 커널 모드는 특별한 권한이 있는 연산이다.  사용자 모드로 진행되는 프로그램이 사용자 모드비트를 가지고 운영체제를 변경하거나 다른 사용자의 프로그램을 변경하려 하거나 자신의 메모리 공간이 아닌 다른 공간을 침해하려 할 경우 트랩이나 인터럽트를 발생시킨다. 이때 모드비트는 커널모드로 변경되며 운영체제가 제어권을 가진다. 이를 통해 운영체제가 적절한 처리를 한 후 사용자 프로그램으로 제어권을 넘기는 행위를 할 수 있다. + 커널모드는. 특권모드, 모니터 모드라고도 한다. 입출력 보호(I/O Protection) 입출력에 대한 불법적인 행위를 막는 것으로 모든 입출력은 특권모드로 정의된다. 사용자가 입출력 권한을 운영체제에 요구하고 운영체제는 이에 대한 결과를 사용자 프로그램에 넘겨준다. 즉 입출력에 대한 과정은 운영체제가 관장하도록 하는 것이 입출력 보호이다. 기억장치 보호(Memory Protection) 사용자 프로그램은 특정 메모리 영역과 크기를 할당 받는다. 자신에게 할당받은 영역이상의 행위를 할 경우 이를 막아야 다른 프로세스의 과정에 간섭이 일어나...