天天看點

基于LQR的二級倒立擺模組化與MATLAB仿真1、系統模組化2、MATLAB程式

1、系統模組化

二級倒立擺系統的機械部分主要是由小車、擺杆1、擺杆2、導軌、皮帶輪、傳送皮帶等組成,電氣部分由電機、功率放大器、PWM、傳感器、驅動電路以及保護電路組成。系統結構如下圖所示。

基于LQR的二級倒立擺模組化與MATLAB仿真1、系統模組化2、MATLAB程式

中間的推導過程不再贅述

取 x 1 = x x_1=x x1​=x, x 2 = x ˙ x_2=\dot{x} x2​=x˙, x 3 = θ 1 x_3=\theta_1 x3​=θ1​, x 4 = θ ˙ 1 x_4=\dot{\theta}_1 x4​=θ˙1​, x 5 = θ 2 x_5=\theta_2 x5​=θ2​, x 6 = θ ˙ 2 x_6=\dot{\theta}_2 x6​=θ˙2​,系統狀态方程為:

基于LQR的二級倒立擺模組化與MATLAB仿真1、系統模組化2、MATLAB程式

即得到形式如下的狀态方程:

x ˙ = A X + B U \dot{x}=AX+BU x˙=AX+BU

Y = C X + D U Y=CX+DU Y=CX+DU

2、MATLAB程式

A=[0 1 0 0 0 0;
0 -16.6601 -1.2973 0 0.0857 0;
0 0 0 1 0 0;
0 39.0555 18.0514 0 -7.8603 0;
0 0 0 0 0 1;
0 -68.5120 -14.4458 0 25.9635 0];
B=[0;0.7270;0;-1.7044;0;0.2069];
C=[1 0 0 0 0 0;
0 1 0 0 0 0;
0 0 1 0 0 0;
0 0 0 1 0 0;
0 0 0 0 1 0;
0 0 0 0 0 1];
D=[0;0;0;0;0;0];  %這裡的ABCD矩陣都可以根據具體的數值進行修改
p=eig(A)  %求取A矩陣的特征值
[num,den]=ss2tf(A,B,C,D,1);  %将狀态空間模型轉變成傳遞函數形式
printsys(num,den)  %輸出以num為分子多項式,以den為分母多項式的系統傳函
Q=[1000 0 0 0 0 0;
0 0 0 0 0 0;
0 0 10 0 0 0;
0 0 0 0 0 0;
0 0 0 0 10 0;
0 0 0 0 0 0];  %根據具體要求進行修改
Tc=ctrb(A,B);  %可控性
rank(Tc)  %Tc矩陣的秩
To=obsv(A,C);  %可觀性
rank(To)  %To矩陣的秩
R=1;
K=lqr(A,B,Q,R)  %求取K矩陣
Ac=[(A-B*K)];  
Bc=[B];
Cc=[C];
Dc=[D];
T=0:0.005:20;  %時間,第一個和第三個是時間的起始和末尾,中間是采樣間隔
U=0.2*ones(size(T));  %系統輸入
[Y,X]=lsim(Ac,Bc,Cc,Dc,U,T);  %計算系統對輸入向量u的響應
plot(T,Y(:,1),':',T,Y(:,2),'-',T,Y(:,3),'*')  %繪制系統的響應曲線
legend('cart position ', 'pendulum angle1' ,'angle2')  %曲線的參數
grid  %保留圖像的栅格
           

繼續閱讀