如何高效地調整PID參數?
01-06
最近在做四軸,用得兩級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維數的時候有什麼講究?
※一個演算法工程師的日常是怎樣的?
※卷積神經網路保證「位移、尺度、形變不變性」該怎麼理解?