Ẹyọ 5 / 9

Awọn alugoridimu Iṣakoso: PID ati Atunse Atilẹyin AI

Awọn anfani:

  • Agbara lati ṣalaye ati lo awọn ofin P, I, D ati awọn ipa ti oludari PID si AI pẹlu ipo ti o tọ
  • Agbara lati ṣe Ziegler-Nichols ati awọn ọna iṣatunṣe idanwo ni igbese nipa igbese pẹlu iranlọwọ ti AI
  • Agbara lati ṣe idanimọ ati imukuro awọn ẹgẹ PID gẹgẹbi afẹfẹ isunmọ, ariwo itọsẹ ni awọn iṣeduro AI

Mimu iwọn otutu ti adiro nigbagbogbo, wiwakọ iyara ọkọ ayọkẹlẹ ni iye ti o fẹ, iwọntunwọnsi igun ti drone; Ni okan ti gbogbo wọn jẹ algorithm iṣakoso kan. O wọpọ julọ ninu iwọnyi ni oludari PID, eyiti o jẹ ẹhin ti ile-iṣẹ naa. PID; O rọrun, logan ati ṣiṣẹ lori ọpọlọpọ awọn iṣoro. Ṣugbọn "rọrun" ko tumọ si "rọrun lati tune": PID ti a ṣeto ti ko tọ yoo yiyi, yiyi pada, joko ni pẹ, tabi di riru patapata. Oye itetisi atọwọdọwọ jẹ oluranlọwọ ti o niyelori nibi: o ṣe alaye awọn ofin PID, awọn itọsọna nipasẹ awọn ọna titunṣe, ṣe iwadii awọn ọfin aṣoju ati kọ koodu atunṣe. Sibẹsibẹ, atunṣe ikẹhin ni a ṣe nipasẹ wiwo ihuwasi ti ara ti eto rẹ ati ipinnu iduroṣinṣin jẹ ti ẹlẹrọ. Ninu ẹyọ yii a bo bii o ṣe le fi sii, tune, ati rii daju awọn ẹgẹ PID pẹlu AI.

Awọn ofin PID mẹta

PID ṣe idahun si ifihan agbara aṣiṣe (e = ibi-afẹde - iwọn) ni awọn ọna mẹta:

igba

Kini o wo?

Ipa

ni iwọn

P (iwọn)

lọwọlọwọ aṣiṣe

iyara esi

Oscillation, yẹ aṣiṣe

I (apapọ)

Akojo ti o ti kọja aṣiṣe

Tun aṣiṣe yẹ

overshoot, windup, oscillation

D (itọsẹ)

Oṣuwọn iyipada ti aṣiṣe

Damping din overshoot

Mu ariwo pọ si

Akopọ ọrọ: P dahun si awọn ibeere “bawo ni MO ṣe jinna ni bayi”, “Bawo ni MO ṣe pẹ to”, D “bawo ni MO ṣe yara to”. A ti o dara oludari iwọntunwọnsi gbogbo awọn mẹta.

kilasi PID: def __init__ (ara, Kp, Ki, Kd, output_min = -100, output_max = 100): self.Kp, self.Ki, self.Kd = Kp, Ki, Kd self.out_min, self.out_max = output_min, output_max self.integral = 0.0 self .error = 0.0 self .previous. aṣiṣe = afojusun - won # P p = self.Kp * aṣiṣe # I --self.integral pẹlu windup Idaabobo += aṣiṣe * dt i = self.Ki * self.integral # D -- derivative noise kókó d = self.Kd * (aṣiṣe - self.previous_error) / dt self.previous_error = aṣiṣe jade = p + i + d # Saturate ti ara ẹni ti o ba wu jade. self.out_max self.integral -= asise * dt # anti-windup: yokuro isejade elif ti ara <self.output_min: output = self.output_min self.integral -= aṣiṣe * dt ipadasẹhin igbejade

Koodu yii kii ṣe “PID ikẹkọ”, ṣugbọn egungun ti o sunmo imọ-ọrọ iṣelọpọ: o pẹlu itẹlọrun iṣelọpọ ati egboogi-windup. Ọpọlọpọ awọn PID ti o rọrun ti a fun nipasẹ AI fori awọn aabo meji wọnyi; Laisi wọn, nigbati oluṣeto ba de opin rẹ, ohun elo yoo wú ati pe eto naa yoo bori lairotẹlẹ.

Imọran: Nigbati o ba n beere lọwọ AI fun PID sọ “fikun imujade iṣẹjade ati egboogi-windup, lo itọsẹ lori wiwọn si ọrọ itọsẹ”. Awọn afikun mẹta wọnyi ṣe iyipada iwe kika PID si aaye PID.

Windup Integral ati Ariwo Itọsẹ

Awọn ọfin Ayebaye meji jẹ awọn okunfa ti o wọpọ julọ ti ikuna PID:

Afẹfẹ Integral: Nigbati actuator saturates (fun apẹẹrẹ mọto ti wa ni agbara ni kikun) aṣiṣe naa wa ati pe ọrọ isọpọ tẹsiwaju lati dagba. Asopọmọra inflated yii yori si overshoot nla nigbati eto ba de ibi-afẹde. Solusan: didaduro tabi yiyi ohun elo pada nigbati iṣẹjade ba ti kun (egboogi-windup, ti a fihan ninu koodu loke).

Ariwo itọsẹ: Oro D gba itọsẹ ti aṣiṣe; Itọsẹ ti wiwọn alariwo jẹ ariwo pupọ ati pe yoo gbọn oṣere naa. Awọn ojutu: mu itọsẹ lati wiwọn (itọsẹ ti wiwọn dipo aṣiṣe), fifi àlẹmọ kekere kọja si ọrọ itọsẹ naa.

# Idinku ariwo itọsẹ: itọsẹ wiwọn + filterd_raw = -(mesured - self.previous_measured) / dt dipo aṣiṣe

AI dara ni idamo awọn ipalara wọnyi; Ti o ba sọ pe "PID mi bori pupọ nigbati o ba de ibi ibi-afẹde", o ṣeduro afẹfẹ afẹfẹ. Ṣugbọn o rii daju nipa wiwọn boya atunṣe ṣiṣẹ lori eto rẹ.

Eto pẹlu Ziegler-Nichols

Ọna Ayebaye fun wiwa awọn anfani (Kp, Ki, Kd) lati ibere jẹ Ziegler-Nichols. Kokoro rẹ: bẹrẹ pẹlu P nikan ati jijẹ Kp titi ti eto yoo fi lọ sinu oscillation imuduro; Ṣe iṣiro Kp, Ki, Kd lati tabili pẹlu ere pataki Ku ati akoko oscillation Tu ni aaye yii.

oludari

kp

Ti

Td

P.

0.5·Ku

P.I.

0.45·Ku

Tu/1.2

PID

0.6·Ku

Tu/2

Tu/8

Awọn igbesẹ Ziegler-Nichols (ètò lati ṣe nipasẹ AI):1. Gba Ki=0, Kd=0. Sa sa P.2. LARA ARA Kp titi d‘okan duro, Oyiyi ti o duro duro bere.3. Eleyi Kp = Ku (lominu ni ere), akoko ti oscillation = Tu.4. Ṣe iṣiro Kp, Ti, Td lati tabili; Ki = Kp/Ti, Kd = Kp * Td.5. Bẹrẹ pẹlu awọn iye wọnyi, lẹhinna ṣe awọn tweaks esiperimenta.

Išọra: Ziegler-Nichols mọọmọ mu eto wa si opin iduroṣinṣin rẹ (oscillation idaduro). Ewu wa ti igara darí, overcurrent ati ewu nigbati o ba ṣe eyi lori ohun elo gidi; Ti o ba ṣeeṣe, ṣe ni kikopa ni akọkọ, lẹhinna ṣiṣẹ pẹlu opin agbara kekere ati E-stop ni hardware. Ku ti a daba nipasẹ AI jẹ aaye ibẹrẹ, o jẹ iwọn ati rii daju ninu eto rẹ.

AI-Iranlọwọ Aisan

O le ṣe iwadii ihuwasi PID nipa ṣiṣe apejuwe rẹ si AI. Awọn aami aisan → o ṣee ṣe idi aworan agbaye:

aami aisan

ṣee ṣe idi

Itọsọna AI yoo daba

o lọra joko

Kp/Ki kekere

pọ kp

Aṣiṣe titilai

Emi ko si tabi kekere pupọ

Ki fikun / pọ si

Overshoot + oscillation

Kp/Ki ga, ko si D

Fi Kd kun, Din Ki

Actuator n mì

ariwo itọsẹ

Àlẹmọ/din D

Nigbati o ba de iwọn nla

Afẹfẹ apapọ

Fi egboogi-windup kun

Ailagbara Tọ / Alagbara Tọ

Alailagbara: "Fun awọn anfani PID. "(Ewo eto? Bawo ni ihuwasi naa? Ṣe awọn wiwọn eyikeyi wa? Awọn nọmba ID wa.) lagbara: "Mo n ṣatunṣe PID fun iṣakoso iyara DC kan. Lọwọlọwọ, Kp = 2, Ki = 0.5, Kd = 0. O overshoots 35% lori titẹ sii igbesẹ ati nigbati o ba de ibi-afẹde naa, o wa ni akoko ti o tobi ju akoko 0 lọ. Sam gba akoko pipẹ. Hz. Ṣe atokọ awọn idi ti o ṣeeṣe lati awọn aami aisan wọnyi, eyiti o ni anfani “Dabaa itọsọna wo ni MO yẹ ki o yipada ki o sọ fun mi bi o ṣe le ṣe idanwo boya overshoot jẹ ifunpapọ.”

Mini Case

Onimọ ẹrọ iṣakoso Kerem ṣatunṣe iṣakoso iwọn otutu ti extruder. Pẹlu awọn anfani ti a daba nipasẹ AI, eto naa de ibi-afẹde ni kiakia, ṣugbọn ni iyipada kọọkan ti o ṣe agbekọja nla kan ati laiyara duro. Kerem ṣe alaye aami aisan naa si AI; AI fura si afẹfẹ apapọ nitori ẹrọ ti ngbona wa ni agbara ni kikun (ti o kun) fun igba diẹ. Kerem ṣe afikun egboogi-windup si koodu PID ati pe overshoot dinku ni pataki. Ṣugbọn nisisiyi o wa diẹ flicker ni awọn ẹrọ ti ngbona; O ṣe eyi si ọrọ D ti n mu ariwo sensọ iwọn otutu pọ si ati ṣafikun àlẹmọ kekere-iwọle si itọsẹ naa. Nikẹhin, o ṣe afihan awọn anfani ni aijọju pẹlu Ziegler-Nichols ati ṣe atunwo itanran idanwo. AI ni ayẹwo ti o ni kiakia; Ṣugbọn Kerem jẹrisi atunṣe kọọkan nipa idiwọn idahun igbese gangan-boya a ṣe atunṣe afẹfẹ tabi fifẹ ti lọ, o le rii ni ayaworan nikan.

Awọn aṣiṣe ti o wọpọ

  • Ikuna lati ṣafikun ekunrere iṣẹjade ati egboogi-windup si PID ati ni iriri overshoot nla ni opin adaṣe.
  • Gbigba itọsẹ lati itọsẹ ti wiwọn ariwo ati gbigbọn oluṣeto.
  • A ro pe dt jẹ igbagbogbo, lakoko ti akoko iṣapẹẹrẹ yatọ.
  • Ṣiṣe idanwo oscillation Ziegler-Nichols lori hardware laisi awọn iṣọra ailewu.
  • Gbigba awọn dukia ti ipilẹṣẹ AI bi “ipari” laisi ijẹrisi-pato eto.
  • Yiyipada ere kan pẹlu awọn igbesẹ ti o tobi pupọ ati titari eto sinu aisedeede.

Ni akojọpọ

  • PID; O ṣe pẹlu P (aṣiṣe lọwọlọwọ), I (aṣiṣe ikojọpọ), D (oṣuwọn iyipada aṣiṣe).
  • PID aaye yẹ ki o pẹlu imujade esi, egboogi-windup ati àlẹmọ itọsẹ.
  • Integral windup tobi overshoot, itọsẹ ariwo fa actuator gbigbọn.
  • Ziegler-Nichols yoo fun ibere lati jèrè; O ti wa ni imuse pẹlu aabo igbese ni hardware.
  • AI nyara ni ayẹwo lati aami aisan si fa; Atunse naa jẹri nipasẹ wiwọn.
  • dt gangan wọn; Awọn iyipada owo-owo ni a ṣe ni awọn igbesẹ kekere ati akiyesi.

Ohun elo iṣẹ-ṣiṣe

Mu eto kan (moto gidi / alagbona tabi awoṣe aṣẹ akọkọ/keji ti o rọrun ni Python) ati pe AI ṣe agbekalẹ kilasi PID kan pẹlu itẹlọrun + egboogi-windup. Lẹhinna: (1) ṣe akiyesi ihuwasi oscillation nipa bẹrẹ pẹlu P nikan ati jijẹ Kp, (2) ṣafikun Ki lati yọkuro aṣiṣe ti o yẹ ki o wo bii iwọn apọju naa ṣe pọ si, (3) ṣe afiwe ipa lori overshoot nla nipasẹ titan-anti-windup tan ati pa. Idite idahun igbesẹ ni igbesẹ kọọkan ki o ṣe akiyesi iru ere wo ni iyipada ihuwasi. Ṣe afiwe awọn anfani lati ọdọ Ziegler-Nichols pẹlu awọn anfani ti o rii funrararẹ.