自動駕駛(七十二)---------LQR控制算法

        以前有寫過MPC的控制算法,主要介紹的也是理論部分,在實際使用過程當中發現C++沒有高效的優化方法,相似python中的cvxpy的庫,因此想繞過去,研究一下LQR控制算法。python

1. PID控制系統算法

        這裏並非要介紹PID系統,而是爲了方便理解LQR,首先咱們看PID系統中的P調節方法:函數

                                      在這裏插入圖片描述

        假設咱們如今狀態是x0,咱們有狀態方程 :                 (u爲控制矩陣)優化

        再假設有一個反饋控制器:                 這裏很重要,能夠認爲是當前的控制量是經過當前的狀態量計算出來的spa

        經過這套方法,咱們就能獲得一個穩定的系統 :  設計

        固然這是基本的理論,再進一步,咱們就會思考,經過這些控制量做爲自變量,再設計一個代價函數,來優化這些控制量?3d

2. LQR控制算法對象

        講到這裏就很天然引出LQR了,首先的問題代價函數是什麼?這裏我直接給出:blog

                                                            

         其中x爲狀態量,u爲控制量,Q爲狀態權重矩陣,R爲控制權重矩陣。接口

          特別的x和u中取值有正有負,因此須要平方和最小,在矩陣中沒有平方,這裏咱們採用轉置乘以自己的作法模擬矩陣的平方,如x^T*x 。這裏狀態量x和控制量u都是多維向量,上式計算的結果是一個標量。

          其實咱們能夠把看做是的多維擴展表達式,這裏咱們須要Q爲半正定,就是但願Q能起到a≥0的效果,R爲正定矩陣就是但願矩陣R可以起到a>0的效果。

          通常的咱們認爲狀態量x爲:橫向誤差、橫向變化率、角度誤差、角度變化率。Q爲咱們提早標定的對角矩陣,標定值對應以上不一樣維度的權重,也能夠爲非對角矩陣,考慮不一樣維度之間的相互關係。

         控制向量u爲:前輪轉角、加速度。一樣的R也爲提早標定的對角矩陣。也能夠考慮相互關係。

         個人理解是Q11選取較大的值,會讓x1很快到0;另一方面,加大R的值,會使得對應的控制量減少,控制器執行更少的動做,意味着系統的狀態衰減將變慢。因此要綜合看具體的實際應用場景來調節,魚和熊掌不可兼得。建議在不一樣場景下采用不一樣的參數。

3. 公式求解

         有了上面的優化目標後,就是如何求解最優的控制量了。下面咱們先進行一些轉換:

          1. 將u=−Kx代入代價函數後:  ,u=−Kx即咱們認爲當前的控制量能夠經過當前的狀態量計算出來。若是咱們能計算出-K就很簡單了,能夠直接套出控制量。

          2. 假設純在一個常量矩陣P使得,  ,這裏就直接這麼假設,接着往下看。

          3. 把上式代入獲得:               

          4. 把2中的方程微分展開:

          5. 狀態變量x的微分用式表示: 

               整理獲得:

               經過矩陣得知上式要想有解只有中間部分爲零,即:

           6. 把 代入上式:

                整理獲得: 

            7. 這裏咱們再令      這裏須要思考一下,爲何能夠這樣假設,湊出結果,//Todo

                 代入:

                  整理獲得: ,獲得這一步就很簡單了,式中A、B、Q、R都是已知量,很容易就能計算出P的結果。

             8. 計算出P再經過就能夠計算出K,也就是達到了咱們一開始的目標,輕鬆獲得當前的控制量。

4. MPC與LQR比較

          首先,LQR的研究對象是現代控制理論中的狀態空間方程給出的線性系統,而MPC的研究對象能夠是線性系統,也能夠是非線性系統。不過如今不少的作法都是將非線性系統線性化,而後進行相關計算,具體要根據本身的工程狀況來肯定哪一種方式比較好,好比以前作MPC的時候,線控車底層速度控制接口就是加速度,那就不必根據IMU再套嵌個一層PID。

          其次,既然是優化問題,那就離不開目標函數的設計,LQR的目標函數在上面已經有描述,MPC的目標函數,多數都是多個優化目標乘以不一樣權重而後求和的方式。雖然方式不一樣,不過都是對達到控制目標的代價累計。

          最後,工做時域上的不一樣,LQR的計算針對同一工做時域,在一個控制週期內,LQR只計算一次,並將這次計算出的最優解下發給控制器便可;而MPC是滾動優化的,計算將來一段時間內,每一個採樣週期都會通過計算,得出一組控制序列,可是隻將第一個控制值下發給控制器。

相關文章
相關標籤/搜索