LQR演算法如何跟隨變化的期望狀態

2022-06-13 07:27:09 字數 791 閱讀 8873

開門見山,通過lqr的能量函式可以看出,lqr演算法是將狀態量控制到零(關於能量函式請看我的隨筆:lqr要點),但實際控制中我們希望狀態量能夠跟隨期望值

下面將會解決如何用lqr演算法跟隨變化的期望值:

分為兩個子問題:

1 如何穩定在期望值

設實際狀態量x,期望狀態x_ref,將實際狀態量與期望狀態作差,記為x_delta,x_delta作為我們要控制的狀態量

x_delta = x - x_ref

完成迭代:x_delta(i+1) = a * x_delta(i) + b * u(i)

其中u(i) = -k * x_delta(i)        k=dlqr(a,b,q,r)

我們需要的是狀態量x

x = x_delta + x_ref

輸出x我們會發現狀態量就可以穩定在期望值了(lqr控制需要一定時間,因此要適當取迭代次數,另外增大q可以加速收斂)

2 跟隨變化的期望值

通過除錯lqr,我們會發現lqr需要一定時間才可以穩定在期望值,想要達到更好的觀測效果我們需要把期望狀態從連續訊號轉化為階躍訊號,實際控制中我們得到的訊號或是期望的訊號都是階躍的離散的,因此階躍訊號的期望狀態更貼近現實:

並且l要保證此lqr演算法需要在l期間內能夠穩定到x1

控制效果會變成:

如何讓視窗最大化 並讓控制項跟隨變化

讓視窗最大化有2種方法 一,cwnd showwindow sw showmaximized 二,先獲取螢幕大小,然後更改視窗大小 要取得螢幕大小,可以用下面幾個函式 int cx getsystemmetrics sm cxfullscreen int cy getsystemmetrics sm...

如何讓控制項隨窗體的大小變化而變化

根據 窗體的新的大小調整控制項 的 大小 新的x 新的y 控制項 private void setcontrols float newx,float newy,control cons 獲取控制項的tag屬性值,並分割後儲存字串陣列 float a convert.tosingle mytag 0 ...

vue 如何監聽Array的變化

object.defineproperty對陣列進行響應式化是有缺陷的,雖然我們可以監聽到索引的改變。function def obj,key,val set function newval val newval console.log 資料改變了 var data 1,2,3 def data,0...