日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

对倒立摆的LQR控制

發布時間:2023/12/14 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对倒立摆的LQR控制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 問題建模

首先對待研究的問題建立數學模型
在倒立擺模型分析這篇文章里,我們已經做了完整的受力分析。最終得到了關于系統變量的微分方程。
(M+m)x¨+bx˙?mlψ¨=u(M+m)\ddot{x}+b\dot{x}-ml\ddot{\psi}= u(M+m)x¨+bx˙?mlψ¨?=u
(I+ml2)ψ¨?mglψ=mlx¨(I+ml^2)\ddot{\psi}-mgl\psi = ml\ddot{x}(I+ml2)ψ¨??mglψ=mlx¨

2 狀態空間

可以將狀態空間理解為一個包含系統輸入、系統輸出和狀態變量的集合,它們之間的關系可以用一個一階微分方程表達出來。

狀態空間(集合)={系統輸入系統輸出狀態變量}=一階微分方程狀態空間(集合)=\left\{ \begin{aligned} 系統輸入\\ 系統輸出\\ 狀態變量 \end{aligned} \right\}=一階微分方程 =?????????????=
通過觀察我們知道,目前系統模型是以二階微分方程的形式描述的。為了消除方程中的高階項,可以整理得到下面的式子。
{x˙=x˙x¨=m2l2gI(m+M)+mMl2ψ?b(I+ml2)I(m+M)+mMl2x˙+(I+ml2)I(m+M)+mMl2uψ˙=ψ˙ψ¨=mlg(m+M)I(m+M)+mMl2ψ?mlbI(m+M)+mMl2x˙+mlI(m+M)+mMl2u\left\{\begin{array}{l} \dot{x}=\dot{x}\\ \ddot{x}=\frac{m^2l^2g}{I(m+M)+mMl^2} \psi-\frac{b(I+ml^2)}{I(m+M)+mMl^2} \dot{x}+\frac{(I+ml^2)}{I(m+M)+mMl^2}u\\ \dot{\psi}=\dot{\psi}\\ \ddot{\psi}=\frac{mlg(m+M)}{I(m+M)+mMl^2}\psi-\frac{mlb}{I(m+M)+mMl^2}\dot{x}+\frac{ml}{I(m+M)+mMl^2}u \end{array}\right.??????????x˙=x˙x¨=I(m+M)+mMl2m2l2g?ψ?I(m+M)+mMl2b(I+ml2)?x˙+I(m+M)+mMl2(I+ml2)?uψ˙?=ψ˙?ψ¨?=I(m+M)+mMl2mlg(m+M)?ψ?I(m+M)+mMl2mlb?x˙+I(m+M)+mMl2ml?u?
已知系統狀態空間方程的標準形式為:
{x˙=Ax+Buy=Cx+Du\left\{\begin{array}{l} \dot{x}=Ax+Bu\\ y=Cx+Du \end{array}\right. {x˙=Ax+Buy=Cx+Du?
式中x˙\dot{x}x˙表示系統中的一階微分項,yyy表示系統狀態。以矩陣運算的形式表示系統的狀態空間方程:
[x˙x¨ψ˙ψ¨]=[01000?b(I+ml2)I(m+M)+mMl2m2l2gI(m+M)+mMl2000010?mlbI(m+M)+mMl2mlg(m+M)I(m+M)+mMl20]×[xx˙ψψ˙]+[0(I+ml2)I(m+M)+mMl20mlI(m+M)+mMl2]u\begin{bmatrix} \dot{x}\\ \ddot{x}\\ \dot{\psi}\\ \ddot{\psi} \end{bmatrix}= \begin{bmatrix} 0 & 1 & 0 & 0\\ 0 & -\frac{b(I+ml^2)}{I(m+M)+mMl^2} & \frac{m^2l^2g}{I(m+M)+mMl^2} & 0\\ 0 & 0 & 0 & 1 \\ 0 & -\frac{mlb}{I(m+M)+mMl^2} & \frac{mlg(m+M)}{I(m+M)+mMl^2} & 0 \end{bmatrix} \times \begin{bmatrix} x\\ \dot{x}\\ \psi\\ \dot{\psi} \end{bmatrix} + \begin{bmatrix} 0\\ \frac{(I+ml^2)}{I(m+M)+mMl^2}\\ 0\\ \frac{ml}{I(m+M)+mMl^2} \end{bmatrix} u ?????x˙x¨ψ˙?ψ¨???????=??????0000?1?I(m+M)+mMl2b(I+ml2)?0?I(m+M)+mMl2mlb??0I(m+M)+mMl2m2l2g?0I(m+M)+mMl2mlg(m+M)??0010???????×?????xx˙ψψ˙???????+??????0I(m+M)+mMl2(I+ml2)?0I(m+M)+mMl2ml????????u
y=[10000010]×[xx˙ψψ˙]+[0]×uy= \begin{bmatrix} 1 & 0 & 0 & 0\\ 0 & 0 & 1 & 0 \end{bmatrix} \times \begin{bmatrix} x\\ \dot{x}\\ \psi\\ \dot{\psi} \end{bmatrix} + \begin{bmatrix} 0 \\ \end{bmatrix} \times u y=[10?00?01?00?]×?????xx˙ψψ˙???????+[0?]×u

3 LQR控制器設計

L(Linear)Q(Quadratic)R(Regulator),直譯為線性二次型控制器。
可以通過加入反饋,使系統最終能達到穩定狀態,但如何選取最好的系統特征值(極點)在系統收斂的前提下實現最優的收斂過程,這是我們目前要考慮的問題。
這里我們引入目標函數(價值函數),使系統在收斂的同時,滿足JJJ最小:
J=∫t0tf[XTQX+UTRU]dtmin(J)J=\int ^{t_f}_{t_0}[X^TQX+U^TRU]dt\\ min(J) J=t0?tf??[XTQX+UTRU]dtmin(J)

  • QQQ是一個對角矩陣,XTQX=ax12+bx22+cx32+......X^TQX=ax_1^2+bx_2^2+cx_3^2+......XTQX=ax12?+bx22?+cx32?+......,當系統中的狀態變量x≠0x≠0x?=0時,我們可以通過調節QQQ中元素的值來改變該變量的對JJJ的影響。QQQ中較大的一項對應在收斂過程中優先考慮的系統變量。
  • 同理,UTRUU^TRUUTRU則代表了系統輸入UUU對價值函數JJJ的影響。因為JJJ是積分的形式,當矩陣RRR中某一項較大,則意味著我們希望該項對應的系統輸入能夠快速收斂到0。這么做的現實意義往往是以最小的代價(例如能耗)實現系統的穩態。
    式子中代表系統輸入的UUU在一個能夠實現自穩定的系統中(例如我們這里設計的倒單擺系統)代表控制器反饋回路的輸出。
  • 們目前涉及的倒立擺系統只有一個輸入,即倒立擺所受到的外部牽引力UUU,所以矩陣RRR僅有一個元素。另外有四個系統狀態變量,分別是x,x˙,ψ,ψ˙x,\dot{x},\psi,\dot{\psi}x,x˙,ψ,ψ˙?,因此對角矩陣QQQ的規模為4×44\times44×4
    在MATLAB中,我們可以調用lqr()lqr()lqr()函數生成滿足JJJ最小的反饋矩陣KKKKKK對應的就是各個系統變量反饋路徑中的增益。即:
    U=[K1,K2,K3,K4]×[xx˙ψψ˙]U=[K_1, K_2, K_3, K_4]\times\begin{bmatrix} x\\ \dot{x}\\ \psi\\ \dot{\psi} \end{bmatrix}U=[K1?,K2?,K3?,K4?]×?????xx˙ψψ˙???????


    下圖是倒立擺開環系統的階躍響應。顯然系統是不收斂的。


    引入LQR反饋后系統的階躍響應

    4 MATLAB 代碼

    clc; clear; close all;% Parameters: % m: mass of pendulum (kg) % M: mass of cart (kg) % b: dampling coefficient % I: rotional inertia % g: acceleration of gravity % L: the distance from mass center to the hingem = 3.375; M = 5.40; b = 0.01; I = 0.0703125; g = 9.80665; L = 0.25;% create transfer function model s = tf('s');q = (m + M) * (I + m * L^2) - (m * L)^2;P_cart = (((I + m * L^2) / q) * s^2 - (m * g * L / q)) / ...(s^4 + (b * (I + m * L^2)) * s^3 / q - ((M + m) * m * g * L) * s^2 / q - b * m * g * L * s / q);P_pend = (m * L * s / q) / ...(s^3 + (b * (I + m * L^2)) * s^2 / q - ((M + m) * m * g * L) * s / q - b * m * g * L / q);sys_tf = [P_cart; P_pend];inputs = {'u'}; outputs = {'x'; 'phi'}; set(sys_tf,'InputName',inputs); set(sys_tf,'OutputName',outputs);sys_tf% create state-space model p = I * (m + M) + m * M * L^2;A = [0, 1, 0, 0;0, -b * (I + m * L^2) / p, (m^2 * L^2 * g) / p, 0;0, 0, 0, 1;0, -(m * L * b) / p, m * L * g * (M + m) / p, 0];B = [0;(I + m * L^2) / p;0;m * L / p];C = [1, 0, 0, 0;0, 0, 1, 0];D = [0;0];% definitions of system variables states = {'x' 'x_dot' 'phi' 'phi_dot'}; inputs = {'u'}; outputs = {'x'; 'phi'};sys_ss = ss(A, B, C, D, 'statename', states, 'inputname', inputs, 'outputname', outputs);% poles of open loop system poles = pole(sys_tf); poles% impulse response of system t = 0: 0.01: 1; impulse(sys_ss, t);% step response of system t = 0: 0.01: 1; step(sys_ss, t);% LQR simulation % Q matrix of LQR controller Q = [1000, 0, 0, 0;0, 0, 0, 0;0, 0, 500, 0;0, 0, 0, 0];R = 0.1;% optimal gain matrix K K = lqr(A, B, Q, R);Ac = A - B * K; sys_lqr = ss(Ac, B, C, D, 'statename', states, 'inputname', inputs, 'outputname', outputs);% impulse response of system t = 0: 0.01: 2; impulse(sys_lqr, t);100% step response of system t = 0: 0.01: 3; step(sys_lqr, t);

    總結

    以上是生活随笔為你收集整理的对倒立摆的LQR控制的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。