Matlab直线一级倒立摆控制方法研究
1?研究背景
倒立擺是一個開環不穩定的強非線性系統,其控制策略與雜技運動員頂桿平衡表演的技巧有異曲同工之處,目的在于使得擺桿處于臨界穩定狀態,是進行控制理論研究的典型實驗平臺。20世紀50年代,麻省理工學院的控制論專家根據火箭助推器原理設計出了第一套倒立擺實驗設備,開啟了最初的相關研究工作。倒立擺的種類豐富多樣,按照其結構可將其分為:直線倒立擺、環形倒立擺以及平面倒立擺等,按照擺桿級數又可將其分為:一級、二級甚至三級等。
圖1?直線一級倒立擺原理
按照工作原理可將現有的直線一級倒立擺實驗裝置抽象成小車和擺桿組成的系統,其中小車可沿固定導軌左右移動,擺桿可繞小車與擺桿之間的鉸接點自由轉動,如圖1所示。控制系統依據讀取到的小車位置以及擺桿角度信號,通過控制作用在小車上的水平力,使其沿固定導軌左右移動,可以使得擺桿始終處于垂直向上這樣一個臨界穩定位置,實驗裝置具體參數如表1所示。
2?模型推導
設N和P為小車與擺桿相互作用力的水平和垂直方向的分量。
圖2?小車受力分析圖
下面N和P為小車與擺桿相互作用力的水平和垂直方向的分量。
3?現代控制理論分析
3.1?狀態空間方程
3.2?能控性和能觀性
在MATLAB中進行計算,代碼如下:
A=[0 1 0 0;0 -0.0883 0.6293 0;0 0 0 1;0 -0.2357 27.8285 0];B=[0;0.8832;0;2.3566];C=[1 0 0 0;0 0 1 0];control=[B A*B A^2*B A^3*B];disp('可控性矩陣的秩:')disp(rank(control))observe=[C;C*A];disp('可觀性矩陣的秩:')disp(rank(observe))3.3?狀態反饋
3.4?狀態觀測器
3.5 LRQ控制
線性二次型性能指標易于分析、處理和計算,而且通過線性二次型最優設計方法得到的倒立擺系統具有較好的魯棒性與動態特性以及能夠獲得線性反饋結構等優點,因而在實際的倒立擺控制系統設計中得到了廣泛的應用。但是在使用該方法時,最優控制的效果取決于加權陣Q和R的選取。
從上述圖中可以發現,Q矩陣中,增加Q11、Q33,系統響應時間有明顯改善,穩定時間和上升時間變短,并且使擺桿的角度變化減少。增大Q11、Q33,系統的響應還會更快,但是對于實際離散控制系統,過大的控制量會引起系統震蕩。反復試驗當取Q11=1000,Q33=200時,如圖12所示,此時擺桿角度超調足夠小,穩態誤差滿足要求,穩定時間也不超過2秒,達到了良好的控制效果。
附錄
MATLAB代碼如下:
clear;clc%%A=[0 1 0 0;0 -0.0883 0.6293 0;0 0 0 1;0 -0.2357 27.8285 0];B=[0;0.8832;0;2.3566];C=[1 0 0 0;0 0 1 0];D=[0;0];Q=C'*C;R=1;K=lqr(A,B,Q,R)P=[-24,-24,-2.4+3.2*1i,-2.4-3.2*1i] ;K=acker(A,B,P)P1=[-8.01 -7.99 -8.02 -7.98];%P1=[-48.01 -47.99 -8.02 -7.98];G=(place(A',C',P1))' %% 啟動simulink模型sim('model_daolibai.slx')figure(1)plot(tout,yout(:,1),tout,yout(:,2),tout,yout(:,3),tout,yout(:,4))legend('實際控制的小車位移','實際控制的小車角度','觀測到的倒立擺位移','觀測到的倒立擺角度')title('控制系統位移和角度變化')xlabel('時間/s')ylabel('幅值')figure(2)plot(tout,yout(:,1),tout,yout(:,3))legend('實際控制的小車位移','觀測到的小車位移')title('小車位移變化')xlabel('時間/s')ylabel('幅值')figure(3)y=yout(:,1)-yout(:,3);plot(y)title('實際控制與觀測到的小車位移誤差')figure(4)plot(tout,yout(:,2),tout,yout(:,4))legend('實際控制的倒立擺角度','觀測到的倒立擺角度')title('倒立擺角度變化')xlabel('時間/s')ylabel('幅值')figure(5)y=yout(:,2)-yout(:,4);plot(y)title('實際控制與觀測到的倒立擺角度誤差') %% 00Q=C'*C;K=lqr(A,B,Q,R)sim('untitled10528_1.slx')figure(1)plot(tout,yout(:,1),tout,yout(:,2))legend('小車位移','擺桿角度')grid ontitle('控制系統位移和角度變化')xlabel('時間/s')ylabel('幅值')%% 11Q(1,1)=500;Q(3,3)=100;K=lqr(A,B,Q,R)sim('untitled10528_1.slx')figure(1)plot(tout,yout(:,1),tout,yout(:,2))legend('小車位移','擺桿角度')grid ontitle('控制系統位移和角度變化')xlabel('時間/s')ylabel('幅值')%% 22Q(1,1)=1000;Q(3,3)=200;K=lqr(A,B,Q,R)sim('untitled10528_1.slx')figure(1)plot(tout,yout(:,1),tout,yout(:,2))legend('小車位移','擺桿角度')grid ontitle('控制系統位移和角度變化')xlabel('時間/s')ylabel('幅值') %% 33Q(1,1)=2000;Q(3,3)=1000;K=lqr(A,B,Q,R)sim('untitled10528_1.slx')figure(1)plot(tout,yout(:,1),tout,yout(:,2))legend('小車位移','擺桿角度')grid ontitle('控制系統位移和角度變化')xlabel('時間/s')ylabel('幅值')差')?
總結
以上是生活随笔為你收集整理的Matlab直线一级倒立摆控制方法研究的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Centos 配置JAVA_HOME
- 下一篇: Python代码加密,将python文件