【无标题】LQR倒立摆——matlab仿真笔记

// A code block
var foo = 'bar';
clear all
syms g M m l s(t) J theta(t) f(t)
T1 = 1/2*M*diff(s,t)^2;
T2 = 1/2*J*diff(theta,t)^2 + 1/2*m*(diff(s+1/2*l*sin(theta),t)^2 + diff(1/2*l*cos(theta),t)^2);
%原dxp和dyp,这里直接带入了
V = m*g*1/2*l*cos(theta);
L = T1 + T2 - V;
eqn = functionalDerivative(L,[s;theta]) == [-f;0]
eqn = simplify(eqn)


syms M m l theta J dtheta F g
M=1;
m= 1;
l= 1;
%把上方方程写为矩阵形式 线性化后
Q = [M+m 0.5*m*l;0.5*m*l J+0.25*m*l^2];
J = 1/3*m*l^2;
%Q = [M+m 0.5*m*l;0.5*m*l J];
inv(Q)
%[s..theta..  ]
inv(Q)*[F;0.5*m*l*g*theta];
%化简
A1= [1 0;0 2*1/(m*l*g)];
inv(A1)*inv(Q)


A=[0 1 0 0;
   0 0 -5.88 0;
   0 0 0 1;
   0 0 23.52 0]
B=[0;0.8;0;-1.2]
C=[1 0 0 0;0 0 1 0]
D=[0;0]
%转化为状态空间模型模式
sys = ss(A,B,C,D)
%求解A的特征值
eig(A)
%判断是否可控,满秩则可控
Qc=ctrb(A,B)
rank(Qc)
%obsv是计算可观察性矩阵的函数
Qb=obsv(A,C)
rank(Qb)
Q = [1 0 0 0
     0 1 0 0
     0 0 10 0
     0 0 0 10];
%求控制器增益
%R权重 
R = 0.1;
K = lqr(A,B,Q,R)

Ac=A-B*K;
x0 = [0.1;0;0.1;0]; %初始状态
t = 0:0.05:20;
u = zeros(size(t));
[y,x]=lsim(Ac,B,C,D,u,t,x0); 
plot(t,y);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值