PID 제어 개요
제어 개요
피드백 제어란?
- Process를 거쳐서 나온 Output이 Input에 영향을 미치는 Loop

- 질문
- 시속 60km/h로 달리려는 자동차가 있다.
- 자동차의 속도를 높이는 on/off 버튼이 있을때 피드백 제어를 하면 ?
피드백 제어
- 행동: 60km/h 이하일 때 스위치 on, 이상일 때 스위치 off
- 결과: 60km/h로 수렴하지 못하고 상당기간 진동하게 됨

단순 on/off 제어
- 계속해서 on-off를 반복함
- 출력값의 변화가 매우 큼
- 시간이 지나도 목표값과의 오차는 줄어들지 않음

PID 제어기
- 비례, 적분, 미분의 조합으로 적절한 값을 도출하는 기법
- 비례: Proportional
- 적분: Integral
- 미분: Differential
- 제어 대상의 목표값(desired value)과 출력값(output)과의 차이로 제어값을 계산

PID 제어 개요
- 주어 용어와 개념
- 오버슈트: 최종정상상태 값을 넘어서는 상승 오차
- 피크 시간: 가장 큰 overshoot가 발생했을 때 시간
- 상승 시간: Output의 0.1부터 0.9까지 이를 때 걸리는 시간
- 정착 시간: 최종 정상상태에 도달하는 시간

PID 제어 수식

내가 원하는 output이 나왔는데 이것을 피드백으로 받아서 내가 원하는 목표값과의 차이(에러)를 P,I,D에 각각 알려줌.
에러를 최소화 할 수 있는 방법의 결과물을 도출하고 그것을 프로세스에 전달해주면 output이 에러가 적어지는 방향으로 개선이됨
P제어(비례:Proportional)
I 제어(적분:Integral)
D제어(미분:Differential)
- PID 제어기가 없는 경우
- 원하는 결과값에 도달하지 못함
- 진동이 심함

- P-gain=1, I-gain=1, D-gain=1
- 목표하는 값에 도달하지만, 오버슈트가 발생하고 반응속도가 느림

- P-gain=5, I-gain=1, D-gain=1
- 오버슈트는 여전히 발생하지만, 빠른 응답속도를 가짐
- 정상상태 오차가 발생함

- P-gain=5, I-gain=2, D-gain=1
- 오버슈트는 커졌지만, 정상상태 오차가 없어짐(목표값에 수렴)
- 빠른 반응속도를 가짐

- P-gain=5, I-gain=2, D-gain=2.5
- 작은 오버슈트를 가지고, 정상상태 오차가 없음
- Output 그래프를 보면 알 수 있듯이 6.3%의 오버슈트를 가짐

PID 제어기 정리

P-gain 증가: 반응속도 빨라짐
I-gain 증가: 정상상태 오차 감소
D-gain 증가: 오버슈트 감소
이상적인 제어 결과
- 가장 이상적인 제어 결과는
- 빠른 응답속도를 가지며,
- 오버슈트가 발생하지 않고,
- 정상상태 오차가 발생하지 않는 것.
- gain값 사이의 trade-off 때문에 현식적으로 가능하지 않음
- 타협의 기준을 ()%이하의 오버슈트, ()sec의 정착시간 등으로 설정함
- 주록 5%이내의 오버슈트, 0.2초내의 정착시간을 설정함
PID 제어 기반 차량 조향각 제어
자율주행 자동차의 PID 제어
- 조향각 제어
- 목표 경로를 그대로 따라가기 위한 핸들 조작이 필요

핸들링을 위한 PID 제어의 목표
- CTE(Cross Track Error) 값을 0으로 만들기

P제어

파란색 선: 목표 궤적
현재 차량으로부터 목표 궤적까지의 거리 = CTE(Cross Track Error)

- gain값이 작으면 목표지점까지 가는데 시간이 오래 걸림
- 반대방향으로 브레이크를 빨리 밟지 못하기에 출렁거림이 발생하는 Underdamped 발생
- gain값이 크면 목표지점까지 가는데 시간이 짧게 걸림
- 브레이크가 너무 심하게 밟혀서 Overdamped 발생

I 제어


PID 제어를 이용한 차량 주행 제어(핸들링-운전)

목표 = controller로 차량을 제어해서 원하는 궤적에 갔는지 측정(gps,지도,mapping), 오차를 0으로 만들기
PID 제어기법을 이용한 자이카 주행 제어
자이카의 조향각 계산법
- 차량에 장착된 카메라 영상에서 차선의 위치를 파악
- 영상처리된 이미지의 하단부에서
- 관심영역(ROI 잘라내서 차선 위치 파악

- 인식된 양쪽 차선의 중점
- 카메라가 차량의 중앙에 위치하고 있다면
- 화면 중앙 지점과 거리차이에 따라 조향 정도를 설정
- 차량의 가운데가(=화면의 중앙이) 차선의 중앙 지점과 일치해야
- 차량을 움직여서 차선의 중간지점으로 옮겨야

PID 기반 조향각 제어
- 목표 지점으로 이동하기 위한 해들 꺾기
- CTE 값을 0으로 만들기 위한 작업
CTE = 화면의 중앙과 좌우차선의 중점 사이의 간격(차이)

파란색 점선: 차량의 현재 위치 -> 빨간색 선쪽으로 이동해야함
PID 알고리즘


Class PID 코드


PID를 이용한 조향각 설정 코드
- 화면의 중앙과 좌우 차선의 중점과의 차이를 (CTE(error))값으로 설정
- CTE(=error 변수 값)값을 인자로 넘겨 PID계산을 수행

자이카 모델의 PID 조정 실험 과정
- 우선 gain값을 임의로 설정
- P gain은 1이하, I gain은 매우 작게 0.001이하, D gain은 0.1이하로 설정.
통상적으로
P-gain은 0.5
I-gain은 0.0005
D-gain은 P gain의 1/10로 시작
- 값을 넣고 차를 구동시켜서 현상을 관찰하며 적절하게 gain값을 조정해야 함
- gain 값을 조장할 때에는 조금씩 조정해야함
- P-gain증가 P-gain 0.5 -> 10 (X)
- P-gain증가 P-gain 0.5 -> 0.55(O)
- (예시) P-gain=0.5, I-gain=0.0005, D-gain=0.05
- 차가 진동하면서 이동함
- 오버슈트가 발생하여 목표값 이상의 값을 만들기 때문에 발생하는 현상
- P-gain을 감소시켜서 오버슈트를 감소시켜야 함.
- (예시) P-gain=0.45, I-gain=0.0005, D-gain=0.05
- 차의 진동이 완화되었지만, 여전히 진동이 발생함
- D-gain값이 작아서 오버슈트를 줄이지 못하기 때문에 발생하는 현상임
- D-gain을 키워야함
- (예시) P-gain=0.45, I-gain=0.0005, D-gain=0.15
- 차의 진동은 잡았지만, 중앙선에서 벗어난 주행을 함
- 정상상태 오차가 발생하기 때문에 생기는 현상임
- I-gain을 증가시켜서 정상상태 오차를 감소시켜야 함
- (예시) P-gain=0.45, I-gain=0.0007, D-gain=0.15
- 속도를 높이면 PID 제어를 다시 해야 함
- 속도를 높이는 경우, 정착시간까지 반응이 일어나지 않기 때무에 I-제어기가 필요하지 않음
- 따라서 PD 제어기를 사용함
- P controller gain = 0.55
- D controller gain = 0.4
PID 응용 과제
자이카 모델 PID gain값 찾기
PID 기반의 주행속도 제어
- 정해진 속도까지 부드럽게 가속하기 위한 PID gain값 찾기
참고 사이트
안녕하세요 자율주행 차량의 조향각을 아두이노를 사용하여 모터제어를 통해 하려고 하는 대학생입니다.
작성하신 글에서는 target은 차선의 중앙 값 current_value는 화면의 중앙값이라고 하셨는데요
그러면 두개의 값이 모두 ' 픽셀의 위치 ' 인데 이 값들이 PID 제어를 통해 나온 Output을 모터에 어떻게 주셨나요?
조향 모터의 위치 혹은 속도를 통해 조향각을 틀어 차량이 target 값 까지 도달 하시게 하셨을 텐데 저 값을 모터제어 코드에서 어떻게 변환시켜 넣으셨는지 궁금합니다.