pid非常好的光感巡線思路
調整pid控制器,不使用複雜的數學方法
(但是我們還是要做一些計算)
在本文中,我使用了其他人總結出來的pid控制器調整的方法,測量幾個系統引數就可以讓你非常好地計算出 kp,ki 和 kd的值。有幾種技術可用於計算ks,其中之一就叫做 "ziegler–nichols方法" 。通過谷歌搜尋可以找到很多講述這種技術的網頁。我所使用的版本幾乎是直接使用了維基網頁——pid控制器中的內容(在很多其他的地方也可以找到相同的內容),我只做了一點小小的改動,包括下表中所示計算過程中的迴圈時間。
按以下步驟調整pid控制器:
將 ki 和 kd 的值置為0,即關閉控制器中的這些部分,將控制器作為乙個簡單的比例控制器。
把tp(目標功率值)設定的小一點。對於我們使用的馬達來說,可以設為25.
將 kp 設定為乙個「合理」的值,什麼是合理的?
1)用我們想讓馬達功率達到的最大值(100)除以能使用的最大誤差值。對於我們的巡線機械人,我們假定這個最大誤差是5,所以推測出kp值為 100/5=20。當誤差為+5,,馬達的功率將達到100,。當誤差為0,馬達的功率會在 tp (目標功率值)上。
2)或者,將kp 值設為 1 (或100),看看會發生什麼。
3)如果你要把 k's的值乘以100,在這裡,1就要記成100,20記成2000,100記成10000.
執行機械人,觀察執行狀態。如果它不能巡線,從線上脫離開,就提高kp值;如果它劇烈擺動,就降低kp 值。調整kp值,直到機械人能夠巡線,並且沒有明顯的擺動為止。我們稱這時的kp 值為"kc" (在pid文獻中,被稱為臨界值)
使用kc值作為kp,執行機械人,試著找出機械人執行時的「振盪週期」是多少。這個測試不需要非常準確。振盪週期(pc)是指機械人從線的一側開始,擺動到另一側,再回到開始點的時間長短。對於典型的樂高機械人來說,pc 大約是在0.5秒到1或2秒之間。
你還需要知道,機械人控制系統的迴圈週期是多少。我將迴圈設定為乙個固定的次數(如10,000),測量機械人完成全部迴圈次數的總時間(從開始到結束的時間,或機械人顯示出結果的時間),每個迴圈的週期是測量時間除以迴圈次數。對於乙個完整的pid控制器來說,使用nxt-g程式設計(在程式中不要使用發聲、顯示等模組,這些模組的使用會占用程式執行時間,影響測試結果),dt值應該在每個迴圈0.015秒到0.020秒之間。
使用下表計算 kp, ki, 和 kc 的值。如果你只想要乙個p控制器,使用表中標註了p的那一行來計算kp (ki' 和 kd' 均為0)。如果你想要乙個pi控制器,就使用第二行來計算。如果你想要乙個完整的pid控制器,就使用最後一行來計算。
在實際操作時,那些k值都要用100乘以它們實際的值,但是在計算中你不需要考慮這個問題。這個因數100 ,在確定kp = kc 臨界值時,就已經考慮在內了。
執行機械人,看看它的表現。
你可以調整kp, ki 和 kd 的值直到獲得最佳的效能。你可以從相當大的調整開始,如30%,然後嘗試較小的調整,以獲得最佳的(或者至少是可以接受的)效果。
一旦你確定了一組好的k值,提高tp值,提高機械人的直線速度。
對於新的tp值,要重新的調整k值,也許甚至要回到第1步,重複整個過程,
不斷地重複,直到機械人的表現是可以接受的。
ziegler–nichols方法給出的k'值
(迴圈時間恆定並等於 dt)
控制型別
kpki'
kd'p
0.50kc
pi0.45kc
1.2kpdt/ pc
pid0.60kc
2kpdt / pc
kppc / (8dt)
ki'和 kd' 上的符號只是要提醒你——ki' 和 kd'已經考慮了時間的因素,即ki'= ki*dt,kd』=kd/dt (假定dt為恆定值)。
這裡有乙個我自己做機械人測試的測量資料。kc為300,當kp=kc時,機械人的擺動週期大約為0.8秒,因此pc為0.8。我測量pc的方法是,每當機械人擺動到乙個特定的方向,就大聲數出來。迴圈時間dt為0.014秒/每個迴圈,用程式執行10,000次迴圈時,nxt上顯示的程式執行時間和迴圈次數相除所獲得。使用上表中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
在進一步的反覆試驗後,最終的kp, ki 和kd值分別為220,7 和500。別忘了所有這些k值均已乘以100,因此,它們的實際值為 2.2 ,0.07和5 。
改變kp, ki, 和 kd的值對機械人運**況的影響
在優化pid的過程中,上面說明的方法和**是乙個好的開始。有時,了解一下增加(或降低)三個k值中的乙個會有怎樣的結果,也是非常有幫助的。下表在很多網頁上都能找到,這個版本**於wiki——pid控制器的網頁。
增加引數值的影響
parameter
引數rise time
響應時間
overshoot
超調settling time
穩定時間
error at
equilibrium
靜態誤差
kp減少
加變化小
減少ki
減少增加
增加消除
kd不確定(小的增加或減小)
減少減少
無「響應時間」是指機械人確定誤差的時間,在我們的例子中,是指機械人在離線以後,需要多少時間能回到線的邊緣。響應時間主要由kp控制。kp值變大,機械人返回線的速度變快,響應時間就減少。kp過大,會造成機械人超調。
「超調」是指機械人在響應誤差時,會越過線的邊緣多遠。例如,如果超調較小,當機械人想回到線的左邊時,就不會擺動到線的右邊去。如果超調較大,機械人在糾正誤差時,就會擺動過大,超過線的邊緣。超調受 kd影響最大,但 ki 和kp對它的影響也頗強。通常情況下,糾正很大的超調,你需要增大kd值。還記得我們第乙個非常簡單的巡線機械人嗎,除了左轉和右轉,它不會做任何事,這個巡線機械人就會產生非常大的超調現象。
「穩定時間」是指機械人在發生乙個大的變化時,需要多長時間才能穩定下來。在我們巡線的例子中,機械人遇到乙個轉彎就會發生較大的變化。當機械人對曲線做出響應,它會糾正誤差,並產生一些超調,然後機械人會以另乙個方向的超調來糾正當前的超調,然後再糾正這個超調......你明白了吧。當機械人對誤差進行響應時,它會圍繞期望位置進行擺動。「穩定時間」就是這個擺動被抑制到0的時間。ki 和 kd都對穩定時間有很強的影響,ki越大,穩定時間越長;kd越大,穩定時間越短。
「靜態誤差」是指系統在不受干擾的情況下執行所保持的誤差。對於我們的巡線機械人來說,當機械人走了很長一段直線後,這個誤差會被抵消掉。p控制器和pd控制器經常會被這種誤差搞垮。增加kp 值會降低它的影響,但會加大機械人的擺動。p控制器和pd控制器在平衡狀態下會有乙個恆定的誤差,因此經常會在其中增加i控制,和加大ki的值。(這是假定,當機械人巡線時,你更關注小的系統誤差。這就意味著,機械人會稍微向一邊或另一邊偏移)
運**況怎樣?
光電感測器距離巡線測試紙的高度大約為1/2英吋,tp (功率目標值)設定為70%。機械人的平均速度為每秒鐘8英吋。機械人沿著橢圓型黑線的內側,採用左手法則巡線,沿著內側巡線要比沿著外側巡線稍微難一點。
基本pid控制器可以適用於不同的控制難題(當然也可以用p控制器或者pi控制器代替pid控制器),你無需提出乙個新的「誤差」定義,但是針對特定的任務,要重新調整pid。
單光感pid巡線 樂高4種單光感巡線邏輯
樂高機械人4種單光感巡線邏輯。巡線話題應該不會過時,之前看過曉舟的巡線專題教程以及伯虎關於pid巡線的帖子,受益頗多,也自己做了一些,但由於藝術專業出身,pid還是雲裡霧裡,學習中。上傳的程式截圖都是完全展開的,並且會做詳細解釋,所以檔案就不上傳了,希望能給新手們帶來靈感。一 搖擺式 2011 11...
基於NanoPi的光感感測器驅動開發
nanopi wiki鏈結 光敏感測器原理圖 描述 1 可以檢測周圍環境的亮度和光強 2 靈敏度可調 圖中藍色數字電位器調節 4 工作電壓3.3v 5v 5 輸出形式 a 模擬量電壓輸出 b 數字開關量輸出 0和1 6 設有固定螺栓孔,方便安裝 7 小板pcb尺寸 3cm 1.6cm 8 電源指示燈...
單纖雙向BIDI光模組的介紹
單纖雙向光模組的含義 bidi光模組是一款使用wdm 波分復用 雙向傳輸技術的光模組,實現了在一根光纖上同時進行光通道內的雙向傳輸。和常規光模組 有兩個光纖插孔 不同的是,bidi光模組只有乙個插孔,它通過整合的雙向耦合器在一根光纜上進行訊號的發射與接收。bidi光模組的工作原理 bidi光模組和傳...