파이톤으로 PID 컨트롤 해보기
개시하다
최근에 나는 통제공학을 독학하기 시작했다.
이해를 깊이 있게 하기 위해 프로그램 설계로 실현하는 것이 가장 빠르다는 것이 나의 이념이다.
그래서 이번에는 파이톤으로 최근 배운 PID 제어를 실현한다.
또 이 글은 PID가 공정을 제어하고 제어하는 원리와 이론을 설명하지 않는다.
Python의 설치에만 주목합니다.
matplotlib과 numby를 사용합니다.
OS는 Ubuntu16입니다.04 및 MacOS High Sierra 1013 동작을 확인했습니다.
Python2.7, Python3.6의 두 동작.
당분간GitHub도 인코딩을 미리 올린다.
변수 설명
M: 조작량 부여
M1: 이전에 제시된 조작량
목적 값
e: 편차(목표 값과 현재 값의 차)
e1: 마지막 편차
e2: 이전 편차
Kp: 배율 제어(P 제어)의 배율 상수
Ki: 포인트 제어(I 제어)의 비례 상수
Kd: 미분 제어(D 제어)의 비례 상수
작업량(M) 계산 방법
조작량(M)의 계산 방법은 원래 미적 계산을 통해 조작량(M)을 계산하는 것이다.
그러나 이것은 거대한 계산이 필요하고 컴퓨터의 원래 본능 처리는 기본적으로 이산적인 수치이다.
따라서 샘플링 방식
M = M1 + Kp * (e-e1) + Ki * e + Kd * {(e-e1) - (e1-e2)}
를 참고하십시오.
프로그램 코드
그럼 드디어 프로그램을 쓸 거예요.
우선 필요한 모듈을 확인하세요.import numpy as np
from matplotlib import pyplot as plt
from numpy.random import *
다음은 주요 부분을 쓰세요.M = 0.00
M1 = 0.00
goal = 50.00
e = 0.00
e1 = 0.00
e2 = 0.00
Kp = 0.1
Ki = 0.1
Kd = 0.1
t = 100
M, M1, e, e1, e2는 처음에 0.00으로 설정됐다.
gooal은 목적치입니다. 이번에는 50.00으로 하겠습니다.
Kp, Ki, Kd는 매개변수입니다.처음에 상황을 보고 모두 0.10으로 설정했다.
수수께끼 같은 변수 t가 생겼습니다. 이것은 시간(t)입니다.for 문장의 순환 횟수를 설정합니다.
다음은 도표에 표시할 준비를 하세요.x_list = []
y_list = []
x_list.append(0)
y_list.append(0.00)
x_list에 시간이 있습니다 (t).
y_list에 부여된 작업량 (M) 이 포함되어 있습니다.
시간(t)이 0일 때 조작량은 0.00이기 때문에 for문장을 사용하여 회전하기 전에 목록에 저장합니다.
그리고 마침내 PID 제어에 들어갔다.
말은 그렇지만 방금 샘플링 방식을 대체하는 공식일 뿐이다.for i in range(1,t):
M1 = M
e2 = e1
e1 = e
e = goal - y_list[i-1] #偏差(e) = 目的値(goal) - 前回の操作量
M = M1 + Kp * (e-e1) + Ki * e + Kd * ((e-e1) - (e1-e2))
x_list.append(i)
y_list.append(M)
편차(e)의 계산 방법은 제어 대상에 따라 다를 수 있으니 주의하십시오.
한 마디로 하면 현재 (목적치) 와 (지난번에 준 조작량) 의 차이를 편차 (e) 로 한다.
마지막으로 도표로 보여 주세요.plt.hlines([goal], 0, t, "red", linestyles='dashed') #ゴールを赤色の点線で表示
plt.plot(x_list, y_list, color="b") #青色でグラフを表示
plt.ylim(0, goal*2) #グラフの高さを調整
plt.show()
처음의 계단차가 조금 신경 쓰이지만 곡선이 너무 예뻐서 목적치에 도달했다고 생각해요.
매개 변수를 바꿔보세요.
Kp, Ki, Kd를 각각 0.01과 0.50으로 바꾸어 보았다.
Kp = Ki = Kd = 0.01
매개 변수가 0.01인 경우 목표 값인 50.00에 도달할 수 없습니다.
Kp = Ki = Kd = 0.5
파라미터가 0.50일 때 수치가 수렴되지 않아 오리털모자가 발생한다.
소음 버전
무작위로 소음을 넣어 보세요.
코드가 GitHub로 높아집니다.
최후
간단하지만 파이톤으로 PID 제어를 해봤어요.
이번에 Kp, Ki, Kd의 매개 변수는 모두 같은 값으로 설정되어 실제적으로 각 매개 변수를 상세하게 조정해야 한다.
2018/07/03선생님, 편집 요청 감사합니다.
미리 참고한 사이트를 게재하다.
모터의 PID 제어법
[너무 잘 알아] PID 컨트롤의 기본.(유튜브 비디오)
소스 코드는 GitHub 위에 있습니다. 참고하십시오.
Reference
이 문제에 관하여(파이톤으로 PID 컨트롤 해보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/BIG_LARGE_STONE/items/4f8af62b3edc4a03c4a5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
M: 조작량 부여
M1: 이전에 제시된 조작량
목적 값
e: 편차(목표 값과 현재 값의 차)
e1: 마지막 편차
e2: 이전 편차
Kp: 배율 제어(P 제어)의 배율 상수
Ki: 포인트 제어(I 제어)의 비례 상수
Kd: 미분 제어(D 제어)의 비례 상수
작업량(M) 계산 방법
조작량(M)의 계산 방법은 원래 미적 계산을 통해 조작량(M)을 계산하는 것이다.
그러나 이것은 거대한 계산이 필요하고 컴퓨터의 원래 본능 처리는 기본적으로 이산적인 수치이다.
따라서 샘플링 방식
M = M1 + Kp * (e-e1) + Ki * e + Kd * {(e-e1) - (e1-e2)}
를 참고하십시오.
프로그램 코드
그럼 드디어 프로그램을 쓸 거예요.
우선 필요한 모듈을 확인하세요.import numpy as np
from matplotlib import pyplot as plt
from numpy.random import *
다음은 주요 부분을 쓰세요.M = 0.00
M1 = 0.00
goal = 50.00
e = 0.00
e1 = 0.00
e2 = 0.00
Kp = 0.1
Ki = 0.1
Kd = 0.1
t = 100
M, M1, e, e1, e2는 처음에 0.00으로 설정됐다.
gooal은 목적치입니다. 이번에는 50.00으로 하겠습니다.
Kp, Ki, Kd는 매개변수입니다.처음에 상황을 보고 모두 0.10으로 설정했다.
수수께끼 같은 변수 t가 생겼습니다. 이것은 시간(t)입니다.for 문장의 순환 횟수를 설정합니다.
다음은 도표에 표시할 준비를 하세요.x_list = []
y_list = []
x_list.append(0)
y_list.append(0.00)
x_list에 시간이 있습니다 (t).
y_list에 부여된 작업량 (M) 이 포함되어 있습니다.
시간(t)이 0일 때 조작량은 0.00이기 때문에 for문장을 사용하여 회전하기 전에 목록에 저장합니다.
그리고 마침내 PID 제어에 들어갔다.
말은 그렇지만 방금 샘플링 방식을 대체하는 공식일 뿐이다.for i in range(1,t):
M1 = M
e2 = e1
e1 = e
e = goal - y_list[i-1] #偏差(e) = 目的値(goal) - 前回の操作量
M = M1 + Kp * (e-e1) + Ki * e + Kd * ((e-e1) - (e1-e2))
x_list.append(i)
y_list.append(M)
편차(e)의 계산 방법은 제어 대상에 따라 다를 수 있으니 주의하십시오.
한 마디로 하면 현재 (목적치) 와 (지난번에 준 조작량) 의 차이를 편차 (e) 로 한다.
마지막으로 도표로 보여 주세요.plt.hlines([goal], 0, t, "red", linestyles='dashed') #ゴールを赤色の点線で表示
plt.plot(x_list, y_list, color="b") #青色でグラフを表示
plt.ylim(0, goal*2) #グラフの高さを調整
plt.show()
처음의 계단차가 조금 신경 쓰이지만 곡선이 너무 예뻐서 목적치에 도달했다고 생각해요.
매개 변수를 바꿔보세요.
Kp, Ki, Kd를 각각 0.01과 0.50으로 바꾸어 보았다.
Kp = Ki = Kd = 0.01
매개 변수가 0.01인 경우 목표 값인 50.00에 도달할 수 없습니다.
Kp = Ki = Kd = 0.5
파라미터가 0.50일 때 수치가 수렴되지 않아 오리털모자가 발생한다.
소음 버전
무작위로 소음을 넣어 보세요.
코드가 GitHub로 높아집니다.
최후
간단하지만 파이톤으로 PID 제어를 해봤어요.
이번에 Kp, Ki, Kd의 매개 변수는 모두 같은 값으로 설정되어 실제적으로 각 매개 변수를 상세하게 조정해야 한다.
2018/07/03선생님, 편집 요청 감사합니다.
미리 참고한 사이트를 게재하다.
모터의 PID 제어법
[너무 잘 알아] PID 컨트롤의 기본.(유튜브 비디오)
소스 코드는 GitHub 위에 있습니다. 참고하십시오.
Reference
이 문제에 관하여(파이톤으로 PID 컨트롤 해보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/BIG_LARGE_STONE/items/4f8af62b3edc4a03c4a5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
그럼 드디어 프로그램을 쓸 거예요.
우선 필요한 모듈을 확인하세요.
import numpy as np
from matplotlib import pyplot as plt
from numpy.random import *
다음은 주요 부분을 쓰세요.M = 0.00
M1 = 0.00
goal = 50.00
e = 0.00
e1 = 0.00
e2 = 0.00
Kp = 0.1
Ki = 0.1
Kd = 0.1
t = 100
M, M1, e, e1, e2는 처음에 0.00으로 설정됐다.gooal은 목적치입니다. 이번에는 50.00으로 하겠습니다.
Kp, Ki, Kd는 매개변수입니다.처음에 상황을 보고 모두 0.10으로 설정했다.
수수께끼 같은 변수 t가 생겼습니다. 이것은 시간(t)입니다.for 문장의 순환 횟수를 설정합니다.
다음은 도표에 표시할 준비를 하세요.
x_list = []
y_list = []
x_list.append(0)
y_list.append(0.00)
x_list에 시간이 있습니다 (t).y_list에 부여된 작업량 (M) 이 포함되어 있습니다.
시간(t)이 0일 때 조작량은 0.00이기 때문에 for문장을 사용하여 회전하기 전에 목록에 저장합니다.
그리고 마침내 PID 제어에 들어갔다.
말은 그렇지만 방금 샘플링 방식을 대체하는 공식일 뿐이다.
for i in range(1,t):
M1 = M
e2 = e1
e1 = e
e = goal - y_list[i-1] #偏差(e) = 目的値(goal) - 前回の操作量
M = M1 + Kp * (e-e1) + Ki * e + Kd * ((e-e1) - (e1-e2))
x_list.append(i)
y_list.append(M)
편차(e)의 계산 방법은 제어 대상에 따라 다를 수 있으니 주의하십시오.한 마디로 하면 현재 (목적치) 와 (지난번에 준 조작량) 의 차이를 편차 (e) 로 한다.
마지막으로 도표로 보여 주세요.
plt.hlines([goal], 0, t, "red", linestyles='dashed') #ゴールを赤色の点線で表示
plt.plot(x_list, y_list, color="b") #青色でグラフを表示
plt.ylim(0, goal*2) #グラフの高さを調整
plt.show()
처음의 계단차가 조금 신경 쓰이지만 곡선이 너무 예뻐서 목적치에 도달했다고 생각해요.
매개 변수를 바꿔보세요.
Kp, Ki, Kd를 각각 0.01과 0.50으로 바꾸어 보았다.
Kp = Ki = Kd = 0.01
매개 변수가 0.01인 경우 목표 값인 50.00에 도달할 수 없습니다.
Kp = Ki = Kd = 0.5
파라미터가 0.50일 때 수치가 수렴되지 않아 오리털모자가 발생한다.
소음 버전
무작위로 소음을 넣어 보세요.
코드가 GitHub로 높아집니다.
최후
간단하지만 파이톤으로 PID 제어를 해봤어요.
이번에 Kp, Ki, Kd의 매개 변수는 모두 같은 값으로 설정되어 실제적으로 각 매개 변수를 상세하게 조정해야 한다.
2018/07/03선생님, 편집 요청 감사합니다.
미리 참고한 사이트를 게재하다.
모터의 PID 제어법
[너무 잘 알아] PID 컨트롤의 기본.(유튜브 비디오)
소스 코드는 GitHub 위에 있습니다. 참고하십시오.
Reference
이 문제에 관하여(파이톤으로 PID 컨트롤 해보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/BIG_LARGE_STONE/items/4f8af62b3edc4a03c4a5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
무작위로 소음을 넣어 보세요.
코드가 GitHub로 높아집니다.
최후
간단하지만 파이톤으로 PID 제어를 해봤어요.
이번에 Kp, Ki, Kd의 매개 변수는 모두 같은 값으로 설정되어 실제적으로 각 매개 변수를 상세하게 조정해야 한다.
2018/07/03선생님, 편집 요청 감사합니다.
미리 참고한 사이트를 게재하다.
모터의 PID 제어법
[너무 잘 알아] PID 컨트롤의 기본.(유튜브 비디오)
소스 코드는 GitHub 위에 있습니다. 참고하십시오.
Reference
이 문제에 관하여(파이톤으로 PID 컨트롤 해보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/BIG_LARGE_STONE/items/4f8af62b3edc4a03c4a5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(파이톤으로 PID 컨트롤 해보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/BIG_LARGE_STONE/items/4f8af62b3edc4a03c4a5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)