如何高效地調整PID參數?

最近在做四軸,用得兩級PID串聯。在調整參數的時候總感覺很苦惱,我採用的方式是按照大家普遍經驗去調整參數。總感覺很低效。

不知道有沒有什麼高效的調整pid參數的方法?

如利用matlab等。。。


去年這個時候也在頂著酷暑調四軸姿態控制的PID,今年這個時候看到這個問題,感慨萬千!

四軸這東西能飛,最主要反饋控制就是陀螺儀的角速度反饋。也就是題主做的串級PID的內環控制,有的地方也叫增穩控制,一般用P或者PI就行,需要單獨調。不同的飛行器是有不同的特性的,沒有什麼特別的或者通用的好辦法,主要是靠經驗。這個調不好,數據取不到,用Matlab也沒法辨識。

調角速度反饋,主要就是拿起來搖和試飛,然後找感覺。我不確定題主會不會試飛角速度反饋的四軸,就跟飛航模直升機或者KK板的四軸一樣,這個需要練一段時間。我們就默認他會吧,不會就寫不下去了。

會飛的一個好處就是,不需要綁著調,每次我看到把四軸五花大綁弄在兩個凳子中間的時候,都會覺得超級搞笑的!!

先給定一個P參數,大概算算角速度的數值,PWM的數值,不要太大也不要太小。

抱住四軸!加油門到大概的懸停油門,一半左右。然後前後晃!

如果,抵抗力太大,硬的不行,調小一點。

如果,抵抗力太小,沒什麼感覺,調大一點。

如果能感覺到比較柔和的抵抗力,基本就可以試試飛了。

找個草地,輕輕飛離地面。

如果,來回晃得嚇死人就跟磕了興奮劑一樣,調小一點。

如果,來回晃得還挺好玩的就跟喝高了一樣,稍微調小一點。

如果,一打舵直接翻了,調大一點。

如果,一打舵太靈敏不好控制,稍微調大一點。

就這樣來來回回,調到比較靈敏又能控制的程度。

然後就可以取數據了!

無論是用SD卡保存也好,用無線傳輸直接發到電腦也好,反正找個辦法,把PWM數據和陀螺的角速度數據保存下來。

然後Matlab系統辨識工具箱ident,不會可以help。

傳遞函數大概形式是k/(1+Ts)s。

辨識出來這個傳遞函數裡面的參數以後,就相當於建立了這個飛行器的數學模型了。有了這個模型,加入控制器部分。用Simulink模擬(設定採樣周期為你實際的控制周期)或者實現為狀態空間模型,然後以控制周期為周期離散化後直接用for循環編程模擬都行。

這樣就可以開開心心的根據曲線調PID參數了,輸入階躍信號,根據你的動態響應的要求,最好不要有超調和震蕩。

兩點重要的經驗總結一下。

1. 角速度控制器要單獨調節

2. 最好不要綁在凳子上調


推薦一本書:

《PID控制器參數整定方法及應用》

沒找到豆瓣鏈接,貼個亞馬遜鏈接吧:

《PID控制器參數整定方法及應用》 楊平, 鄧亮, 徐春梅, 李芹【摘要 書評 試讀】圖書


給自己以前寫的程序打關廣告吧。

調用matlab節點的PID 控制

就是一個手動調節的程序,傳遞函數要自己改。


用烈火四軸的套件,它的遙控器上有三個電位器旋鈕。一個傳參P,一個傳參I,一個傳參D.四軸架起來,邊旋電位器,邊看姿態。效果絲般順滑。10min就能調到穩定飛行。而且有助於肉眼理解PID三個參數對應的效果。比模擬一個一個輸入參數調的方便多了。。。。


可以將一些智能演算法例如PSO應用到pid參數的整定上。因為整定本身就是一個全局尋優的過程。


試試用Matlab變一個 Nealder-Mead 優化,然後結合simulink去提高精確度


推薦閱讀:

機器學習「判定模型」和「生成模型『有什麼區別?
機器學習論文的疑惑,求教?
設計embedding維數的時候有什麼講究?
一個演算法工程師的日常是怎樣的?
卷積神經網路保證「位移、尺度、形變不變性」該怎麼理解?

TAG:MATLAB | 機器學習 | 自動控制 | PID傳遞函數 |