PID 기반 조향각제어

강형우·2022년 11월 23일
1

OpenCV

목록 보기
5/17

PID 제어 개요

제어 개요

  • Control 기법은 크게 2가지

    • Open Loop Control

      • Input을 주면 controller가 Process를 제어 -> 원하는 Output을 뽑아냄.
      • 그 결과가 어떻게 나왔는지 확인할 수 없음
    • Closed Loop Control

      • Process가 내가 원하는대로 제대로 Output을 내는지 Measuring Element를 통해 확인 한 후 Control Signal 수정 가능
      • 센서 등을 통해 데이터를 수집하고
      • 수집된 데이터를 기반으로 반복적인 피드백으로 제어하는 기법
      • 대표적인 Closed loop control 기법이 "PID control"

    • 컨트롤러가 시그널에 반응해서 액츄에이터를 기동시켜서 액츄에이터가 플랜트(제어하고자 하는 최종물체)에 영향을 미침

    • 그 플랜트가 결과값을 냄. 그것을 센서가 센싱을 해서 처음에 의도됐던바와 차이가 나면(에러) 에러가 발생했음을 컨트롤러에 알림. 목적했던 바와 현재 상태의 차이를 없애기 위해.

    • 그것이 PID control의 목표

피드백 제어란?

  • 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)

  • 피드백 제어신호가 오차에 비례하게 만드는 비례 제어기

    오차 x 상수


    오차가 크면 크게, 작으면 작게 하는 비례 제어기

  • Kp가 클때

    • 오차가 작아도 출력값이 크게 변함.
      - 장점: 빠른 응답속도를 가짐
      - 단점: 오버슈트(overshoot)가 발생함
  • Kp가 작을때

    • 오차가 작을수록 출력값이 작게 변함
      - 장점: 오버슈트(overshoot)가 적게 발생함
      - 단점: 느린 응답속도를 가짐
  • P 제어기만 사용할 경우

    • 정상상태 오차가 발생함
      • 정상상태 오차(steady-state error): 반응이 일정 수준에 정착한 이후에도 존재하는 오차
      • 정상상태 오차 = (일정시간이 지난 이후 출력값) - (목표값)
  • 예시: PID 제어기가 없을 경우

    • 목표값에 도달하지 않고, 진동이 심함
  • (예시) PID 제어기를 넣은 경우

    • P gain값을 작게 해보자(P-gain=1, I-gain=1, D-gain=1)
    • 목표값에 도달은 하지만, 오버슈트가 생김
    • 반응 속도가 느림
    • P gain값을 증가시켜보자(P-gain=5, I-gain=1, D-gain=1)
    • 반응 속도가 빨라짐
    • 그러나, 정상상태 오차가 발생함

I 제어(적분:Integral)

  • 적분을 이용하여 비례 제어에서 남아있는 오차를 제거하는 제어 방법

    • 출력값이 목표값에 빠르게 도달하고 수렴하게 함


      편차만큼의 차이를 빠르게 줄이고자 했던것이 P제어라면(반응속도를 줄임), I 제어는 편차를 모아(누적)목표값에 근접시킬 수 있다.
  • Ki가 클 때

    • 누적 오차가 빠르게 증가함
      • 장점: 빠른 응답속도를 가짐
      • 단점: 오버슈트(overshoot)가 크게 발생함
  • Ki가 작을 때

    • 누적 오차가 느리게 증가함
      • 장점: 오버슈트가(overshoot)가 작게 발생함
      • 단점: 느린 응답속도를 가짐
  • I 제어기를 사용할 경우

    • 정상상태 오차를 줄일 수 있음
    • 오차가 없는 상태에도 I 제어기에 남아있는 누적오차 때문에 제어값이 계속 발생함
      • 이 전에 남아있던 오차값때문에 제어값 발생
    • 따라서 PI,PID 제어기를 많이 사용함
  • (예시) PID 제어기를 넣은 경우

    • I gain값을 증가시켜보자.(P-gain=5, I-gain=2, D-gain=1)
    • 반응속도가 빨라지고, 정상상태 오차가 없어짐.
    • 그러나, 오버슈트가 크게 발생함

D제어(미분:Differential)

  • 미분을 이용하여 진동을 줄이고 안정성을 향상하는 제어 방법

    • 급격한 출력값의 변동이 발생할 때 급격하게 변하지 않도록 함
    • 오차가 상수일 경우 D제어기의 출력은 0이 되어 정상상태 오차를 줄일 수 없음
      • 일반적으로 단독으로 D제어기만 사용하지는 않음
    • 특정 신호가 급변하는 경우 미분 제어기의 출력이 급격하게 커져 시스템을 파괴하는 경우도 있음
  • Kd가 클 때

    • 장점: 오버슈트가(overshoot)가 작게 발생함
    • 단점: 신호가 급변하는 경우 시스템을 파괴할 수 있음
  • Kd가 작을 때

    • 장점: 신호가 급변하더라도 적절한 피드백을 할 수 있음
    • 단점: 오버슈트(overshoot)가 크게 발생함
  • D 제어기를 사용할 경우

    • 시스템의 안정도를 증가시킬 수 있음
    • 미분이 불가능한 오차인 경우, 적절한 제어가 되지 않을 수 있음
  • (예시)PID제어기를 넣은 경우

    • D gain값을 증가시켜 보자(P-gain=5, I-gain=2, D-gain=2.5)
      • D-gain이 1 -> 2.5
    • 오버슈트가 감소함

예시(input=1)

  • 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 제어


  • gain값이 작으면 궤적을 벗어난 후에 극복하는데 시간이 오래걸림

  • gain값이 크면 궤적을 벗어난 후에 원상태로 되돌아 가려고 심하게 핸들을 꺾다보니 출렁거림

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값 찾기
    참고 사이트

1개의 댓글

comment-user-thumbnail
2023년 9월 28일

안녕하세요 자율주행 차량의 조향각을 아두이노를 사용하여 모터제어를 통해 하려고 하는 대학생입니다.
작성하신 글에서는 target은 차선의 중앙 값 current_value는 화면의 중앙값이라고 하셨는데요
그러면 두개의 값이 모두 ' 픽셀의 위치 ' 인데 이 값들이 PID 제어를 통해 나온 Output을 모터에 어떻게 주셨나요?
조향 모터의 위치 혹은 속도를 통해 조향각을 틀어 차량이 target 값 까지 도달 하시게 하셨을 텐데 저 값을 모터제어 코드에서 어떻게 변환시켜 넣으셨는지 궁금합니다.

답글 달기