一說到控制,大家肯定想說PID,通過調節PID的參數,可以滿足多數應用場景,既然PID控制能夠滿足多數應用場景,那還有必要用其他的控制算法嗎?當然有必要。模型預測控制算法是最近突然火起來的一種控制算法,模型預測控制能夠火起來必然有他的過人之處,模型預測控制最大的優勢就是能夠處理帶多個約束的控制問題,在滿足多約束條件下能夠給出最優控制量。
假想一個小車讓他以最快的速度跑100m,這個問題好像比較簡單,把油門踩到底直接衝向終點就可以了。但是,似乎好像沒那麼簡單,問題的關鍵是隻讓小車以最短的時間剛好跑100m,不能多也不能少,大家想想一想有沒有好的辦法,matlab官方給出了一個很好的例子,用模型預測控制來解決這個問題,下面給出B站上的matlab官方鏈接。
鏈接:https://www.bilibili.com/video/av455281550
爲了更加深入的理解模型預測控制,本文借用網上的一個教程。
1 問題描述
在無限光滑的一維水平直線上有一個質量爲m的小車,初始位置與初始速度都爲0,現需要設計控制器,在傳感器測得小車位置x的基礎上,爲小車提供外力u,使其跟隨參考點xr
圖1 例圖
2 預測模型
首先建立動力學方程:
選取狀態向量(除非特殊說明,後文中x表示狀態向量,而不是小車位置),構建系統狀態方程爲:
其中,
。
3 預測模型離散化
採用前向歐拉法將狀態方程離散化:
其中 ,T爲控制週期。
4 預測
MPC方法需要對未來系統狀態進行預測,記未來 p 個控制週期內預測的系統狀態爲:
p稱爲預測時域,括號中 k+1|k 表示在當前 k 時刻預測k+1 時刻的系統狀態,以此類推。另外,預測動態系統未來狀態時,還需要知道預測時域內的控制量Uk :
這是將要求解的優化問題的獨立變量。
現在,我們可以通過離散化狀態方程依次對未來 p 個控制週期的系統狀態進行預測:
整合成矩陣形式:
其中,
上式中的下三角形式,直接反映了系統在時間上的因果關係,即 k+1時刻的輸入對 K時刻的狀態沒有影響, k+2時刻的輸入對 k 和 k+1 時刻沒有影響,等等。
5. 優化
這一節我們將求解預測時域內的控制輸出Uk ,在求解優化問題之前,我們首先明確優化問題的數學描述。
我們的控制目標是使系統的狀態跟蹤期望的一條軌跡,通常稱爲參考值,定義預測時域內的參考值序列:
注意,在 k時刻進行控制的時候,控制器就必須已經得到了 k 時刻到 k+p 時刻的參考值,而PID就不需要這麼多信息,這是MPC的一個缺點。
我們希望尋找最佳的控制量 ,使得預測時域內的狀態向量與參考值越接近越好,這是一個開環最優控制問題。爲此,我們用預測狀態向量與參考值之間的累計誤差定義一個簡單的優化目標函數:
經常地,我們不希望控制動作太大,優化目標函數再添加一項對控制量的約束:
因此,該優化問題可以描述如下:
我們將優化函數 展開後合併同類項:
上式中 是常數項,對“ 爲何值時取得最小值”這一問題沒有影響,因此直接捨去。
matlab輸入 “help quadprog”查看二次型優化函數quadprog的說明文檔,令:
可得最終優化目標函數,至此可直接調用matlab quadprog函數求解 ,將 的****第一個元素**(**求解了多個控制量,但是隻用第一個********)****提取出來,作爲本控制週期的控制量。
6 仿真
對於例子的動力學方程:
兩邊同時拉普拉斯變換:
可得傳遞函數:
在simulink中搭建仿真環境如圖,並編寫MPC控制器:
圖 2 仿真
7總結
上述例子給出的是一個不帶約束的實際問題,如果在求解帶約束的問題優化可直接調用matlab函數中優化求解器fmincon。如果大家看了數學推導感覺很複雜,那就先理解模型預測控制的思想,加深理解。上面給出了模型預測控制的簡單例子,模型預測控制也有很多的變種,具體問題具體分析,沒有最好的,只有最合適的。
-
- End - -
技術發展的日新月異,阿木實驗室將緊跟技術的腳步,不斷把機器人行業最新的技術和硬件推薦給大家。看到經過我們培訓的學員在技術上突飛猛進,是我們培訓最大的價值。如果你在機器人行業,就請關注我們的公衆號,我們將持續發佈機器人行業最有價值的信息和技術。
本文由博客一文多發平臺 OpenWrite 發佈!