0에서 알 수 있는 PID 제어(실장편)

6394 단어 UdacityPIDControlC++
이 기사는 "0에서 알 수 있는 PID 제어"의 속편이다.
이번에는 C++로 PID 제어를 실시하고 시뮬레이터로 자동차를 운행시킬 계획이다.

문제 설정
목표는 어느 속도로 달리는 자동차와 도로 중심의 거리(Cross Track Error:CTE)를 핸들 각도로 좁히는 것이다.

PID 제어 설치
이것은 PID 제어의 설치 부분입니다. 눈썹 파일, 주 파일은 여기. 참조하십시오.
PID 제어는 다음 공식을 사용하여 작성할 수 있습니다.
steer = K_p cte + K_D \frac{d}{dt}cte + K_I \sum cte
#include "PID.h"
#include <iostream>

using namespace std;

PID::PID() {} //コンストラクタ

PID::~PID() {} //デストラクタ

void PID::Init(double Kp_, double Ki_, double Kd_) {
  Kp = Kp_; //比例ゲイン
  Ki = Ki_; //積分ゲイン
  Kd = Kd_; //微分ゲイン
}

void PID::UpdateError(double cte) {
  if(!init_d){
    init_d = true;
    d_error = cte;
    prev_cte = cte;
  }else{
    d_error = cte - prev_cte; //cteの変化量
    prev_cte = cte;
  }
  p_error = cte; //現在のcteの値
  i_error +=cte; //cteの合計
}

double PID::TotalError() {
  return -Kp*p_error - Ki*i_error - Kd*d_error; //上式のsteer
}
PID 제어에서
・현재 동작,
・cte의 변화량
동작의 합계
를 참고하십시오.
매개 변수 조정
PID 제어에서 $KP$,$K_I$,$K_D$를 설정해야 합니다. 여러 가지 방법이 있지만 적당한 값을 찾아야 합니다.
단계 1
$K_I$,$K_D$의 값을 0, $K로 설정합니다.P달러만 컨트롤합니다.
$K_P$의 값이 작으면 자동차의 진동은 작지만 목표에 도달하는 데 시간이 걸립니다P$P의 값이 너무 크면 자동차가 목표치를 초과하여 큰 진동을 일으킬 것이다.
단계 2
$K_D$.에 수치를 넣으세요. 다음은 미분 이득에 수치를 넣으세요.D$A가 작으면 아까와 큰 변화가 거의 없다. 너무 크면 핸들 각도의 변화가 작아져 제어할 수 없다. 적당한 값을 선택하면 초과 투입이 작아져 기본적으로 목표치를 따라 전진한다.
단계 3
이 에뮬레이터에서 $KI달러를 조정하지 않아도 제어할 수 있지만 적당한 값을 입력하면 목표치에 더 가깝다.
결실
이상의 매개 변수 조정이 끝난 결과는 여기.입니다.
또 영상에서는 자동차의 속도에 대해서도 95MPH를 목표치로 설정하는 PID 제어가 이뤄졌다.


심도 있는 학습 방법과 비교하다
예전에는 짙은 색으로 가르쳤다이 노선은 이미 운행되었다.
지난번에 이미지와 사람이 조작하는 핸들 각도의 양을 사용해서 CNN을 훈련시켰기 때문에 본 방법과 방법은 완전히 다르기 때문에 비교하고 싶습니다.
심도 있는 학습을 통한 방법
결점
・원활한 운행이 불가능하다.
• 고속 주행을 하려면 시동이 꺼져야 한다.
• 훈련에 시간이 걸린다
장점
· 도로의 기준선(차선의 중심)을 찾을 필요가 없다
• 미지의 노선이라도 대응 가능
PID 기반 제어 방법
결점
파라미터 조정이 어렵다
・도로의 기준선(차선의 중심)을 미리 정해야 한다.
장점
• 깊이 훈련된 수법보다 주행이 더 원활하다.
• 고속 주행 가능
이 시뮬레이터로 비교할 때 PID 제어의 실현은 더욱 간단하고 더욱 좋은 결과를 얻었다.
다만, PID가 제어하는 상황에서 CTE를 구하기 위해서는 도로의 기준선을 사전에 정해야 한다.
이 방법은 Path Plaanning 방법을 사용해야 합니다. 다른 한편, 깊이 있는 학습에서 Path Plaanning은 미리 경로를 찾을 필요가 없습니다.
감상
딥러닝의 기술 진화는 놀랍고 앞으로도 다양한 방법을 제시할 예정이다.
PID 제어는 고전적인 방법이지만 문제 설정이 간단하기 때문에 좋은 결과를 얻었다.
자율주행을 위해서는 딥러닝 등 최첨단 방법뿐 아니라 PID 제어 등 고전적인 제어 방법도 필요하다.
이 글에서 PID 제어에서 출력 목표치를 얻는 데 있어서 실제 입력치 사이의 시간차는 이번에 고려하지 않았다. 그러나 실제 자동차에 적응할 때 시간차도 적지 않다(사람이 순간적으로 핸들을 목표의 각도까지 자르지 못하기 때문이다). 이런 상황에서PID는 때때로 역할을 잘 발휘하지 못한다. 장래의 출력을 예측하는 방법 중 하나는 모델 예측 제어이다. 다음에 나는 모델 예측 제어를 이 시뮬레이터에 적응하고 싶다.

좋은 웹페이지 즐겨찾기