非线性控制2.0——鲁棒控制之H无穷控制器设计

一、基本概念

对于图1所示系统,u为控制输入,y为测量输出,z为被调输出,w为干扰输入,由输入u,w到输出y,z的传递函数G成为增广被控对象,控制器为k。

                                                               

 

二、H无穷控制器设计方法

1. 基于Riccati方程的H∞控制设计

2.基于LMI的H∞控制

 

三、设计实例——一级倒立摆

 

%基于LMI算法的倒立摆状态反馈H∞控制器设计
%State Feedback H∞ controller design based lmi approach
%by 2013/04/03 hemmingway <hemmingway@163.com>

clc
clear all
%----------------------------------------------%
%定义常数矩阵
A=[0  1       0       0;
   0 -0.0883  0.6293  0;
   0  0       0       1;
   0 -0.2357  27.8285 0] ;
B1=[0 2.3566  0 104.2027]';
B2=[0 0.8832  0 2.3566]';
C1=[0.064 0   0    0;
    0     1e-3  0    0;
    0     0   0.11 0;
    0     0   0    0.01;
    0     0   0    0];
D12=[0 0 0 0 0.01]';
D11=[0 0 0 0 0]';
C2=[1 0 0 0;
    0 0 1 0];
D21=[0 0 0 0]';
D22=[0 0 0 0]';

%
setlmis([]);       %建立一个LMI
X=lmivar(1,[4,1]); %定义矩阵变量
W=lmivar(2,[1,4]);
r1=lmivar(1,[1,1]);

%%%%%%%
lmiterm([1 1 1 X],A,1,'s');
lmiterm([1 1 1 W],B2,1,'s');
lmiterm([1 2 1 0],B1');
lmiterm([1 2 2 0],-1);
lmiterm([1 3 1 X],C1,1);
lmiterm([1 3 1 W],D12,1);
lmiterm([1 3 2 0],D11);
lmiterm([1 3 3 r1],-1,1);

%
lmiterm([-2 1 1 X],1,1);

lmisys=getlmis;

%%----------------------------solver---------------------------------------
n = decnbr(lmisys);
c = zeros(n,1);
for j=1:n
     [r1j]=defcx(lmisys,j,r1);
      c(j)=trace(r1j);
end
%c=mat2dec(lmisys,zeros(4,4),zeros(1,4),eye(1))
[copt,xopt]=mincx(lmisys,c, [0 0 0 0 0]);

X=dec2mat(lmisys,xopt,X)
W=dec2mat(lmisys,xopt,W)

K=W*X^(-1);
K=K/100    %%控制器,为什么要除以100? 因为D12矩阵哪里是0.001,不是传统的1

r1=dec2mat(lmisys,xopt,r1);  
gammar=r1^(1/2)               %%gammar

%----------------------------------simu------------------------------------
%
w=0.0;
n=1;
Dt=0.01;
t=-0.8;
t0=t;
x=[-0.2 0 0.3 0]';
for i=1:1500
     if t<0
        %t1=4*pi*t;
        t1=4*pi*t;
        x=[1.1*sin(t1); 1.2*cos(t1); 0.5*sin(t1)+1.0*cos(t1); 0];
    else
      u=K*x;                    %%反馈控制
      Dx=A*x+B1*w+B2*u;
      x=x+Dx*Dt;
    end

    Y(:,n)=x;
    t=t+Dt;
    n=n+1;
end

figure(1)
time = (1:n-1)*Dt+t0;
xpos=Y(1,:);
xangle=Y(3,:);

subplot(2,1,1)
plot((1:n-1)*Dt+t0,xpos,'k')
axis([-0.8 10 -1.5 1.5])
grid on
xlabel('time(s)')
ylabel('Cart positon')

subplot(2,1,2)
plot((1:n-1)*Dt+t0,xangle,'k')
axis([-0.8 10 -1.5 1.5])
grid on
xlabel('time(s)')
ylabel('Pendulum')

LMI算法设计状态反馈H∞控制器的一个例子

mincx

可以查看defcx命令的帮助,这个命令就是辅助mincx命令的,功能是定义求解最优的cost function。

如你给的例子,可以由以下代码定义“c“:
--------------------------------------------------------------------------------------------
n=decnbr(lmisys);                      % lmisys 为矩阵不等式系统的名称
c=zeros(1,n);                                % 为变量c 预设存储空间
for i=1:n
    [Mi]=defcx(lmisys,i,M);
    c(i)=trace(Mi);
end                                                 % 循环命令设置代价函数 c^T x 中的系数 c
[copt,xopt]=mincx(lmisys,c,options);
---------------------------------------------------------------------------------------------
感觉附图中的问题像是用锥补线性化算法(Cone Complement Linear)求解含有互逆矩阵M和X的矩阵不等式问题。如果是的话,附图中的定理就不对了,锥补算法是通过最小化”trace(MX)“及约束(ii)来保证M和X互逆的。

 

  • 12
    点赞
  • 115
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路漫求索_CUMT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值