最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

講講PID算法

2022-09-01 13:59 作者:NewtonCY  | 我要投稿

PID這個(gè)算法很出圈,即使俺不搞自動控制,也聽聞了它的鼎鼎大名??戳藥灼恼?,發(fā)現(xiàn)這個(gè)東西意外的簡單。于是今天就給大家分享一下。

PID用來解決什么問題呢?比如我有一個(gè)系統(tǒng),這個(gè)系統(tǒng)有一個(gè)輸入,有一個(gè)輸出。我希望調(diào)整輸入,使得系統(tǒng)輸出一個(gè)我預(yù)期的值。那么此時(shí),就可以嘗試用PID。

更具體的舉例,比如,一個(gè)電機(jī),連接了一扇大門,門上有一個(gè)傳感器,可以取到門的當(dāng)前位置,我們希望這扇門能運(yùn)動到指定的位置。這時(shí)我就可以用PID。這個(gè)例子中,門的當(dāng)前位置就是系統(tǒng)的輸出,是已知的,電機(jī)上的電流就是系統(tǒng)的輸入,是需要我們控制的。

我們考察這個(gè)問題,大門在運(yùn)動的過程中可能受到各種擾動,比如被熊孩子踢一腳,大門的阻力也不確定,有可能某處就有個(gè)石子什么的。大門如果比較重,那我們必須考慮它的慣性,提前減速。所以這個(gè)控制還真是有點(diǎn)東西的,那么PID是怎么做的呢。

PID的公式:

Kp, Tt, Td是三個(gè)需要在實(shí)驗(yàn)中確定取值的系數(shù),既然如此,我們把需要實(shí)驗(yàn)來確定的系數(shù)合并整理一下,寫成這樣也未嘗不可。

e(t)表示在t時(shí)刻,系統(tǒng)輸出與預(yù)期輸出之間的誤差。Kp,Ki,Kd是需要實(shí)驗(yàn)確定的系數(shù)。

可以看到,這個(gè)公式由三項(xiàng)組成,我們就把這三項(xiàng)分別叫成比例項(xiàng),積分項(xiàng),和微分項(xiàng)好了。接下來我們來看看這三項(xiàng)起到的作用。

比例項(xiàng)

為了讓我們更簡單的分析PID公式起到的作用,我們把問題簡化成一個(gè)高中物理題。假設(shè)我們有一個(gè)質(zhì)點(diǎn),現(xiàn)在我們需要給質(zhì)點(diǎn)施加一個(gè)力(系統(tǒng)的輸入),把質(zhì)點(diǎn)推到指定位置。質(zhì)點(diǎn)的當(dāng)前位置是已知的(系統(tǒng)的輸出)。同時(shí)為了方便畫圖,我們限定我們的質(zhì)點(diǎn)只能在一維的軸線上運(yùn)動。風(fēng)阻,摩擦不計(jì),最后我們會加入一個(gè)隨機(jī)的擾動來代表這些我們沒有計(jì)算的東西。

現(xiàn)在我們按照PID的公式操作我們的小球,e(t)表示此時(shí)小球和目標(biāo)點(diǎn)間的距離,第一項(xiàng)的作用就是向我們的小球施加一個(gè)指向目標(biāo)點(diǎn),且和與目標(biāo)點(diǎn)距離成正比的力,誒,加上這個(gè)力后,系統(tǒng)正好變成了一個(gè)彈簧振子。目標(biāo)位置是平衡點(diǎn)。如果只考慮這一項(xiàng),小球會往目標(biāo)點(diǎn)靠,但是往復(fù)震蕩停不下來。

微分項(xiàng)

那么怎么才能讓小球能夠停在目標(biāo)位置呢,大家可能會想到,如果有阻尼那就能停下來了,誒,PID里面的第三項(xiàng)正好就是一個(gè)阻尼項(xiàng),公式里面,它是誤差隨時(shí)間的微分乘上一個(gè)系數(shù)。在我們這個(gè)例子里,誤差是一個(gè)距離,對時(shí)間的微分是速度,所以在我們的模型里,這一項(xiàng)正好相當(dāng)于一個(gè)和速度成正比的阻尼項(xiàng)。

我們加上這一項(xiàng)

欸嘿,收斂了。而且顯然,阻尼越強(qiáng),振幅衰減會越快。

這就是第三項(xiàng)的作用了,加上阻尼,防止這玩意來回震蕩。

積分項(xiàng)

我們這個(gè)有阻尼的彈簧振子模型啥都好,但是如果有一個(gè)外力干擾呢?假設(shè)有一個(gè)恒定的外力施加在這上面,那顯然會使得我們彈簧模型的平衡位置發(fā)生變化,變成這樣。

這就叫靜態(tài)誤差,積分項(xiàng)可以用來解決靜態(tài)誤差,我們看公式中的第二項(xiàng),第二項(xiàng)將誤差進(jìn)行累積,然后使用累積的結(jié)果來修正輸入,可想,如果靜態(tài)誤差一直不消除,隨著積分的累計(jì),第二項(xiàng)將會起到越來越大的作用,直到誤差消除。因此,有了這個(gè)積分項(xiàng),就可以平衡掉我們加入的這個(gè)外力了。

我們加上看看

效果拔群。

實(shí)驗(yàn)一下

我們在我們的模型上加入一個(gè)噪聲和一個(gè)恒力作為干擾力,調(diào)整一下參數(shù),讓自己滿意,然后繪制出來給大家看看。

左上圖表示小球的位置,由上圖是我們施加的干擾力,左下圖是通過PID輸出的力,我們可以看到PID在抵抗干擾的力。右下圖是右上干擾力與坐下PID輸出的力之和,也是小球受到的總的合外力。

本文章的模擬結(jié)果是由我自己寫的python程序生成的。使用matplotlib來作圖,干擾使用的是Perlin噪波,它在游戲領(lǐng)域無處不在,python的noise庫可以提供perlin噪波的生成。

待會我會把我寫的PID模擬小代碼發(fā)到github上,請查看評論區(qū)置頂。

講講PID算法的評論 (共 條)

分享到微博請遵守國家法律
台北市| 蒙阴县| 潜山县| 黔南| 靖西县| 上林县| 建始县| 渑池县| 江山市| 淮南市| 靖宇县| 工布江达县| 内乡县| 宣城市| 沽源县| 若尔盖县| 鄢陵县| 大石桥市| 新密市| 内丘县| 资中县| 盘锦市| 扎囊县| 通河县| 沐川县| 腾冲县| 乾安县| 防城港市| 连城县| 黑水县| 肥乡县| 上犹县| 祥云县| 磐石市| 沁阳市| 子长县| 河西区| 淮安市| 淄博市| 百色市| 丁青县|