精华内容
下载资源
问答
  • 基于MATLAB鲁棒控制工具箱,设计出计算机硬盘磁头的H无穷鲁棒控制器,具有良好的性能。
  • Matlab 鲁棒控制宝典

    2011-03-17 15:18:04
    Matlab 鲁棒控制宝典 对于学习鲁棒控制的仿真工具
  • 案例来源于《现代鲁棒控制理论与应用》(梅生伟等) 程序已经调试通过,对于利用matlab鲁棒控制工具箱很有启发。
  • 风力发电系统中Matlab鲁棒控制工具箱的应用,黄金杰,沈恂,针对风力发电系统中风速变化的随机性、风机力矩的扰动、高频未建模的不确定性,本文利用Hinf回路成形算法对成形后的系统设计鲁棒��
  • 鲁棒控制工具箱提供了一系列的函数和工具以支持带有不确定元素的多输入多输出控制系统的设计。在该工具箱的帮助下,你可以建立带有不确定参数和动态特性的LTI模型,也可以分析MIMO系统的稳定性裕度和最坏情况下的...
  • MATLAB鲁棒控制器实现

    千次阅读 2018-05-25 12:02:22
    % 基于LMI算法鲁棒控制器设计 setlmis([]); %新建LMI不等式 C1=[1000 0 0 0; 0 200 0 0; 0 0 10 0; 0 0 0 1];% 矩阵C1的选择,可修改,影响控制器的精度 X = lmivar(1,[4 1]); % 定义实对称矩阵X 4*4 W=lmivar(2,...
     clc
     clear all
    % 平衡小车相关参数;
    g = 9.81;						% gravity acceleration重力加速度 [m/sec^2]
    M = 0.015;						% wheel weight车轮重量(个人更改) [kg]
    m = 1.5;						% body weight车体重量(个人更改) [kg]
    L = 0.045;			            % 车轮轴心到质心的距离                             
    b = 0.1;                        % 小车的摩擦系数                             
    J= m * L^2 / 3;             % 小车的转动惯量m * L^2 / 3;
    f=0.002;                       %小车的摩擦阻力距
    
    
    % 状态空间矩阵的计算
    tmp=J*(M+m)+m*M*J^2;
    
    
    % A矩阵
    A_22= -(J+m*J^2)*b/tmp;
    A_23= m*m*g*J/tmp;
    A_24= -m*L*f/tmp;
    A_42= -m*L*b/tmp;
    A_43= m*g*L*(M+m)/tmp;
    A_44= -f*(M+m)/tmp;
    %B1矩阵
    B1_2=m*L/tmp;
    B1_4=(M+m)/tmp;
    %B2矩阵
    B2_2=J+m*L*L/tmp;
    B2_4=m*L/tmp;
    
    
    % 矩阵的表示
    A=[0 1 0 0;0 A_22 A_23 A_24;0 0 0 1;0 A_42 A_43 A_44];
    B1=[0;B1_2;0;B1_4];
    B2=[0;B2_2;0;B2_4];
    D12=[0 0 0 1]';
    
    
    % 基于LMI算法鲁棒控制器设计
    setlmis([]); %新建LMI不等式
    C1=[1000 0   0    0;
        0    200  0    0;
        0     0  10  0;
        0     0   0    1];% 矩阵C1的选择,可修改,影响控制器的精度
    X = lmivar(1,[4 1]);                   % 定义实对称矩阵X 4*4
    W=lmivar(2,[1 4]);                   % 定义矩阵W 1*4
    p=lmivar(1,[1 1]);                       % 定义系数p 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],0);
    lmiterm([1 3 3 p],-1,1);
    lmiterm([-2 1 1 X],1,1); 
    lmis = getlmis;
    n = decnbr(lmis);
    c = zeros(n,1);
    for j=1:n
         [pj]=defcx(lmis,j,p);
          c(j)=trace(pj);
    end
    %c = mat2dec(lmis,zeros(4,4),zeros(1,4),eye(1));       %????????
    options = [1e-5,0,0,0,0] ;      % 精度值
    [copt,xopt] = mincx(lmis,c,options);% 极小化
    [tmin,xfeas] = feasp(lmis);% 计算可行性向量
    
    
    % 返回数值
    
    
    XX= dec2mat(lmis,xfeas,X)
    WW= dec2mat(lmis,xfeas,W)
    p=dec2mat(lmis,xopt,p)
    % 控制器计算5
    K=WW*XX^(-1)

     

    展开全文
  • MATLAB7.8鲁棒控制

    2017-09-15 20:20:50
    MATLAB 鲁棒控制工具包的英文使用手册
  • MATLAB7.8鲁棒控制宝典

    2009-08-16 16:30:07
    MATLAB7.8鲁棒控制宝典MATLAB7.8鲁棒控制宝典MATLAB7.8鲁棒控制宝典MATLAB7.8鲁棒控制宝典
  • MATLAB鲁棒控制设计

    2015-05-01 16:34:52
    这是一本关于鲁棒控制的书,主要内容是关于如何利用MATLAB 进行相关鲁棒控制的设计
  • 基于MATLAB上肢康复机械臂鲁棒控制研究
  • 利用matlab实现H-infinity鲁棒控制,学习鲁棒控制matlab编程的很好教程 利用matlab实现H-infinity鲁棒控制,学习鲁棒控制matlab编程的很好教程
  • 利用matlab实现H-infinity鲁棒控制

    热门讨论 2011-12-08 09:58:10
    利用matlab实现H-infinity鲁棒控制,学习鲁棒控制matlab编程的很好教程
  • 鲁棒控制matlab程序

    热门讨论 2009-11-12 05:41:47
    is how to write the Matlab code. I will here try to give a short overview of some useful Matlab functions. Hopefully this will help you when trying to design your first H1- controller.
  • matlab开发-主减振器弹簧系统的鲁棒控制设计。质量/阻尼/弹簧控制系统设计的M文件,使用鲁棒控制工具箱,版本三
  • 前言:对于模型准确的对象,我们可以设计控制器直接进行控制,但通常实际情况下总是存在着种种不确定因素,如参数变化,未建模动态变化等,鲁棒控制就是在模型不精确和其他变化因素的条件下,使系统仍能保持预期的...

    鲁棒跟踪逆推控制器设计

    前言:对于模型准确的对象,我们可以设计控制器直接进行控制,但通常实际情况下总是存在着种种不确定因素,如参数变化,未建模动态变化等,鲁棒控制就是在模型不精确和其他变化因素的条件下,使系统仍能保持预期的性能。在这里我只针对未建模动态变化即仅针对存在外部扰动的情况进行讨论,在这种情况下对2R型平面机器人进行控制器的设计。
      对于存在外部扰动的平面2R机器人的动力学方程:M(q)q¨+c(q,q˙)+G(q)+d=τ M\left( q \right) \ddot{q}+c\left( q,\dot{q} \right) +G\left( q \right) +d=\tau M(q)M\left( q \right) 是对称正定的质量矩阵,c(q,q˙)c\left( q,\dot{q} \right) 是包含科氏力和向心力的矢量,G(q)G\left( q \right) 是重力矩矢量,dd 是外部扰动,τ\tau 是关节力矩。

    鲁棒跟踪backstepping控制器设计(matlab实现):

    function [sys,x0,str,ts] = RobustControler(t,x,u,flag)
    switch flag,
      case 0,
        [sys,x0,str,ts]=mdlInitializeSizes;
      case 1,
        sys=mdlDerivatives(t,x,u);
      case {2,4,9},
        sys=[];
      case 3,
        sys=mdlOutputs(t,x,u);
      otherwise
        DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
    end
    function [sys,x0,str,ts]=mdlInitializeSizes   
    sizes = simsizes;
    sizes.NumContStates  = 0; 
    sizes.NumDiscStates  = 0;  
    sizes.NumOutputs     = 6; 
    sizes.NumInputs      = 4;  
    sizes.DirFeedthrough = 1;   
    sizes.NumSampleTimes = 0;   
                               
    sys = simsizes(sizes);
    x0  = [];            
    str = [];                   
    ts  = [];                  
     
    function sys=mdlOutputs(t,x,u)   
    th1 = u(1);
    th2 = u(2);
    q = [th1;th2];
    dth1 = u(3);
    dth2 = u(4);
    dq = [dth1;dth2];
    
    %跟踪轨迹x1d,dx1d,ddx1d
    q1d = 0.5*sin(t) + 0.1*sin(3*t) - 0.2*sin(4*t);
    q2d = 0.1*sin(2*t) + 0.2*sin(3*t) - 0.1*sin(4*t);
    x1d = [q1d; q2d];
    dq1d = 0.5*cos(t) + 0.3*cos(3*t) - 0.8*cos(4*t);
    dq2d = 0.2*cos(2*t) + 0.6*cos(3*t) - 0.4*cos(4*t);
    dx1d = [dq1d;dq2d];
    ddq1d = -0.5*sin(t) - 0.9*sin(3*t) + 3.2*sin(4*t);
    ddq2d = -0.4*sin(2*t) - 1.8*sin(3*t) + 1.6*sin(4*t);
    ddx1d = [ddq1d;ddq2d];
    
    %系统参数
    g = 9.81;
    m1 = 1;
    m2 = 2;
    l1 = 1;
    l2 = 2;
    d = [th1*dth1*sin(th2)+dth1; th2*dth2*cos(th1)+dth2]; %外部干扰矩阵d
    %质量矩阵M
    M = [l2^2*m2+2*l1*l2*m2*cos(th2)+l1^2*(m1+m2) l2^2*m2+l1*l2*m2*cos(th2);
         l2^2*m2+l1*l2*m2*cos(th2) l2^2*m2];
    %离心力和哥氏力矢量
    C = [-m2*l1*l2*sin(th2)*dth2^2-2*m2*l1*l2*sin(th2)*dth1*dth2; m2*l1*l2*sin(th2)*dth1^2];
    %重力矢量
    G = [m2*l2*g*cos(th1+th2)+(m1+m2)*l1*g*cos(th1); m2*l2*g*cos(th1+th2)];
    
    %跟踪误差
    z1 = q - x1d;
    L1 = [2 0;0 2];
    K1 = [3 0 ;0 3];
    A1 = K1;
    %取虚拟控制x2d
    x2d = dx1d - L1*A1*z1;
    z2 = dq - x2d;
    f2 = -inv(M)*G - inv(M)*C;
    xite2 = 2;
    f2_k = f2 - (L1*K1*dx1d+ddx1d+(-L1*K1)*dq);
    L2 = [4 0;0 4];
    K2 = [5 0;0 5];
    A2 = K2 + inv(L2)*(xite2*(d*d'))*inv(L2);
    ut = -M*(f2_k + L2*inv(L1)*z1 + L2*A2*z2);
    
    e1 = th1 - q1d;
    e2 = th2 - q2d;
    de1 = dth1 - dq1d;
    de2 = dth2 - dq2d;
    
    sys(1) = ut(1);
    sys(2) = ut(2);
    sys(3) = e1;
    sys(4) = e2;
    sys(5) = de1;
    sys(6) = de2;
    

    2R型开链机器人动力学模型建立

    function [sys,x0,str,ts] = RobustPlant(t,x,u,flag)
    switch flag,
      case 0, 
        [sys,x0,str,ts]=mdlInitializeSizes;
      case 1, 
        sys=mdlDerivatives(t,x,u);
      case {2,4,9}, 
        sys=[];
      case 3, 
        sys=mdlOutputs(t,x,u);
      otherwise
        DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
    end
    function [sys,x0,str,ts]=mdlInitializeSizes   %系统的初始化
    sizes = simsizes;
    sizes.NumContStates  = 4;   
    sizes.NumDiscStates  = 0;   
    sizes.NumOutputs     = 4;  
    sizes.NumInputs      = 2;   
    sizes.DirFeedthrough = 0;  
    sizes.NumSampleTimes = 0;   
                                
    sys = simsizes(sizes);
    x0  = [0.5 -0.5 0 0];            
    str = [];                   
    ts  = [];                   
    
    function sys=mdlDerivatives(t,x,u)  
    th1 = x(1);
    th2 = x(2);
    dth1 = x(3);
    dth2 = x(4);
    tao1 = u(1);
    tao2 = u(2);
    tao = [tao1;tao2];
    
    %系统参数
    g = 9.81;
    m1 = 1;
    m2 = 2;
    l1 = 1;
    l2 = 2;
    d = [th1*dth1*sin(th2)+dth1; th2*dth2*cos(th1)+dth2]; %外部干扰矩阵d
    
    %质量矩阵M
    M = [l2^2*m2+2*l1*l2*m2*cos(th2)+l1^2*(m1+m2) l2^2*m2+l1*l2*m2*cos(th2);
         l2^2*m2+l1*l2*m2*cos(th2) l2^2*m2];
    %离心力和哥氏力矢量
    C = [-m2*l1*l2*sin(th2)*dth2^2-2*m2*l1*l2*sin(th2)*dth1*dth2; m2*l1*l2*sin(th2)*dth1^2];
    %重力矢量
    G = [m2*l2*g*cos(th1+th2)+(m1+m2)*l1*g*cos(th1); m2*l2*g*cos(th1+th2)];
    some = inv(M) * (tao-d-G-C);
    
    sys(1) = x(3);   
    sys(2) = x(4);   
    sys(3) = some(1);   
    sys(4) = some(2);  
        
    function sys=mdlOutputs(t,x,u)   %产生(传递)系统输出
    sys(1)=x(1);   %q1
    sys(2)=x(2);   %q2
    sys(3)=x(3);   %dq1
    sys(4)=x(4);   %dq2
    
    

    第一、二关节角度跟踪误差

    第一、二关节角速度跟踪误差

      总结:从仿真结果可以看出角度和角速度在2s内跟踪上了期望轨迹,之后曲线存在轻微波动,后期可以通过调节矩阵L1,K1,L2,K2的参数来降低跟踪误差,总体鲁棒控制跟踪效果良好。

    展开全文
  • matlab】单摆鲁棒滑模控制matlab实现从简到繁

    千次阅读 多人点赞 2020-07-01 09:30:55
    这是前几周现代鲁棒控制课程一位同学的大作业,ppt做的很详细,但是并没有分享代码,我就根据ppt里的单摆模型以及所涉及到的鲁棒滑模控制方法和思路,自己搭了一套仿真程序,非常便捷,需要切换控制方法时只需要把...

    前言

    这是前几周现代鲁棒控制课程一位同学的大作业,ppt做的很详细,但是并没有分享代码,我就根据ppt里的单摆模型以及所涉及到的鲁棒滑模控制方法和思路,自己搭了一套仿真程序,非常便捷,需要切换控制方法时只需要把目标代码取消注释,便可以跑出相应结果,便于新手对鲁棒滑膜控制进行学习。

    鲁棒滑模控制

    知识点部分引用截图:

    定义部分

    在这里插入图片描述
    在这里插入图片描述

    基本设计过程

    在这里插入图片描述
    在这里插入图片描述

    仿真

    基本模型

    在这里插入图片描述

    %% 单摆相关参数
    theta = -1.00;                                                           %   攻角deg   x1
    omegaz =  2.00;                                                          %   俯仰角速度,deg/s   x2
    del_theta = 0.00;                                                           %   攻角微分deg   
    del_omegaz =  0.00;                                                          %   俯仰角速度微分,deg/s
    g = 9.78;                                                                   %重力加速度
    J = 1.2;                                                                   %   转动惯量kg/m^2
    L = 1.74;                                                                     %   摆长m
    V_s = 0.18;                                                                     %   摩擦系数m/s^2
    
        %二阶系统非线性微分方程
        del_theta = omegaz;
        del_omegaz = - 0.5 *g * sin(theta) / L - V_s * omegaz / J + u / J;
        f = - 0.5 *g * sin(theta) / L - V_s * omegaz / J;
    

    滑模控制

    在这里插入图片描述

        method = '滑模控制';
        s = del_theta + c * theta;                                                              %   滑模面
        u = - ep * sign(s) - f - c * omegaz;        %滑模控制基于趋近律
        u = - f - c * omegaz;        %滑模控制基于等效控制原理
    

    在这里插入图片描述

    终端滑模控制

    在这里插入图片描述

        method = '终端滑模控制';
        s = omegaz + alpha * theta^(q/p);                                                              %   终端滑模面
        u = - ep * sign(s)- f - alpha * beta * abs(theta)^(beta - 1) * omegaz;        %终端滑模控制基于趋近律
        u = - f - alpha * beta * abs(theta)^(beta - 1) * omegaz;        %终端滑模控制基于等效控制原理
    

    在这里插入图片描述

    快速终端滑模控制

    在这里插入图片描述

        method = '快速终端滑模控制';
        s = omegaz + k1 * theta^(a1) + k2 * theta^(a2);                                                              %   快速终端滑模面
        u = - f - k1 * a1 * abs(theta)^(a1 - 1) * omegaz - k2 * a2 * abs(theta)^(a2 - 1) * omegaz;        %快速终端滑模控制基于等效控制原理
    
    

    在这里插入图片描述

    非奇异终端滑模控制

    在这里插入图片描述

        method = '非奇异终端滑模控制';
        s = theta + alpha * omegaz^(p/q);                                                              %   非奇异终端滑模面
        u = - f - q/(alpha * p) * omegaz ^ (2-p/q);        %非奇异终端滑模控制基于等效控制原理
    
    

    在这里插入图片描述

    非奇异快速终端滑模控制

    在这里插入图片描述

        method = '非奇异快速终端滑模控制';
        s = theta + k3 * sign(theta)^(a3) + k4 * sign(omegaz)^(a4);                                                              %   非奇异快速终端滑模面
        u = (- omegaz - k3 * a3 * abs(theta)^(a3 - 1) * omegaz)/(k4 * a4 * abs(omegaz)^(a4 - 1))- f ;        %非奇异快速终端滑模控制基于等效控制原理
    
    

    在这里插入图片描述
    注:控制器中基于趋近律和基于等效控制原理的区别为是否带有滑模面的符号函数,可以根据前两个控制器的代码观察得出。

    整体代码

    % 单摆滑模控制测试仿真
    %根据现代鲁棒控制桑豪ppt
    % Jun 24 2020 Wed  Jonny Su
    clc;
    close all;
    clear all;
    cd ('D:\OneDrive - 徐州开放大学\NPU\program\Morphing\Robust');
    %% 单摆相关参数
    theta = -1.00;                                                           %   攻角deg   x1
    omegaz =  2.00;                                                          %   俯仰角速度,deg/s   x2
    del_theta = 0.00;                                                           %   攻角微分deg   
    del_omegaz =  0.00;                                                          %   俯仰角速度微分,deg/s
    g = 9.78;                                                                   %重力加速度
    J = 1.2;                                                                   %   转动惯量kg/m^2
    L = 1.74;                                                                     %   摆长m
    V_s = 0.18;                                                                     %   摩擦系数m/s^2
    
    %% 控制参数
    
    %   滑模面
    c = 0.3;
    ep = 0.5;
    u = 0;
    
    %   终端滑模面&非奇异终端滑模面 
    % alpha = 0,9;      %什么神仙bug
    alpha = 0.9;
    p = 9;
    q = 7;
    
    %   快速终端滑模面
    k1 = 1.1;
    k2 = 0.9;
    a1 = 9/7;
    a2 = 7/9;
    
    %   非奇异快速终端滑模面
    k3 = 1.1;
    k4 = 0.9;
    a3 = 3;
    a4 = 9/7;
    beta = q/p;  %两个奇数
    
    %% Simulation parameters
    
    step = 0.01;               %步长
    t = 0;                      %时间
    n = 1;                      %步数
    
    %% 二阶系统仿真
    
    while (t < 50)              %仿真时间50s
        %二阶系统非线性微分方程
        del_theta = omegaz;
        del_omegaz = - 0.5 *g * sin(theta) / L - V_s * omegaz / J + u / J;
        f = - 0.5 *g * sin(theta) / L - V_s * omegaz / J;
        %% 控制器设计
    
        %滑模控制
        method = '滑模控制';
        s = del_theta + c * theta;                                                              %   滑模面
        u = - ep * sign(s) - f - c * omegaz;        %滑模控制基于趋近律
    %     u = - f - c * omegaz;        %滑模控制基于等效控制原理
    
        %终端滑模控制
    %     method = '终端滑模控制';
    %     s = omegaz + alpha * theta^(q/p);                                                              %   终端滑模面
    %     u = - ep * sign(s)- f - alpha * beta * abs(theta)^(beta - 1) * omegaz;        %终端滑模控制基于趋近律
    %     u = - f - alpha * beta * abs(theta)^(beta - 1) * omegaz;        %终端滑模控制基于等效控制原理
    
        %快速终端滑模控制
    %     method = '快速终端滑模控制';
    %     s = omegaz + k1 * theta^(a1) + k2 * theta^(a2);                                                              %   快速终端滑模面
    %     u = - f - k1 * a1 * abs(theta)^(a1 - 1) * omegaz - k2 * a2 * abs(theta)^(a2 - 1) * omegaz;        %快速终端滑模控制基于等效控制原理
    
        %非奇异终端滑模控制
    %     method = '非奇异终端滑模控制';
    %     s = theta + alpha * omegaz^(p/q);                                                              %   非奇异终端滑模面
    %     u = - f - q/(alpha * p) * omegaz ^ (2-p/q);        %非奇异终端滑模控制基于等效控制原理
    
        %非奇异快速终端滑模控制
    %     method = '非奇异快速终端滑模控制';
    %     s = theta + k3 * sign(theta)^(a3) + k4 * sign(omegaz)^(a4);                                                              %   非奇异快速终端滑模面
    %     u = (- omegaz - k3 * a3 * abs(theta)^(a3 - 1) * omegaz)/(k4 * a4 * abs(omegaz)^(a4 - 1))- f ;        %非奇异快速终端滑模控制基于等效控制原理
    
    %% 状态更新 
        states_old = [theta;omegaz];      %弹道倾角 俯仰角速度
        del = [del_theta;del_omegaz];                 %微分量
        states_new = states_old + del * step;           %更新 赋值
        theta = states_new(1);
        omegaz = states_new(2);
        %   保存数据
        Vehicle_states(n,:) = [theta;omegaz]; %
        Del_states(n,:) = [del_theta;del_omegaz];         %
        Time(n) = t;   %时间记录
        Control_states(n,:) =  [u];            %控制变量
        %  时间更新
        t = t + step;  %仿真步长
        n = n + 1;  %计数+1
    end
    
    
    %% 绘图检验
    figure;
    % 速度
    plot(Time,Vehicle_states(:,1),Time,Vehicle_states(:,2),'linewidth',1.5);
    %axis([0 100 1400 1600]) ;
    legend('$\theta(^\circ)$','$\omega_z(^\circ/s)$','FontName','Times New Roman','FontSize',14,'Interpreter','latex')
    grid on;
    title(['控制方法为 ',method,' 时的响应曲线']);
    xlabel('$T(s)$','FontName','Times New Roman','FontSize',14,'Interpreter','latex');
    % ylabel('$\theta(^\circ)$','FontName','Times New Roman','FontSize',14,'Interpreter','latex');
    % set(gca,'FontName','Times New Roman','FontSize',14,'linewidth',1.5);
    
    figure;
    plot(Time,Control_states(:,1),'linewidth',1.5);
    %axis([0 100 18500 21500]) ;
    grid on;
    title(['控制方法为 ',method,' 时的输入信号']);
    xlabel('$T(s)$','FontName','Times New Roman','FontSize',14,'Interpreter','latex');
    ylabel('$input$','FontName','Times New Roman','FontSize',14,'Interpreter','latex');
    % set(gca,'FontName','Times New Roman','FontSize',14,'linewidth',1.5);
    

    以上就是单摆鲁棒滑模控制matlab实现的全部内容,欢迎讨论交流。

    欢迎访问我的个人网站 http://www.josu.top/

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 341
精华内容 136
关键字:

matlab鲁棒控制

matlab 订阅