PID非常好的光感巡線思路
調(diào)整PID控制器,不使用復(fù)雜的數(shù)學(xué)方法
(但是我們還是要做一些計算)
在本文中,我使用了其他人總結(jié)出來的PID控制器調(diào)整的方法,測量幾個系統(tǒng)參數(shù)就可以讓你非常好地計算出Kp,Ki和Kd的值。有幾種技術(shù)可用于計算Ks,其中之一就叫做 "Ziegler–Nichols方法" 。通過谷歌搜索可以找到很多講述這種技術(shù)的網(wǎng)頁。我所使用的版本幾乎是直接使用了維基網(wǎng)頁——PID控制器中的內(nèi)容(在很多其他的地方也可以找到相同的內(nèi)容),我只做了一點(diǎn)小小的改動,包括下表中所示計算過程中的循環(huán)時間。
按以下步驟調(diào)整PID控制器:
按以下步驟調(diào)整PID控制器:
將Ki和Kd的值置為0,即關(guān)閉控制器中的這些部分,將控制器作為一個簡單的比例控制器。
把Tp(目標(biāo)功率值)設(shè)置的小一點(diǎn)。對于我們使用的馬達(dá)來說,可以設(shè)為25.
將Kp設(shè)置為一個“合理”的值,什么是合理的?
1)用我們想讓馬達(dá)功率達(dá)到的最大值(100)除以能使用的最大誤差值。對于我們的巡線機(jī)器人,我們假定這個最大誤差是5,所以推測出Kp值為 100/5=20。當(dāng)誤差為+5,,馬達(dá)的功率將達(dá)到100,。當(dāng)誤差為0,馬達(dá)的功率會在Tp(目標(biāo)功率值)上。
2)或者,將Kp值設(shè)為 1 (或100),看看會發(fā)生什么。
3)如果你要把 Ks的值乘以100,在這里,1就要記成100,20記成2000,100記成10000.
運(yùn)行機(jī)器人,觀察運(yùn)行狀態(tài)。如果它不能巡線,從線上脫離開,就提高Kp值;如果它劇烈擺動,就降低Kp 值。調(diào)整Kp值,直到機(jī)器人能夠巡線,并且沒有明顯的擺動為止。我們稱這時的Kp值為"Kc" (在PID文獻(xiàn)中,被稱為臨界值)
使用Kc值作為Kp,運(yùn)行機(jī)器人,試著找出機(jī)器人運(yùn)行時的“振蕩周期”是多少。這個測試不需要非常準(zhǔn)確。振蕩周期(Pc)是指機(jī)器人從線的一側(cè)開始,擺動到另一側(cè),再回到開始點(diǎn)的時間長短。對于典型的樂高機(jī)器人來說,Pc大約是在0.5秒到1或2秒之間。
你還需要知道,機(jī)器人控制系統(tǒng)的循環(huán)周期是多少。我將循環(huán)設(shè)置為一個固定的次數(shù)(如10,000),測量機(jī)器人完成全部循環(huán)次數(shù)的總時間(從開始到結(jié)束的時間,或機(jī)器人顯示出結(jié)果的時間),每個循環(huán)的周期是測量時間除以循環(huán)次數(shù)。對于一個完整的PID控制器來說,使用NXT-G編程(在程序中不要使用發(fā)聲、顯示等模塊,這些模塊的使用會占用程序運(yùn)行時間,影響測試結(jié)果),dT值應(yīng)該在每個循環(huán)0.015秒到0.020秒之間。
使用下表計算Kp,Ki, 和Kc的值。如果你只想要一個P控制器,使用表中標(biāo)注了P的那一行來計算Kp(Ki和Kd均為0)。如果你想要一個PI控制器,就使用第二行來計算。如果你想要一個完整的PID控制器,就使用最后一行來計算。
在實際操作時,那些K值都要用100乘以它們實際的值,但是在計算中你不需要考慮這個問題。這個因數(shù)100 ,在確定Kp=Kc 臨界值時,就已經(jīng)考慮在內(nèi)了。
運(yùn)行機(jī)器人,看看它的表現(xiàn)。
你可以調(diào)整Kp,Ki和Kd的值直到獲得最佳的性能。你可以從相當(dāng)大的調(diào)整開始,如30%,然后嘗試較小的調(diào)整,以獲得最佳的(或者至少是可以接受的)效果。
一旦你確定了一組好的K值,提高TP值,提高機(jī)器人的直線速度。
對于新的TP值,要重新的調(diào)整K值,也許甚至要回到第1步,重復(fù)整個過程,
不斷地重復(fù),直到機(jī)器人的表現(xiàn)是可以接受的。本文引用地址:http://m.butianyuan.cn/article/201611/323721.htm
Ki和Kd上的符號只是要提醒你——Ki 和 Kd已經(jīng)考慮了時間的因素,即ki= ki*dt,kd’=kd/dt (假定dT為恒定值)。 這里有一個我自己做機(jī)器人測試的測量數(shù)據(jù)。Kc為300,當(dāng)Kp=Kc時,機(jī)器人的擺動周期大約為0.8秒,因此Pc為0.8。我測量Pc的方法是,每當(dāng)機(jī)器人擺動到一個特定的方向,就大聲數(shù)出來。循環(huán)時間dT為0.014秒/每個循環(huán),用程序運(yùn)行10,000次循環(huán)時,NXT上顯示的程序運(yùn)行時間和循環(huán)次數(shù)相除所獲得。使用上表中PID控制器的各計算公式,我們得到: Kp= (0.60)(Kc) =(0.60)(300) = 180 Ki= 2(Kp)(dT) / (Pc) =2(180)(0.014) / (0.8) = 6.3 (which is rounded to 6)(四舍五入為6) Kd= (Kp)(Pc) / ((8)(dT)) =(180)(0.8) / ((8)(0.014)) = 1286 在進(jìn)一步的反復(fù)試驗后,最終的Kp,Ki和Kd值分別為220,7 和500。別忘了所有這些K值均已乘以100,因此,它們的實際值為 2.2 ,0.07和5 。 |
改變Kp, Ki, 和 Kd的值對機(jī)器人運(yùn)行情況的影響
在優(yōu)化PID的過程中,上面說明的方法和表格是一個好的開始。有時,了解一下增加(或降低)三個K值中的一個會有怎樣的結(jié)果,也是非常有幫助的。下表在很多網(wǎng)頁上都能找到,這個版本來源于wiki——PID控制器的網(wǎng)頁。
增加參數(shù)值的影響 | |||||
Parameter 參數(shù) | Risetime 響應(yīng)時間 | Overshoot 超調(diào) | Settlingtime 穩(wěn)定時間 | Errorat equilibrium 靜態(tài)誤差 | |
Kp | 減少 | 加 | 變化小 | 減少 | |
Ki | 減少 | 增加 | 增加 | 消除 | |
Kd | 不確定(小的增加或減?。?/td> 減少 減少 無 |
“響應(yīng)時間”是指機(jī)器人確定誤差的時間,在我們的例子中,是指機(jī)器人在離線以后,需要多少時間能回到線的邊緣。響應(yīng)時間主要由Kp控制。Kp值變大,機(jī)器人返回線的速度變快,響應(yīng)時間就減少。Kp過大,會造成機(jī)器人超調(diào)。
“超調(diào)”是指機(jī)器人在響應(yīng)誤差時,會越過線的邊緣多遠(yuǎn)。例如,如果超調(diào)較小,當(dāng)機(jī)器人想回到線的左邊時,就不會擺動到線的右邊去。如果超調(diào)較大,機(jī)器人在糾正誤差時,就會擺動過大,超過線的邊緣。超調(diào)受Kd影響最大,但Ki和Kp對它的影響也頗強(qiáng)。通常情況下,糾正很大的超調(diào),你需要增大Kd值。還記得我們第一個非常簡單的巡線機(jī)器人嗎,除了左轉(zhuǎn)和右轉(zhuǎn),它不會做任何事,這個巡線機(jī)器人就會產(chǎn)生非常大的超調(diào)現(xiàn)象。
“穩(wěn)定時間”是指機(jī)器人在發(fā)生一個大的變化時,需要多長時間才能穩(wěn)定下來。在我們巡線的例子中,機(jī)器人遇到一個轉(zhuǎn)彎就會發(fā)生較大的變化。當(dāng)機(jī)器人對曲線做出響應(yīng),它會糾正誤差,并產(chǎn)生一些超調(diào),然后機(jī)器人會以另一個方向的超調(diào)來糾正當(dāng)前的超調(diào),然后再糾正這個超調(diào)......你明白了吧。當(dāng)機(jī)器人對誤差進(jìn)行響應(yīng)時,它會圍繞期望位置進(jìn)行擺動。“穩(wěn)定時間”就是這個擺動被抑制到0的時間。Ki和Kd都對穩(wěn)定時間有很強(qiáng)的影響,Ki越大,穩(wěn)定時間越長;Kd越大,穩(wěn)定時間越短。
“靜態(tài)誤差”是指系統(tǒng)在不受干擾的情況下運(yùn)行所保持的誤差。對于我們的巡線機(jī)器人來說,當(dāng)機(jī)器人走了很長一段直線后,這個誤差會被抵消掉。P控制器和PD控制器經(jīng)常會被這種誤差搞垮。增加Kp值會降低它的影響,但會加大機(jī)器人的擺動。P控制器和PD控制器在平衡狀態(tài)下會有一個恒定的誤差,因此經(jīng)常會在其中增加I控制,和加大Ki的值。(這是假定,當(dāng)機(jī)器人巡線時,你更關(guān)注小的系統(tǒng)誤差。這就意味著,機(jī)器人會稍微向一邊或另一邊偏移)
“超調(diào)”是指機(jī)器人在響應(yīng)誤差時,會越過線的邊緣多遠(yuǎn)。例如,如果超調(diào)較小,當(dāng)機(jī)器人想回到線的左邊時,就不會擺動到線的右邊去。如果超調(diào)較大,機(jī)器人在糾正誤差時,就會擺動過大,超過線的邊緣。超調(diào)受Kd影響最大,但Ki和Kp對它的影響也頗強(qiáng)。通常情況下,糾正很大的超調(diào),你需要增大Kd值。還記得我們第一個非常簡單的巡線機(jī)器人嗎,除了左轉(zhuǎn)和右轉(zhuǎn),它不會做任何事,這個巡線機(jī)器人就會產(chǎn)生非常大的超調(diào)現(xiàn)象。
“穩(wěn)定時間”是指機(jī)器人在發(fā)生一個大的變化時,需要多長時間才能穩(wěn)定下來。在我們巡線的例子中,機(jī)器人遇到一個轉(zhuǎn)彎就會發(fā)生較大的變化。當(dāng)機(jī)器人對曲線做出響應(yīng),它會糾正誤差,并產(chǎn)生一些超調(diào),然后機(jī)器人會以另一個方向的超調(diào)來糾正當(dāng)前的超調(diào),然后再糾正這個超調(diào)......你明白了吧。當(dāng)機(jī)器人對誤差進(jìn)行響應(yīng)時,它會圍繞期望位置進(jìn)行擺動。“穩(wěn)定時間”就是這個擺動被抑制到0的時間。Ki和Kd都對穩(wěn)定時間有很強(qiáng)的影響,Ki越大,穩(wěn)定時間越長;Kd越大,穩(wěn)定時間越短。
“靜態(tài)誤差”是指系統(tǒng)在不受干擾的情況下運(yùn)行所保持的誤差。對于我們的巡線機(jī)器人來說,當(dāng)機(jī)器人走了很長一段直線后,這個誤差會被抵消掉。P控制器和PD控制器經(jīng)常會被這種誤差搞垮。增加Kp值會降低它的影響,但會加大機(jī)器人的擺動。P控制器和PD控制器在平衡狀態(tài)下會有一個恒定的誤差,因此經(jīng)常會在其中增加I控制,和加大Ki的值。(這是假定,當(dāng)機(jī)器人巡線時,你更關(guān)注小的系統(tǒng)誤差。這就意味著,機(jī)器人會稍微向一邊或另一邊偏移)
運(yùn)行情況怎樣?
光電傳感器距離巡線測試紙的高度大約為1/2英寸,Tp(功率目標(biāo)值)設(shè)置為70%。機(jī)器人的平均速度為每秒鐘8英寸。機(jī)器人沿著橢圓型黑線的內(nèi)側(cè),采用左手法則巡線,沿著內(nèi)側(cè)巡線要比沿著外側(cè)巡線稍微難一點(diǎn)。
在整個過程中,巡線機(jī)器人似乎表現(xiàn)相當(dāng)不錯。如果你仔細(xì)觀看視頻,就會發(fā)現(xiàn),機(jī)器人在離開轉(zhuǎn)彎的地方有一點(diǎn)“搖尾巴”。那是PID有一點(diǎn)振蕩。當(dāng)機(jī)器人向鏡頭方向運(yùn)行時,你可以看到機(jī)器人光電傳感器的LED在場地墊上照射出的紅點(diǎn),看上去在追蹤線的邊緣方面,做的非常好。
基本PID控制器可以適用于不同的控制難題(當(dāng)然也可以用P控制器或者PI控制器代替PID控制器),你無需提出一個新的“誤差”定義,但是針對特定的任務(wù),要重新調(diào)整PID。
基本PID控制器可以適用于不同的控制難題(當(dāng)然也可以用P控制器或者PI控制器代替PID控制器),你無需提出一個新的“誤差”定義,但是針對特定的任務(wù),要重新調(diào)整PID。
關(guān)鍵詞:
PID光感巡
技術(shù)專區(qū)
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機(jī)
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線
- 開關(guān)電源
- 單片機(jī)
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩(wěn)壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機(jī)控制
- 藍(lán)牙
- PLC
- PWM
- 汽車電子
- 轉(zhuǎn)換器
- 電源管理
- 信號放大器
評論