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