標(biāo)題:
關(guān)于PID算法學(xué)習(xí)問(wèn)題
[打印本頁(yè)]
作者:
19年的那個(gè)夏天
時(shí)間:
2023-5-29 15:33
標(biāo)題:
關(guān)于PID算法學(xué)習(xí)問(wèn)題
小車和攝像頭和各種識(shí)別模塊都需要PID算法,請(qǐng)教各位大神給我推薦幾本書或者幾個(gè)站進(jìn)行學(xué)習(xí)。
作者:
yzwzfyz
時(shí)間:
2023-5-29 17:18
以茶水桶放水為例,水桶下方有孔可供人接水用;水桶上方有水龍頭,可以注水補(bǔ)充水。
你:控制水龍頭的放水量,目標(biāo)是將水桶里的水位保持在某一位置上。下方放水你控制不了。
于是你在水桶上畫一條線A!A就是在控制的目標(biāo)。
1、如果水太少了,你會(huì)將龍頭開到最大。
2、如果水太多了,你會(huì)將龍頭關(guān)閉。
3、如果水位接近A:
3.1、稍低一點(diǎn):你會(huì)將水龍頭再擰大一點(diǎn)點(diǎn);
3.2、稍過(guò)一點(diǎn):你會(huì)將水龍頭再擰小一點(diǎn);
3.3、剛好在A線:說(shuō)明進(jìn)水與出水一樣,你會(huì)保持水龍不動(dòng);
這就是控制原理。如何用PID來(lái)做這件事呢?
PID的計(jì)算結(jié)果,就是你的手所擰的水龍開度。就叫它 U 吧。
當(dāng)前的水位,就你眼睛看到的水位,就叫 B 吧。
你會(huì)時(shí)刻關(guān)注比較水位B,看它們差多少,當(dāng)然就是:B-A。令Δ=B-A。
開度U有兩個(gè)要點(diǎn),其一是大小就是擰多少;其二是方向,就是擰緊還是擰松。
U的大小當(dāng)然是根據(jù)Δ來(lái)定才合理,方向當(dāng)然是反向才對(duì)。 所以:讓U=-Kp*Δ,-Kp就是比例(對(duì)應(yīng)PID中的P),相當(dāng)于把誤差放大后,再?zèng)Q定U的開度。
但是,這個(gè)算法有個(gè)缺點(diǎn),就是當(dāng)B接近目標(biāo)A的時(shí)候。比如A=B了,這時(shí)Δ=0,U=-Kp*Δ=0,即水龍開度=0,關(guān)掉了。
你想啊,下面在放水,水位現(xiàn)在正好B=A,但水龍頭一關(guān),下一刻,水一定就少了,明顯是不合理的。
只有K的控制系統(tǒng)叫比例控制系統(tǒng),比例控制系統(tǒng)是有差控制系統(tǒng),當(dāng)系統(tǒng)A=B時(shí)控制就失靈了。它的最佳控制效果只能達(dá)到目標(biāo)值的1/Kp,永遠(yuǎn)做不到A=B。
于是做了一個(gè)改進(jìn):
將每次水位差Δ,做一個(gè)積累,并將積累的值也用來(lái)控制水龍頭,當(dāng)然也是要反向的,于是:
U = -Kp*Δ -Ki*(Δ+Δ1+Δ2+Δ3+……Δn)這里Δ是本次差,Δ1是上次差,Δ2是上上次差,……,Δn是很久以前的差,Ki是將積累乘個(gè)比例。
這樣做有個(gè)好處,就是當(dāng)A=B是,U不是0,而是以前的差值積累Ki*(Δ+Δ1+Δ2+Δ3+……Δn),而且本次Δ=0,說(shuō)明,本次計(jì)算結(jié)果與上次一樣,就是說(shuō)當(dāng)A=B時(shí)水龍頭保持當(dāng)前開度不變。
這個(gè)Δ的積累就是PID中的I。PD(比例+積分)的控制系統(tǒng)是可以做到B=的,即控制到無(wú)差輸出。
到此:說(shuō)了PID中的PI,D又是什么呢?還要從U = -kΔ -(Δ+Δ1+Δ2+Δ3+……Δn)的缺點(diǎn)說(shuō)起。就是達(dá)成控制目標(biāo)的速度。
最佳最快的控制過(guò)程一定是:
1、開始水龍頭開到最大。
2、當(dāng)B=A是立即擰到某一個(gè)開度,這個(gè)開度能保證注水和放水速度一樣。
不過(guò),即使人來(lái)控制,第2、也做不到。
首先:注水和放水速度一樣時(shí)的開度是多少?你不知道,要試。
其次:從開度最大,到正好,需要時(shí)間,不可能立即。也就是說(shuō)要提前開始擰緊水龍頭,當(dāng)A=B時(shí)擰到正好的位置上。
其實(shí)最佳的控制不一定是PID,而是能做到第2、的方法。
但PID中的I,就是根據(jù)達(dá)成目標(biāo)的變化趨勢(shì),將U作個(gè)調(diào)整,使達(dá)成目標(biāo)的速度加快。
U = -kΔ -(Δ+Δ1+Δ2+Δ3+……Δn)- (Δ-Δ1)*Ki
這里:(Δ-Δ1)是本次變化量 - 上次變化量,這就相當(dāng)于“加速度”是個(gè)變化均勢(shì),以變化量的變化趨勢(shì)為基礎(chǔ)*Ki,再修正U。
(Δ-Δ1)*Ki就是PID中的D,這個(gè)值可以這樣理解,如果Δ越來(lái)越穩(wěn)定時(shí),修正量就越來(lái)越少。
什么是穩(wěn)定呢,比如放水量與注水量始終不變,其差不變,就是穩(wěn)定了,可以不補(bǔ)了。
I是最不易理解的,知道它可以提升控制速度也就可以了。
PID中的三個(gè)控制量,必須精細(xì)分配各個(gè)分量的大小。否則會(huì)控制失敗。
例如:水位快到了,龍頭開大了,過(guò)了!過(guò)了關(guān)小,關(guān)多了,水位又低了,低了又開大小,又過(guò)了,來(lái)回折騰,就是做不到A=B。
P大速度快,穩(wěn)定性差,超調(diào)大(調(diào)過(guò)頭了)。
I大速度快,穩(wěn)定性差。
D大速度慢,穩(wěn)定性好。
PID控制是一門不太好掌握技術(shù)。
作者:
人工置頂員
時(shí)間:
2023-5-30 15:40
頂一下
作者:
LaoYuTou
時(shí)間:
2023-5-30 18:39
微型計(jì)算機(jī)控制技術(shù)、計(jì)算機(jī)控制技術(shù)教材都有原理的講解,有的提供實(shí)例代碼,另外可以B站看下視頻,大佬們講的不錯(cuò)的。
作者:
manatnet
時(shí)間:
2023-6-1 12:26
baidu PID參數(shù)設(shè)置,會(huì)出來(lái)一堆,你點(diǎn)進(jìn)去,多看幾個(gè),挑好的固定幾個(gè)就行!
下面的故事值得仔細(xì)琢磨(網(wǎng)上的):
小明接到這樣一個(gè)任務(wù):有一個(gè)水缸點(diǎn)漏水(而且漏水的速度還不一定固定不變),要求水面高度維持在某個(gè)位置,一旦發(fā)現(xiàn)水面高度低于要求位置,就要往水缸里加水。 小明接到任務(wù)后就一直守在水缸旁邊,時(shí)間長(zhǎng)就覺(jué)得無(wú)聊,就跑到房里看小說(shuō)了,每30分鐘來(lái)檢查一次水面高度。水漏得太快,每次小明來(lái)檢查時(shí),水都快漏完了,離要求的高度相差很遠(yuǎn),小明改為每3分鐘來(lái)檢查一次,結(jié)果每次來(lái)水都沒(méi)怎么漏,不需要加水,來(lái)得太頻繁做的是無(wú)用功。幾次試驗(yàn)后,確定每10分鐘來(lái)檢查一次。這個(gè)檢查時(shí)間就稱為采樣周期。 開始小明用瓢加水,水龍頭離水缸有十幾米的距離,經(jīng)常要跑好幾趟才加夠水,于是小明又改為用桶加,一加就是一桶,跑的次數(shù)少了,加水的速度也快了,但好幾次將缸給加溢出了,不小心弄濕了幾次鞋,小明又動(dòng)腦筋,我不用瓢也不用桶,老子用盆,幾次下來(lái),發(fā)現(xiàn)剛剛好,不用跑太多次,也不會(huì)讓水溢出。這個(gè)加水工具的大小就稱為比例系數(shù)。
小明又發(fā)現(xiàn)水雖然不會(huì)加過(guò)量溢出了,有時(shí)會(huì)高過(guò)要求位置比較多,還是有打濕鞋的危險(xiǎn)。他又想了個(gè)辦法,在水缸上裝一個(gè)漏斗,每次加水不直接倒進(jìn)水缸,而是倒進(jìn)漏斗讓它慢慢加。這樣溢出的問(wèn)題解決了,但加水的速度又慢了,有時(shí)還趕不上漏水的速度。于是他試著變換不同大小口徑的漏斗來(lái)控制加水的速度,最后終于找到了滿意的漏斗。漏斗的時(shí)間就稱為積分時(shí)間。
小明終于喘了一口,但任務(wù)的要求突然嚴(yán)了,水位控制的及時(shí)性要求大大提高,一旦水位過(guò)低,必須立即將水加到要求位置,而且不能高出太多,否則不給工錢。小明又為難了!于是他又開努腦筋,終于讓它想到一個(gè)辦法,常放一盆備用水在旁邊,一發(fā)現(xiàn)水位低了,不經(jīng)過(guò)漏斗就是一盆水下去,這樣及時(shí)性是保證了,但水位有時(shí)會(huì)高多了。他又在要求水面位置上面一點(diǎn)將水缸鑿一孔,再接一根管子到下面的備用桶里這樣多出的水會(huì)從上面的孔里漏出來(lái)。這個(gè)水漏出的快慢就稱為微分時(shí)間。
作者:
wersdfxcv
時(shí)間:
2023-6-1 13:15
你們這段子一套一套的
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1